Problème de reidrection

Petit nouveau ! | 5 Messages

04 juil. 2011, 14:52

Bonjour à tous !
Je suis en train d'apprendre le PHP et je suis en train de m'entrainer en faisant un blog où l'on peu posté des commentaires.
J'ai donc une page d'accueil index.php qui affiche les dernières nouvelles du blog, une page commentaires.php qui affiche les commentaires d'un billet du blog et qui contient un formulaire pour en ajouter un, et un fichier commentaires_post.php qui insère le commentaire et redirige vers le billet et ses commentaires que consultait le visiteur. C'est justement la redirection qui me pose problème.

Voilà le formulaire d'envoi de commentaires:
<form method="post" action="commentaires_post.php">
<fieldset>
<legend>Ajouter votre commentaire</legend>
<p><label for="pseudo">Votre pseudo :</label><br/>
<input type ="text" name="pseudo" id="pseudo" tabindex="10" size="15" maxlength="12"/></p>
<p><label for="commentaire">Votre commentaire :</label><br/>
<textarea name="commentaire" id="commentaire" accesskey="C" tabindex="20" rows="10" cols="35"></textarea></p>
</fieldset>
<p><input type="submit" value="Envoyer" /><input type="hidden" name="billet" value="<?php echo $_GET['billet']; ?>" /></p>
</form>
Et le fichier commentaires_post.php :
<?php
//connexion bdd
try
{
	$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
	$bdd= new PDO('mysql:host=localhost;dbname=...', 'root', '...',  $pdo_options);
	
	//insertion du message
	$req= $bdd->prepare('INSERT INTO commentaires (auteur, commentaire, date_commentaire, id_billet) VALUES(?, ?, NOW(), ?)');
	$req->execute(array($_POST['pseudo'], $_POST['commentaire'], $_POST['billet']));
	
	//redirection
	header('Location: commentaires.php?billet=<?php echo $_POST[\'billet\'] ?>');
}
catch(Exception $e)
{
	die('Erreur : ' .$e->getMessage());
}
?>
Leon@rd

ViPHP
ViPHP | 2577 Messages

04 juil. 2011, 15:58

Bonjour,

Quel problème te pose la redirection ?

Ne serait ce pas la presence de "commentaires.php?billet=<?php echo $_POST['billet'] ?>" dans l'url ?

Petit nouveau ! | 5 Messages

04 juil. 2011, 16:09

Exactement !
Au lieu d'avoir "commentaires.php&billet=2" dans l'URL (si le commentaire porte sur le billet n°2), je me retrouve avec "commentaires.php?billet=<?php echo $_POST['billet'] ?>", ce qui ne correspond à aucun billet du blog.
En fait il faudrait que le numéro du billet dans l'URL corresponde à celui que le visiteur a commenté.

Leon@rd.

Petit nouveau ! | 5 Messages

05 juil. 2011, 21:24

Je rajoute quelques précisions:
Dans ma page d'accueil, j'ai un lien en dessous de chaque billet qui permet de consulter ces commentaires:
<a href="commentaires.php?billet=<?php echo $donnees['id']; ?>">Commentaires</a>
Du coup, lorsqu'on consulte les commentaires d'un billet, on a une adresse du genre "commentaires.php&billet=id du billet". Dans mon formulaire, j'ai donc mis un bouton cahé qui envoi cette donnée au fichier commentaires_post.php :
<input type="hidden" name="billet" value="<?php echo $_GET['billet']; ?>" />
Normalement, je devrais donc pouvoir récupérer cette variable avec $_POST['billet'].
Ce que je ne comprend pas c'est pourquoi la redirection ne marche pas ?
header('Location: commentaires.php?billet=<?php echo $_POST[\'billet\'] ?>')

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

05 juil. 2011, 21:30

La fonction header() est une fonction php... il n'est donc pas nécessaire d'ouvrir / fermer les balises php puisque tu es déjà à l'intérieur de ces balises. De même, le echo n'a pas d'intérêt puisque l'objectif n'est pas d'afficher quelque chose à l'écran mais de générer une chaine de caractères en concaténant des chaines et des variables :
header('Location: commentaires.php?billet=' . $_POST['billet']);
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 5 Messages

05 juil. 2011, 22:03

Merci pour les précisions !
J' ai donc tapé :
header('Location: commentaires.php?billet=' .$_POST['billet']');
Mais il y a toujours un problème: en plus de ne pas me redirigé, le commentaire n'est même pus inséré ...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

05 juil. 2011, 22:12

Et sans l'apostrophe en trop après $_POST['billet'] ? ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 5 Messages

06 juil. 2011, 09:59

Ah oui effectivement !
Ça y est, ça marche, merci beaucoup pour ton aide !