Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/07/2011, 11h12   #1
Candidat au titre de Membre du Club
 
Homme
Développeur multimédia
Inscription : juillet 2011
Messages : 21
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Maroc

Informations professionnelles :
Activité : Développeur multimédia
Secteur : Industrie

Informations forums :
Inscription : juillet 2011
Messages : 21
Points : 12
Points : 12
Par défaut Déspécialisation du code HTML en PHP

Bonjour les amis,

J'ai une page newart.php contenant un formulaire d'ajout contenant 3 champs,

List_rubrique
Nom
Texte

La récupération des valeurs POST ça marche bien, mais le requête insert sql lance une erreur au niveau du champs texte qui contient du code html (utilisation du CKeditor pour l'ajour des nouveau article). l'erreur est la suivant :

Code :
1
2
3
 
Erreur d'insertion : 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 ''rubrique0_id0','nom','texte') values ('5','test_nom','
Text de test  ' at line 1
sachant qu'avant de passer le texte à la requête j'ai utiliser la fonction addslashes($texte); pour dé-spécialiser les caractères spéciaux.


Aucune idée ? et Merci d'avance ...
eo-soft est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 11h19   #2
Membre éclairé
 
Avatar de sohnic
 
Femme
bioinfo
Inscription : mai 2003
Messages : 385
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : bioinfo

Informations forums :
Inscription : mai 2003
Messages : 385
Points : 363
Points : 363
Bonjour,
Et avec mysql_real_escape_string() plutot que addslashes, ça passe pas mieux ?

Bonne chance,

Sohnic
__________________
http://www.noctinfo.fr/

(\ _ /)
(='.'=) Voici Lapinou. Aidez-le à conquérir le monde en le reproduisant.
(")-(")
sohnic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 11h33   #3
Candidat au titre de Membre du Club
 
Homme
Développeur multimédia
Inscription : juillet 2011
Messages : 21
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Maroc

Informations professionnelles :
Activité : Développeur multimédia
Secteur : Industrie

Informations forums :
Inscription : juillet 2011
Messages : 21
Points : 12
Points : 12
Merci pour la réponse,

En fait j'ai testé la fonction avec le contenue suivant :

Code :
1
2
3
 
Texte de teste Texte de teste Texte de teste Texte de teste 
Texte de teste Texte de teste Texte de teste Texte de teste
après j'ai fait

Code :
1
2
3
 
$texte=mysql_real_escape_string($texte);
echo "Voilà le texte : ".$texte;
Et ça donne :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
Voilà le texte :
\r\n	Texte de teste Texte de teste Texte de teste Texte de teste 
 
\r\n
\r\n
\r\n
\r\n	 Texte de teste Texte de teste Texte de teste Texte de teste 
 
\r\n
\r\n
\r\n	 
 
\r\n
Mais ça ne change rien, il m'affiche encore une erreur au moment de l'insertion :

Code :
1
2
Erreur d'insertion : 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 ''rubrique0_id0','nom','texte') values ('5','Nouveau partenaire','
\r\n	Texte d' at line
eo-soft est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 12h38   #4
Modérateur
 
Avatar de ThomasR
 
Homme Thomas Rambaud
Développeur Web
Inscription : décembre 2007
Messages : 2 140
Détails du profil
Informations personnelles :
Nom : Homme Thomas Rambaud
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 2 140
Points : 2 885
Points : 2 885
Bonjour,

Si tu ne nous montres pas ta requête SQL complète on ne pourra pas t'aider.
__________________
Développeur Web, accessoirement geek (ou l'inverse)
http://thomasrambaud.com
ThomasR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 12h52   #5
Candidat au titre de Membre du Club
 
Homme
Développeur multimédia
Inscription : juillet 2011
Messages : 21
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Maroc

Informations professionnelles :
Activité : Développeur multimédia
Secteur : Industrie

Informations forums :
Inscription : juillet 2011
Messages : 21
Points : 12
Points : 12
Ok voilà le code de la page newart.php

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
 
<?php
require_once("../cnx.php");
include_once("../fckeditor/fckeditor.php") ;
 
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Nouveau article</title>
<script type="text/javascript" src="../ckeditor/ckeditor.js"></script>
</head>
 
<body>
 
<br><br>
 
<form method="post" action="newart.php">
		<p>	
		    Rubrique parent :&nbsp;&nbsp;<select name="niveau1_list">
			<option selected="selected" value="">-----</option>
				<?php 
				$rs=mysql_query("select * from rubrique0 where nom not in ('accueil','présentation','documentation','références','contacts','support')");
					while($rubrique0=mysql_fetch_array($rs)){
						echo '<option value="'.$rubrique0['nom'].'">'.$rubrique0['nom'].'</option>';
					}
				?>
			</select><br><br>
 
 
			Nom de l'article :&nbsp;&nbsp;<input type="text" name="nom" /><br><br>
 
			<textarea id="editor1" name="editor1"></textarea>
 
			<script type="text/javascript">
				CKEDITOR.replace( 'editor1',
				{
					filebrowserBrowseUrl : '../ckfinder/ckfinder.html',
					filebrowserImageBrowseUrl : '../ckfinder/ckfinder.html?Type=Images',
					filebrowserFlashBrowseUrl : '../ckfinder/ckfinder.html?Type=Flash',
					filebrowserUploadUrl : '../ckfinder/core/connector/php/connector.php?command=QuickUpload&type=Files',
					filebrowserImageUploadUrl : '../ckfinder/core/connector/php/connector.php?command=QuickUpload&type=Images',
					filebrowserFlashUploadUrl : '../ckfinder/core/connector/php/connector.php?command=QuickUpload&type=Flash'
				});
			</script>
		</p>
		<p>
			<input type="submit" value="Valider" name="valider"/>
		</p>
	</form>
<?php 
if(isset($_POST['valider'])){		
	if(empty($_POST['niveau1_list'])){echo 'Veuillez choisir une rubrique !';}
	elseif(empty($_POST['nom'])){echo "Nom de l'article obligatoire !";}
	elseif(empty($_POST['editor1'])){echo 'Veuillez saisir un texte !';}
	else{
		$nom_parent=$_POST['niveau1_list'];		
		$nom=$_POST['nom'];
		$texte=$_POST['editor1'];
 
		$rs1=mysql_query("select * from rubrique0 where nom='".$nom_parent."'");
		$parent=mysql_fetch_array($rs1);
 
		$id0=$parent['id0'];
		mysql_query("insert into rubrique1 (rubrique0_id0,nom,texte) values ('$id0','$nom','$texte')") or die("Erreur d'insertion  : ".mysql_error());		
		}		
}
?>	
</body>
</html>
J'ai éliminé le CKeditor et J'ai testé la requête ça marche, il insert le code HTML dans la base de donnée, mais une fois je le réactive il me lance l'erreur citée précédemment.

Cordialement.
eo-soft est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 13h45   #6
Modérateur
 
Avatar de ThomasR
 
Homme Thomas Rambaud
Développeur Web
Inscription : décembre 2007
Messages : 2 140
Détails du profil
Informations personnelles :
Nom : Homme Thomas Rambaud
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 2 140
Points : 2 885
Points : 2 885
Attention, ta requête n'est pas sécurisée contre les injections SQL, c'est une grave erreur.

Code :
1
2
3
4
5
 
$nom = mysql_real_escape_string($nom);
$texte = mysql_real_escape_string($texte);
$id0 = intval($id0);
mysql_query("insert into rubrique1 (rubrique0_id0,nom,texte) values ('$id0','$nom','$texte')") or die("Erreur d'insertion  : ".mysql_error());
__________________
Développeur Web, accessoirement geek (ou l'inverse)
http://thomasrambaud.com
ThomasR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 19h03   #7
Candidat au titre de Membre du Club
 
Homme
Développeur multimédia
Inscription : juillet 2011
Messages : 21
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Maroc

Informations professionnelles :
Activité : Développeur multimédia
Secteur : Industrie

Informations forums :
Inscription : juillet 2011
Messages : 21
Points : 12
Points : 12
Oui je sais qu'elle n'est pas sécuriser, mais quand j'ajoute la fonction mysql_real_escape_string($texte) la requête déclenche l'erreur d'insertion ?
eo-soft est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2011, 11h26   #8
Modérateur
 
Avatar de ThomasR
 
Homme Thomas Rambaud
Développeur Web
Inscription : décembre 2007
Messages : 2 140
Détails du profil
Informations personnelles :
Nom : Homme Thomas Rambaud
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 2 140
Points : 2 885
Points : 2 885
Citation:
Envoyé par eo-soft Voir le message
Oui je sais qu'elle n'est pas sécuriser, mais quand j'ajoute la fonction mysql_real_escape_string($texte) la requête déclenche l'erreur d'insertion ?
Non.
__________________
Développeur Web, accessoirement geek (ou l'inverse)
http://thomasrambaud.com
ThomasR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2011, 12h19   #9
Candidat au titre de Membre du Club
 
Homme
Développeur multimédia
Inscription : juillet 2011
Messages : 21
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Maroc

Informations professionnelles :
Activité : Développeur multimédia
Secteur : Industrie

Informations forums :
Inscription : juillet 2011
Messages : 21
Points : 12
Points : 12
Citation:
Envoyé par ThomasR Voir le message
Non.
Mais je viens de la tester pas mal de fois ... S'il vous plait expliquez plus, car je suis bloquer au niveau de l'ajout des articles rédigés et c'est très important dans mon projet,

Cordialement
eo-soft est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/07/2011, 05h49   #10
Invité régulier
 
Inscription : février 2008
Messages : 7
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 7
Points : 6
Points : 6
Je pense que ce sont les retours chariot et le saut de ligne(\r\n) qui génère l'erreur.
Deux solution :
-la fonction
Citation:
string nl2br ( string $string [, bool $is_xhtml = true ] )
-ou
Code :
1
2
3
str_replace("\r\n", "", $str);
str_replace("\r", "", $str);
str_replace("\n", "", $str);
genosite est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 24/07/2011, 10h53   #11
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
Bonjour,
voila comment je m'y prends : (artContenu_fr est issu d'un textarea FckEditor)
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?php
	// -----------------------------------------
	// 1- RECUPERATION DES DONNEES DU FORMULAIRE
	// -----------------------------------------
	$traiter 		= $_POST['traiter'];
	$articleId 		= intval($_POST['articleId']);
	$artTitre_fr 		= htmlspecialchars(stripslashes(trim($_POST['artTitre_fr'])));
	$artContenu_fr 		= stripslashes(trim($_POST['artContenu_fr']));	// textarea
	// -----------------------------------------
	// 2- GESTION des ERREURS
	// -----------------------------------------
	// [...........]
   if($erreurs==0) {
	// -----------------------------------------
	// 3- ENREGISTREMENT en BdD (si pas d'erreur)
	// -----------------------------------------
	// protection contre injection sql
		$articleId 		= mysql_real_escape_string($articleId);
		$artTitre_fr 		= mysql_real_escape_string($artTitre_fr);
		$artContenu_fr 		= mysql_real_escape_string($artContenu_fr);
	// -------------------------
	if ($traiter == 'AJOUTER') {
		// INSERT : nouvelle entree dans la table
		$query_insert 		= "INSERT INTO matable ".
					" (".
					" titre_art_fr, ".
					" contenu_art_fr ".
					") VALUES (".
					"'".$artTitre_fr."', ".
					"'".$artContenu_fr."' ".
					");";
		mysql_query($query_insert) or die('Erreur SQL :<br />'.$query_insert.'<br />'.mysql_error());
	// -------------------------
	} elseif ($traiter == 'MODIFIER') {
		// UPDATE de la fiche :
		$query_update 		= "UPDATE ".$TAB_ARTICLES_ART." SET ".
					" titre_art_fr = 	'".$artTitre_fr."', ".
					" contenu_art_fr = 	'".$artContenu_fr."' ".
					" WHERE id_article = 	'".$articleId."';";
		mysql_query($query_update) or die('Erreur SQL :<br />'.$query_update.'<br />'.mysql_error());
	}
   }
	// -----------------------------------------
?>
Cela dit, as-tu vérifié le TYPE de ton champ "texte" dans ta BdD ??
il doit être de TYPE TEXT ou LONGTEXT ...

Tu peux aussi t'inspirer de ce tuto : Système de Gestion-Affichage de Nouvelles (Avec éditeur wysiwyg, photo et fichier joint)
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2011, 11h36   #12
Candidat au titre de Membre du Club
 
Homme
Développeur multimédia
Inscription : juillet 2011
Messages : 21
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Maroc

Informations professionnelles :
Activité : Développeur multimédia
Secteur : Industrie

Informations forums :
Inscription : juillet 2011
Messages : 21
Points : 12
Points : 12
désoler pour le retard et je vous remercie pour vos réponse... problème résolu
eo-soft est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h34.


 
 
 
 
Partenaires

Hébergement Web