Slashes PHP-SQL
Résolu/Fermé
Fetide68
Messages postés
746
Date d'inscription
dimanche 4 janvier 2009
Statut
Membre
Dernière intervention
16 septembre 2024
-
25 août 2009 à 16:50
Fetide68 Messages postés 746 Date d'inscription dimanche 4 janvier 2009 Statut Membre Dernière intervention 16 septembre 2024 - 26 août 2009 à 09:35
Fetide68 Messages postés 746 Date d'inscription dimanche 4 janvier 2009 Statut Membre Dernière intervention 16 septembre 2024 - 26 août 2009 à 09:35
A voir également:
- Slashes PHP-SQL
- Easy php - Télécharger - Divers Web & Internet
- Logiciel sql - Télécharger - Bases de données
- Php natif - Forum PHP
- Requête sql date supérieure à ✓ - Forum Programmation
- Sql replace plusieurs valeurs - Forum Programmation
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 ".
Passarinho44
Messages postés
963
Date d'inscription
mercredi 28 mai 2008
Statut
Contributeur
Dernière intervention
13 juin 2012
132
25 août 2009 à 16:54
25 août 2009 à 16:54
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.
M@dien
Messages postés
437
Date d'inscription
mercredi 29 juillet 2009
Statut
Membre
Dernière intervention
23 septembre 2010
74
25 août 2009 à 16:57
25 août 2009 à 16:57
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.
Fetide68
Messages postés
746
Date d'inscription
dimanche 4 janvier 2009
Statut
Membre
Dernière intervention
16 septembre 2024
32
25 août 2009 à 17:03
25 août 2009 à 17:03
Pourquoi pas de echo avec un header ???
C'est pas pratique !
C'est pas pratique !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Fetide68
Messages postés
746
Date d'inscription
dimanche 4 janvier 2009
Statut
Membre
Dernière intervention
16 septembre 2024
32
25 août 2009 à 17:07
25 août 2009 à 17:07
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.
Passarinho44
Messages postés
963
Date d'inscription
mercredi 28 mai 2008
Statut
Contributeur
Dernière intervention
13 juin 2012
132
25 août 2009 à 17:09
25 août 2009 à 17:09
Essaie de remplacer les "&&" par des "and"
Et puis ils sont peut-être envoyés mais vides donc ils passent dans le isset, sinon fait le test $lien == "" si tu ne veux pas qu'ils soient vide
Et puis ils sont peut-être envoyés mais vides donc ils passent dans le isset, sinon fait le test $lien == "" si tu ne veux pas qu'ils soient vide
Passarinho44
Messages postés
963
Date d'inscription
mercredi 28 mai 2008
Statut
Contributeur
Dernière intervention
13 juin 2012
132
25 août 2009 à 17:08
25 août 2009 à 17:08
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 ||
Fetide68
Messages postés
746
Date d'inscription
dimanche 4 janvier 2009
Statut
Membre
Dernière intervention
16 septembre 2024
32
25 août 2009 à 17:31
25 août 2009 à 17:31
Merci les gars ! J'ai bien tout pigé, c'est très clair !
moderno31
Messages postés
870
Date d'inscription
mardi 23 juin 2009
Statut
Membre
Dernière intervention
8 août 2012
92
25 août 2009 à 17:34
25 août 2009 à 17:34
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.
Fetide68
Messages postés
746
Date d'inscription
dimanche 4 janvier 2009
Statut
Membre
Dernière intervention
16 septembre 2024
32
26 août 2009 à 09:35
26 août 2009 à 09:35
Tout le monde y trouve son compte. C'est parfait !
26 août 2009 à 09:04
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!