Système de news

Par Waren59, il y a 14 ans


Bonsoir, j'ai une erreur SQL quand j'écris dans un formulaire et que j'ajoute un apostrophe, mais lorsque je ne met pas d'apostrophe la requête s’exécute normalement. La voici :

<?php
    require("../config.php");
    mysql_connect(DB_HOST,DB_LOGIN,DB_PASS);
    mysql_select_db(DB_BDD);
    extract($_POST);
    $sql="INSERT INTO news (titre,auteur,contenu) VALUES ('$titre','$auteur','$contenu')";
    $req=mysql_query($sql) or die('Erreur SQL !<br/>'.$sql.'<br/>'.mysql_error());
    header('Location: index.php');
?>

Et voici l'erreur :

Erreur SQL !
INSERT INTO news (titre,auteur,contenu) VALUES ('Fermeture du site !','Maxence','Aujourd'hui !')
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 'hui !')' at line 1

Quel est le problème ?

Merci d'avance.

10 réponses

slyvaan, il y a 14 ans
INSERT INTO news (titre,auteur,contenu) VALUES ('Fermeture du site !','Maxence','Aujourd'hui !')

L'apostrophe de "Aujourd'hui" bloque dans ton script. N'oublie pas le "htmlspecialchars" pour tes variables, sinon tu auras le problème avec chaque apostrophe.

$sql="INSERT INTO news (titre,auteur,contenu) VALUES ('".htmlspecialchars($titre)."','".htmlspecialchars($auteur)."','".htmlspecialchars($contenu)."')";
Waren59, il y a 14 ans

Merci beaucoup !

Waren.

Waren59, il y a 14 ans

Après le test du code il y a de nouveau une erreur que voici :

Erreur SQL !
INSERT INTO news (titre,auteur,contenu) VALUES ('Fermeture du site !','Maxence','Aujourd'hui je ferme le site.')
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 'hui je ferme le site.')' at line 1
Babou, il y a 14 ans

Refais nous voir ton code qui traite l'insertion de données !

Waren59, il y a 14 ans

Le voici :

<?php
    require("../config.php");
    mysql_connect(DB_HOST,DB_LOGIN,DB_PASS);
    mysql_select_db(DB_BDD);
    extract($_POST);
    $sql="INSERT INTO news (titre,auteur,contenu) VALUES ('".htmlspecialchars($titre)."','".htmlspecialchars($auteur)."','".htmlspecialchars($contenu)."')";
    $req=mysql_query($sql) or die('Erreur SQL !<br/>'.$sql.'<br/>'.mysql_error());
    header('Location: index.php');
?>
slyvaan, il y a 14 ans

Bouarf je suis un peu fatigué ce soir dirait t'on... c'est stripslashes et pas htmlspecialchars ~~;
Désolé pour la grosse bourde.

Waren59, il y a 14 ans

Cela ne fonctionne toujours pas mais j'ai chercher sur google et j'ai trouver la commande "addslashes()" qui fait fonctionner le script.
Merci de votre aide.

Babou, il y a 14 ans

Oui justement addslashes() est la bonne fonction.
La fonction stripslashes() va supprimer les antislashes, alors que justement il faut en ajouter.

slyvaan, il y a 14 ans

Vais me coucher... >.>

Babou, il y a 14 ans

Ahah c'est sûr :p