Bonjour,
Je viens vers vous puisque j'ai un problème. Sur la page admin de mon site, j'ai une page qui permet la modification des données. Pour cela je dois d'abord recuperer les donnees.
Mais lorsque j'essaye de recuperer, ca ne marche pas. Il ne recupere que le "titre". Les categorie, contenu etc n'est pas recuperé. Après plusieurs tentative, je ne trouve pas toujours le moyen de recuperer. Je vous joint le code en bas, mais cette même code marchait il y a quelques temps.

<?php        
//d'abord on va se connecter à la bas   
  $bdd = new PDO(''); // On se connecte à la base

if (isset($_GET['id']))   
{  

    // On récupère seulement les informations de la news en fonction de son id.  
  $reponse = $bdd->query('SELECT * FROM news WHERE id=\'' . $_GET['id'] . '\'');  
   while ($donnees = $reponse->fetch())  
    // declaration du titre  
    $titre = addslashes ($donnees['titre']);  
    // declaration de la catégorie 
    $categorie = addslashes ($donnees['categorie']); 
    // declaration de l'introduction  
    $introduction = addslashes ($donnees['introduction']); 
    // declaration du contenu  
    $contenu = addslashes($donnees['contenu']);  
      // declaration de l'url  
    $url = addslashes($donnees['url']);  

    $id_news = $donnees['id']; // Nous jouons sur cette variable pour la modification.  

}  

?>  

<center>  
  <h3>Modifier l'article  </h3>  
 <!-- Voici le formulaire -->  
    <form method="post" action="edit_news_ok.html">  
        Titre du news : <input name="titre" value="<?php echo $titre; ?>"/><br /> 
        Categorie : <input name="categorie" value="<?php echo $categorie; ?>"/><br />       
         Introduction :<br />  
        <textarea name="introduction" rows="10" cols="45"><?php echo $introduction; ?></textarea> <br />
        contenu :<br />  
        <input type="hidden" name="id_news" value="<?php echo $id_news; ?>" />  
        <textarea name="contenu" rows="10" cols="45"><?php echo $contenu; ?></textarea> <br />  
         url de l'image : <input name="url" value="<?php echo $url; ?>"/><br /> 
        <input type="submit" value="Envoyer" />  
    </form>  
    <!-- fin du formulaire -->  
</center>  

<table border="1"><tr>  
<th>Titre</th>  
<th>Modifier</th>  
</tr>  
<?php  
 // On selectionne les news par ordre( du nouveau à l'ancien)    
$reponse = $bdd->query('SELECT * FROM news ORDER BY id DESC');  
/* On fait une boucle while pour lister les news  
en affichant leurs titres un lien "modifier" pour chaque news 
*/   
while ($donnees = $reponse->fetch())
{  
?>  
<tr>  
<td><?php echo stripslashes($donnees['titre']); ?></td>  
<td><?php echo '<a href="edit_news.html?id=' . $donnees['id'] . '">'; ?>Modifier</a></td>  
</tr>  

<?php  
} // Fin de la boucle   
?>  

Vous pouvez m'aider a corriger cette problème?

Merci d'avance,

13 réponses


Carouge10
Réponse acceptée

Je ne fais que traduire votre code.
Voici une modification qui conviandrais mieux dans ce que vous souhaitez faire.

<?php        
//d'abord on va se connecter à la bas   
  $bdd = new PDO(''); // On se connecte à la base

if (isset($_GET['id']))   
{  
    // On récupère seulement les informations de la news en fonction de son id.  
    $reponse = $bdd->query("SELECT * FROM news WHERE id = ".$_GET['id']);  
    $donnees = $reponse->fetch();
    // declaration du titre  
    $titre = addslashes ($donnees['titre']);  
    // declaration de la catégorie 
    $categorie = addslashes ($donnees['categorie']); 
    // declaration de l'introduction  
    $introduction = addslashes ($donnees['introduction']); 
    // declaration du contenu  
    $contenu = addslashes($donnees['contenu']);  
      // declaration de l'url  
    $url = addslashes($donnees['url']);  

    $id_news = $donnees['id']; // Nous jouons sur cette variable pour la modification.  
}  

?>  

<center>  
  <h3>Modifier l'article  </h3>  
 <!-- Voici le formulaire -->  
    <form method="post" action="edit_news_ok.html">  
        Titre du news : <input name="titre" value="<?= $titre; ?>"/><br /> 
        Categorie : <input name="categorie" value="<?= $categorie; ?>"/><br />       
         Introduction :<br />  
        <textarea name="introduction" rows="10" cols="45"><?= $introduction; ?></textarea> <br />
        contenu :<br />  
        <input type="hidden" name="id_news" value="<?= $id_news; ?>" />  
        <textarea name="contenu" rows="10" cols="45"><?= $contenu; ?></textarea> <br />  
         url de l'image : <input name="url" value="<?= $url; ?>"/><br /> 
        <input type="submit" value="Envoyer" />  
    </form>  
    <!-- fin du formulaire -->  
</center>  

<table border="1">
    <tr>  
        <th>Titre</th>  
        <th>Modifier</th>  
    </tr>  
    <?php  
     // On selectionne les news par ordre( du nouveau à l'ancien)    
    $article_all = $bdd->query('SELECT * FROM news ORDER BY id DESC');  
    /* On fait une boucle while pour lister les news  
    en affichant leurs titres un lien "modifier" pour chaque news 
    */   
    while ($donnees = $article_all->fetch())
    {  
        ?>  
        <tr>  
            <td><?= stripslashes($donnees['titre']); ?></td>  
            <td><a href="edit_news.html?id=<?= $donnees['id']; ?>">Modifier</a></td>  
        </tr>
        <?php  
    } // Fin de la boucle   
    ?>
</table> 
Carouge10
Réponse acceptée

Oui vous pouvais faire avec la fonction quote de pdo

 $_GET['id'] = $bdd->quote($_GET['id']);  

Penser à mettre votre sujet en résolu.

Bonsoir,
Avez-vous fait un var_dump($reponse); pour voir ce que vous récupérez ?
Pourquoi faire un while sur ses données sachant que vous devez n'avoir qu'un seul enregistrement ?

fanweb
Auteur

Bonsoir,

En faite, je ne recupere qu'une seule ligne. Il s'agit du titre. Alors que j'ai plusieurs lignes a recuperer comme le titre, le contenu, la catégorie etc... Parmi toutes les lignes il n'y a que le titre qui est recuperé.

"Pourquoi faire un while sur ses données sachant que vous devez n'avoir qu'un seul enregistrement ?"
C'est à dire?

Bonsoir,
ce que Carouge10 veut dire par "Pourquoi faire un while sur ses données sachant que vous devez n'avoir qu'un seul enregistrement ?" c'est que tu fais une boucle afin de récupérer des infos de la base de données. La boucle va récupérer plusieurs enregistrements, alors que dans ta requête, via le WHERE tu limite a un ID particulier, donc en partant de la tu sais que tu n'auras qu'un résultat.

Je sais pas si j'ai été clair.. j'ai tendance à me perdre dans mes explications ^^.

Pour afficher les données donnes d'une news, vous faites une boucle, pourquoi ? Sachant que vous demandez qu'une news ?
Que le vaut le var_dump du 1er $reponse ?

fanweb
Auteur

Je veux en faite recuperer tous les enregistrements d'une id (donc news).
Je demande une news, mais tous les enregistrements de cette news.
Je ne sais pas si j'étais clair?

Le premier reponse c'est pour trouver la table et recuperer les données.

Merci d'avance,

Donc vous pouvez avoir le même id pour plusieurs news ?

fanweb
Auteur

Non, j'ai une id par news.
Je recupere par exemple l'id 1 (=1 news) et je veux affiché toutes les informations que j'ai déjà rentré dans cette news.
En claire, d'abord je rajoute les news via un formulaire, ensuite je veux modifier via un autre formulaire. Dans cette nouvelle page, je recupère toutes les informations de mon news que j'ai déjà rentré pour pouvoir modifier par la suite.

Mais j'ai l'impression qu'on a du mal à se comprendre, non?

fanweb
Auteur

Ah oui, là effectivement ca marche. Merci.

J'en profite également pour demander. Etant donné que pour rajouter les news j'utilise pour ckeditor (Sur cette page ca marche), je veux également le mettre dans la page d'edition de news, mais quand je rajoute le code correspondant, il ne me fait rien:

 <textarea name="contenu" ><?= $contenu; ?></textarea> 
<script type="text/javascript">
 CKEDITOR.replace('contenu');
</script><br />

Il devait normalement rajouter le formulaire de ckeditor mais il ne fait rien. Il me laisse un champ "normal" pourquoi? Cette code marchait avant.

Merci d'avance,

  • Avez-vous inclu les fichiers pour le faire fonctionner.... ?
  • Il vaut mieux attribuer un nom différent pour chaque ckeditor.
fanweb
Auteur

C'est bon, le problème est résolu. Ca venait de mon navigateur. J'ai essayé avec un autre navigateur ca a marché. Pourtant j'utilise Chrome.

Mais je cherche aussi l'equivalent de cette code en pdo, pour la securisation. J'ai rien trouvé sur ce sujet:

    $_GET['id'] = mysql_real_escape_string(htmlspecialchars($_GET['id']));  

Je pensais rajouter cette code dans mon fichier de modification de news mais ca n'a pas marché. Message d'erreur comme quoi c'est devenu obsolète.

fanweb
Auteur

Ca marche, super.

Merci pour votre aide.