Problème script modification de news.

Eléphanteau du PHP | 28 Messages

13 févr. 2011, 03:18

Bonsoir,

J'essaie de faire un script news,problème c'est mon premier script de modification dite moi toutes mes erreurs merci :
<?php

require('include/mysql.php');

if (isset($_GET['modifier_news']))
{
    $_GET['modifier_news'] = htmlentities($_GET['modifier_news']);
    $retour = $bdd->prepare('SELECT * FROM news WHERE id = :modifier_news');
	$retour->execute(array('modifier_news' => $_GET['modifier_news']));
    
    $titre = stripslashes($donnees['titre']);
    $texte_news = stripslashes($donnees['texte_news']);
    $id_news = $donnees['id'];
}
while ($donnees = $retour->fetch())
{
?>
<form action="index.php?page=update-news" method="post" />
<label>Auteur :</label><br />
<input type="text" name="autheur" value="<?php echo $autheur ?>"/><br />
<label>Titre de la news :</label><br />                            
<input type="text" name="titre" value="<?php echo $donnees['titre'] ?>" /><br />
<label>texte de la news :</label><br />
<textarea name="texte_news" cols="57" rows="10">
<?php echo $texte_news ?>
</textarea>
<input type="submit" value="    Poster la news     " />
<input type="reset" value="    réecrire la news    " />
</form>
<?php
}
?>

ViPHP
xTG
ViPHP | 7331 Messages

13 févr. 2011, 11:57

$_GET['modifier_news'] = htmlentities($_GET['modifier_news']);
Ceci ne sert à rien.
On utilise une telle fonction lors d'un affichage et non lors de l'envoi en base de donnée.

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

13 févr. 2011, 12:19

En complément tu as également quelques petites erreurs de conception, pas méchants, mais puisque tu demandes les erreurs :) :

- Si jamais la variable $_GET['modifier_news'] n'est pas définie, tu ne vas pas rentrer dans le if(), et tu n'exécuteras donc pas la requête. Pourtant juste après, requête ou pas tu vas faire un while pour parcourir les résultats de la requête, ce qui peut engendrer une erreur puisque $retour ne sera peut être pas défini.

- Second point, d'après ta requête sql, on peut supposer que celle-ci ne doit retourner qu'un seul enregistrement (celui dont l'id est passé en paramètre). Du coup il n'est pas nécessaire de "boucler" sur l'ensemble des résultats retournés avec un while. Un simple if() pour tester qu'il y a bien un résultat ferait tout aussi bien l'affaire, voire même, si tu es certains qu'il y aura toujours un résultat trouvé, un simple appel au fetch.
C'est vraiment du détail, mais ça permet de comprendre plus facilement ton code (surtout pour celui qui reviendra dessus dans 6 mois, et qui pourrait très bien être toi ;)) parce que là, mon premier réflexe, c'est de me dire que tu as un formulaire html dans une boucle while, et donc que tu veux afficher plusieurs formulaires sur ta page, alors que ça ne sera à priori jamais le cas :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 28 Messages

14 févr. 2011, 03:31

je vous redonne le code re-fait le voici :
<fieldset>
<?php

require('include/mysql.php');

if (isset($_GET['modifier_news']))
{
    $_GET['modifier_news'] = htmlentities($_GET['modifier_news']);
    $retour = $bdd->prepare('SELECT * FROM news WHERE id = :modifier_news')
	or die(print_r($bdd->errorInfo()));
	$retour->execute(array('modifier_news' => $_GET['modifier_news']));
    
    $titre = stripslashes($donnees['titre']);
	$autheur = stripslashes($donnees['autheur']);
    $texte_news = stripslashes($donnees['texte_news']);
    $id_news = $donnees['id'];
	
} else {

    $titre = stripslashes($donnees['titre']);
	$autheur = stripslashes($donnees['autheur']);
    $texte_news = stripslashes($donnees['texte_news']);
    $id_news = $donnees['id'];
	
    $retour = $bdd->prepare('UPDATE news SET titre = :titre, autheur = :autheur, texte_news = :texte_news WHERE id = :id_news')
	or die(print_r($bdd->errorInfo()));
	$retour->execute(array('titre' => $titre,
						    'autheur' => $autheur,
							'texte_news' => $texte_news));

}
while ($donnees = $retour->fetch())
{
?>
<form action="index.php?page=update-news" method="post" />
<label>Auteur :</label><br />
<input type="text" name="autheur" value="<?php echo $donnees['autheur'] ?>"/><br />
<label>Titre de la news :</label><br />                            
<input type="text" name="titre" value="<?php echo $donnees['titre'] ?>" /><br />
<label>texte de la news :</label><br />
<textarea name="texte_news" cols="57" rows="10">
<?php echo $donnees['texte_news'] ?>
</textarea>
<input type="submit" value="    Poster la news     " />
<input type="reset" value="    réecrire la news    " />
</form>
<?php
}
?>
</fieldset>