Action: Redirection après validation de message forum - spip2

je suis en train de créer en local un nouveau squelette

j’ai regroupé sur une même page tous les messages laissés sur les différents articles, ne voulant pas que les messages apparaissent sur leurs articles respectives.

j’ai nommé cette page “Wall”, en bref le principe est de faire un commentaire via un article, qui sera édité sur le mur. Sur ce mur ou “Wall”, qui est en réalité une brève (=1), on peut également faire un commentaire libre, càd issu de cette brève.

Lorsqu’on valide définitivement le message on retourne sur l’article auquel il est associé, lorsque ce message est posté soit à partir de l’article en question, soit à partir du “Wall” en répondant à un message précédent, celui-ci ayant été alors posté à partir d’un article.

j’ai vu que forum.php mémorise l’URL de retour pour y revenir après, seulement je ne sais pas encore lire et modifier les scripts php.
l’action à entreprendre avec la validation du message est une redirection, ou retour, vers la page “Wall” ou brève, et non aux articles commentés!

voici les lignes de codes à modifier sur …formulaire/forum.php, du moins je suppose:

// au premier appel (pas de Post-var nommee "retour_forum")
[b]// memoriser eventuellement l'URL de retour pour y revenir apres [/b]
// envoi du message ; aux appels suivants, reconduire la valeur.
// Initialiser aussi l'auteur
if ($retour_forum = rawurldecode(_request('retour')))
	$retour_forum =  str_replace('&var_mode=recalcul','',$retour_forum);
else {
	// par defaut, on veut prendre url_forum(), mais elle ne sera connue
	// qu'en sortie, on inscrit donc une valeur absurde ("!")
	$retour_forum = "!";
	// sauf si on a passe un parametre en argument (exemple : {#SELF})
	if ($url_param_retour)
		$retour_forum = str_replace('&', '&', $url_param_retour);
	$retour_forum = rawurlencode($retour_forum);
}
if (_request('retour_forum')){
	$arg = forum_fichier_tmp(join('', $ids));
	
	$securiser_action = charger_fonction('securiser_action', 'inc');
	// on sait que cette fonction est dans le fichier associe
	$hash = calculer_action_auteur("ajout_forum-$arg");
}

Tu créer un input de type hidden, et avec du javascript (innerHTML = windows.location, vite fait), tu met la valeur de cet input la page courante. Puis tu la récupère avec un $_POST et tu, après avoir inscrit tes données dans les tables redirige avec


	header('Status: 301 Moved Permanently', false, 301);
	header('Location: '.$_POST['addr']);
	exit();

Attention néanmoins à la sécurité…

Accessoirement, y a une variable en PHP qui liste l’adresse (fait un coup de print_r($_SERVER), c’est dedans je crois), évitant l’utilisation de Javascript…

merci de vos réponses mais je ne comprends pas bien ce que vous dîtes, je rappelle que je ne comprends pas bien le langage scripts/php

  • R3v0LT: j’ai compris qu’il faut que je mette un repère sur ma page retour désirée - mais où exactement? -, et un appel header… sur la page de validation? - mais où aussi?

  • Sans-Nom: solution qui me paraît intéressante, mais je ne pige pas “(fait un coup de print_r($_SERVER), c’est dedans je crois)”, dedans où? pas dans les lignes de codes données ci-dessus… :etonne2:

à noter qu’il y a plusieurs fichiers qui concernent le post de message
dossier formulaire:
-forum.php (dont sont issues les lignes de codes données) qui commande les actions du formulaire de message
-forum.html qui décrit le formulaire à remplir et ordre d’action/sauvegarde des données (ex cookie)
dossier squelette:
-forum.html qui décrit les diverses boucles intervenant dans la page de post des messages

ensuite j’ai la page retour désirée

j’ai exposé mon pb notamment sur le forum spip mais je n’ai toujours pas de réponse

trouvée une piste hors php à approfondir : [(#FORMULAIRE_FORUM’spip.php ?page=echanger’)], mais je vois pas bien encore son utilisation… :confused:

Non. Dans le tableau $_SERVER, tu trouveras ton bonheur ou pas loin.

Trouvé !

une variable

$currentURL = $_SERVER["HTTP_REFERER"] . $_SERVER["REQUEST_URI"]

Cette variable contient tototo.fr… (exemple)

Dans un formulaire, tu met

<input type="hidden" name="addr" value="<?php echo $contentURL; ?>"/>

En cliquant sur le bouton de ce formulaire, (il envoie le message sur la BDD, etc)
Et une page indique “Votre message a bien été envoyé, nous vous redirigeons dans 3 secondes, ou cliquez ici.”
En code:


<p>
    Votre message a bien été envoyé, nous vous redirigeons dans 3 secondes, ou cliquez <a href="<?php echo $_POST['addr']; ?>" title="Me rediriger maintenant">ici</a>

<?php
wait("3"); //Je sais plus le nom de la fonction, de tête.
header('Status: 301 Moved Permanently', false, 301);
header('Location: '.$_POST['addr']);
exit();
?>
</p>

Surtout :

merci les gars de vos réponses!
je me répète encore, mais je me sens un peu con de ne rien comprendre à ce que vous dîtes…
mais si ça peut en aider d’autres, merci pour eux!

pffffffffff
Edité le 08/04/2010 à 19:36

bon j’essaie vraiment de faire qlqchose avec mes 3 neurones
mais quelque soit l’endoit où je colle

j’ai un message d’erreur
Edité le 10/04/2010 à 09:33

Normalement entre les balises .
Donne le message d’erreur stp.

Parse error: syntax error, unexpected T_STRING in…

C’est une erreur syntaxique. Il ne s’attendait pas à trouver une chaine de caractères => regarde à la ligne ce qu’il y avant, c’est là que se situe ton problème.