Slashes PHP-SQL

Résolu/Fermé
Fetide68 Messages postés 737 Date d'inscription dimanche 4 janvier 2009 Statut Membre Dernière intervention 14 avril 2023 - 25 août 2009 à 16:50
Fetide68 Messages postés 737 Date d'inscription dimanche 4 janvier 2009 Statut Membre Dernière intervention 14 avril 2023 - 26 août 2009 à 09:35
Bonjour,

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:

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 ".
2
M@dien Messages postés 437 Date d'inscription mercredi 29 juillet 2009 Statut Membre Dernière intervention 23 septembre 2010 74
26 août 2009 à 09:04
Merci pour l'info du mysql_real_escape_string(), je ne connaissais pas cette fonction.
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!
0
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
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.
0
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
Bonjour

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.
0
Fetide68 Messages postés 737 Date d'inscription dimanche 4 janvier 2009 Statut Membre Dernière intervention 14 avril 2023 32
25 août 2009 à 17:03
Pourquoi pas de echo avec un header ???

C'est pas pratique !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Fetide68 Messages postés 737 Date d'inscription dimanche 4 janvier 2009 Statut Membre Dernière intervention 14 avril 2023 32
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.
0
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
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
0
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
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.
0
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 ||
0
Fetide68 Messages postés 737 Date d'inscription dimanche 4 janvier 2009 Statut Membre Dernière intervention 14 avril 2023 32
25 août 2009 à 17:31
Merci les gars ! J'ai bien tout pigé, c'est très clair !
0
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
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.
0
Fetide68 Messages postés 737 Date d'inscription dimanche 4 janvier 2009 Statut Membre Dernière intervention 14 avril 2023 32
26 août 2009 à 09:35
Tout le monde y trouve son compte. C'est parfait !
0