Slashes PHP-SQL
Résolu
Fetide68
Messages postés
745
Date d'inscription
Statut
Membre
Dernière intervention
-
Fetide68 Messages postés 745 Date d'inscription Statut Membre Dernière intervention -
Fetide68 Messages postés 745 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Voici mon code :
Si j'enlève les addslashes, ça fonctionne presque nickel ! Sauf que je ne peux pas insérer des chaîne de caractère avec des appostrophes.
Mais avec les addslashes, ça ne fonctionnent pas. Internet Explorer plante et Firefox me met un message d'erreur 'redirection...'.
Comment faire pour permettre de saisir des caractères spéciaux ?
Voici mon code :
$titre = $_POST['titre']; $info = $_POST['info']; $lien = $_POST['lien']; $info = addslashes($info); $titre = addslashes($titre); if (isset($titre) || isset($info) || isset($lien)) { mysql_query ("INSERT INTO infos VALUES ('','$titre','$info','$lien')") or die ("15"); header ("location: ?titre=infos"); }
Si j'enlève les addslashes, ça fonctionne presque nickel ! Sauf que je ne peux pas insérer des chaîne de caractère avec des appostrophes.
Mais avec les addslashes, ça ne fonctionnent pas. Internet Explorer plante et Firefox me met un message d'erreur 'redirection...'.
Comment faire pour permettre de saisir des caractères spéciaux ?
A voir également:
- Slashes PHP-SQL
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Logiciel sql - Télécharger - Bases de données
- Alert php ✓ - Forum PHP
- Retour a la ligne php ✓ - Forum PHP
10 réponses
J'avoue que je ne connaissais pas cette syntaxe... Je viens de regarder dans le manuel de référence, et elle y est bien mentionnée (évidemment !) mais il faut être prudent, elle ne marche que dans les chaînes entre apostrophes, de même que le " peut être doublé dans les chaîne entre " pour en insérer un seul.
Je continuerai quand même à préférer mysql_real_escape_string, qui a l'avantage de protéger de tous les caractères nécessaires (car il y en a d'autres...) que la chaîne soit entre ' ou entre ".
Je continuerai quand même à préférer mysql_real_escape_string, qui a l'avantage de protéger de tous les caractères nécessaires (car il y en a d'autres...) que la chaîne soit entre ' ou entre ".
Tu as essayé avec la fonction mysql_real_escape_string() pour ajouter les slashes?
Et pour ton header il faut que tu fasses attention à ne pas mettre de echo dans ta page.
Et pour ton header il faut que tu fasses attention à ne pas mettre de echo dans ta page.
Bonjour
Pour mysql, l'apostrophe doit être doublée pour être insérée.
Je te propose donc ça:
Je t'ai corrigé une petite erreur dans ton test. comme tu l'avais fait, si l'un était bon le test était OK.
Pour mysql, l'apostrophe doit être doublée pour être insérée.
Je te propose donc ça:
$titre = $_POST['titre']; $info = $_POST['info']; $lien = $_POST['lien']; // On remplace /' par '' (le addslashes remplace le ' par /' ) $info = str_replace("//'","''",addslashes($info)); $titre = str_replace("//'","''",addslashes($titre)); if (isset($titre) && isset($info) && isset($lien)) {// && car sinon ça risque de buguer ;) mysql_query ("INSERT INTO infos VALUES ('','$titre','$info','$lien')") or die ("15"); header ("location: ?titre=infos"); }
Je t'ai corrigé une petite erreur dans ton test. comme tu l'avais fait, si l'un était bon le test était OK.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci M@adien, ta solution est parfaite. Un copier coller et c'est bon.
Je comprends juste pas trop le changement dans le test. Si je ne remplis que le champs infos et que je valide, titre et lien n'isset pas (lol), mais ils s'INSERT quand même à la base de données. Pourtant ton test vérifie bien que les trois "existent" (isset). Si un est vide, ça ne devrait pas marcher.
Je comprends juste pas trop le changement dans le test. Si je ne remplis que le champs infos et que je valide, titre et lien n'isset pas (lol), mais ils s'INSERT quand même à la base de données. Pourtant ton test vérifie bien que les trois "existent" (isset). Si un est vide, ça ne devrait pas marcher.
C'est peut-être pas pratique mais sinon ça ne fonctionne pas .. :/
Pour la redirection tu peux par exemple utiliser le javascript ou le HTML.
Pour la redirection tu peux par exemple utiliser le javascript ou le HTML.
Bonjour
Tu as tout à fait droit au echo dans la même page que header. Ce que tu n'as pas le droit de faire, c'est d'exécuter un echo avant le header.
Pourquoi ? C'est le protocole HTTP qui marche comme ça. ll consiste à envoyer des en-têtes (headers) puis des données (pas très original). Quand tu fais un 'echo', tu envoies des données, tu n'as donc plus le droit d'envoyer d'en-têtes.
Ne ta fatigue pas à essayer $info = str_replace("//'","''",addslashes($info));. mysql ne demande pas de doubler les apostrophes. Et l'instruction présentée commence par remplacer les ' par des /' pour ensuite remplacer les /' par ''. À quoi sert le /' intermédiaire ? En fait il faut faire $info=mysql_real_escape_string($info) comme l'avait signalé Passarinho44.
Il faut bien des && au lieu des ||
Tu as tout à fait droit au echo dans la même page que header. Ce que tu n'as pas le droit de faire, c'est d'exécuter un echo avant le header.
Pourquoi ? C'est le protocole HTTP qui marche comme ça. ll consiste à envoyer des en-têtes (headers) puis des données (pas très original). Quand tu fais un 'echo', tu envoies des données, tu n'as donc plus le droit d'envoyer d'en-têtes.
Ne ta fatigue pas à essayer $info = str_replace("//'","''",addslashes($info));. mysql ne demande pas de doubler les apostrophes. Et l'instruction présentée commence par remplacer les ' par des /' pour ensuite remplacer les /' par ''. À quoi sert le /' intermédiaire ? En fait il faut faire $info=mysql_real_escape_string($info) comme l'avait signalé Passarinho44.
Il faut bien des && au lieu des ||
Je ne sias pas où vous en etes de cette résolution , mais perso mes soucis d'insert into en base avec des chaines avec apostrophe (appli de prod) je l'ai réglé en faisant un str_replace de ' par '' sur la chaine qui serait supposée en contenir juste avant de faire l'insert. Tout s'insère comme il faut et pas de souci.
Lors de sélect pas de pb non plus donc voila.
Lors de sélect pas de pb non plus donc voila.
J'avais protégé mon site avec des HTMLentities() et m'étais renseigné sur la sécurité à ce niveau, mais je n'étais jamais tombé sur cette fonction. à savoir!