Bonjour,

Voilà, après avoir suivi le tuto "Gérer des news", je rencontre un soucis de syntax avec un retour d'erreur suivant.

erreur SQL !
UPDATE newstest SET titre='blablabla', lien='http://www.team-bam.com/t9487-Avis-Recrutement-DTM-Sevenfold-EN-COUR.htm?q=', contenu='bonjour, j'aurai', imagelien='http://img95.xooimage.com/files/1/9/0/\_\_-428df1e.png', date='2013-12-11' WHERE id=11
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'aurai', imagelien='http://img95.xooimage.com/files/1/9/0/\_\_-428df1e.png', date='' at line 1

Alors j'ai compris que l'erreur se présentait, à chaque fois que j'UPDATE une de mes variables (titre ou contenu) qui contient un apostrophe par exemple, et donc que la ligne qui pose un soucis est la n°6

Voici mon bout de code:

<?php
    if (!empty($_POST))
        {
        extract ($_POST);
       $sql="UPDATE newstest SET titre='$titre', lien='$lien', contenu='$contenu', imagelien='$imagelien', date='$date' WHERE id=$id";
        $req=mysql_query($sql) or die ('erreur SQL !</br>'.$sql.'</br>'.mysql_error());
        echo "News Mise à Jour";
        $_GET"id"]=$id;
    }
    $sql="SELECT * FROM newstest WHERE id={$_GET"id"]}";
    $req=mysql_query($sql) or die ('erreur SQL !</br>'.$sql.'</br>'.mysql_error());
    $data=mysql_fetch_assoc($req);

?>

Mais je n'arrive pas à rediger cette ligne afin de ne plus rencontrer de problème lorsque mon contenu contient un apostophe.

Alors j'ai essayé de coller un mysql_real_escape_string pensant que c'est la solution) devant comme ceci,

$sql=mysql_real_escape_string("UPDATE newstest SET titre='$titre', lien='$lien', contenu='$contenu', imagelien='$imagelien', date='$date' WHERE id=$id");

mais non apparemment j'ai du mal à l'insérer car cela me retourne une autre erreur qui me bloc la page.

En vous remerciant d'avance pour vos réponses.

3 réponses


Pewel-OutOfNutella
Réponse acceptée

Salut !

C'est mysql_real_escape_string de ta variable, pas de toute ta requête :D
Ca protège tout les caractères spéciaux par des . En l'ajoutant sur ta chaîne, ça va devenir : bonjour, j\'aurai
Ainsi, tu dis à php de ne pas en prendre en compte la fermeture de quotes, et donc de la fin d'initialisation de ta variable
Si tu utilises ça sur toute ta requête, tu auras des \ partout devant tes caractères spéciaux (toutes les quotes, signes etc)

Ca devient ça du coup :

<?php
    if (!empty($_POST)) {
        extract ($_POST);

        $contenu = mysql_real_escape_string($contenu);
        $sql="UPDATE newstest SET titre='$titre', lien='$lien', contenu='$contenu', imagelien='$imagelien', date='$date' WHERE id=$id";

        $req=mysql_query($sql) or die ('erreur SQL !</br>'.$sql.'</br>'.mysql_error());
        echo "News Mise à Jour";
        $_GET"id"]=$id;
    }

    $sql="SELECT * FROM newstest WHERE id={$_GET"id"]}";
    $req=mysql_query($sql) or die ('erreur SQL !</br>'.$sql.'</br>'.mysql_error());
    $data=mysql_fetch_assoc($req);

?>
BAM Jan0
Auteur

u><strong>@Pewel:</strong</u>

Et bien pour la 2ème fois de la journée, je te remercie encore pour ta réponse et ta réactivité. Grâce à tes précieuses réponses, j'ai pu terminer quasiment ce que je voulais mettre en place sur ma partie EDITION de notre site.

Encore merci.

Pas de quoi l'ami ! :D