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
Réponse acceptée
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
Auteur

Merci beaucoup !

Waren.

Waren59
Auteur

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

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

Waren59
Auteur

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');
?>

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

Waren59
Auteur

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.

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

Vais me coucher... >.>

Ahah c'est sûr :p