Problème avec les apostrophes

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème avec les apostrophes

par Volkow » 30 sept. 2007, 23:24

EDIT: ça marche!!!

Fiiuuu!!

Merci beaucoup!

:)

par sadeq » 30 sept. 2007, 22:59

Juste avant la requête INSERT, tu dois mettre les addslashes() pour les champs pouvant contenir les apostrophes. Comme ça par exemple:
       //Mettre addslashes()
        $titresite = addslashes($titresite);
        $descriptionsite = addslashes($descriptionsite);
        //...
        //INSERT
        $query="INSERT INTO 1two_annuaire_sites (categorie, owner, mail, titre, url, description, date_ins, heure_ins, valide) VALUES ('$listecat', '$owner', '$email', '$titresite', '$urlsite', '$descriptionsite', NOW(), NOW(), '$autovalid')"; 

par Volkow » 29 sept. 2007, 21:23

Merci mais en fait je ne vois pas où exactement placer les addslahes()...

Voilà le script pour l'annuaire (je sais que je n'aurais dû poster qu'une partie mais là je met tout afin que vous puissiez comprendre tout le script...dsl)
<? 

include ('_connexion.php'); 
$query="SELECT * FROM 1two_annuaire_preferences";
$res_preferences = @mysql_query($query,$db);
$list_preferences=@mysql_fetch_row($res_preferences);
function diff_date($date1, $date2) 
	{ 
	$tab1 = explode('-', $date1); 
	$tab2 = explode('-', $date2); 
	$timestamp1 = mktime(12, 0, 0, $tab1[1], $tab1[0], $tab1[2]); 
	$timestamp2 = mktime(12, 0, 0, $tab2[1], $tab2[0], $tab2[2]); 
	return floor((($timestamp1-$timestamp2))/(3600*24)); 
	}
$query="SELECT nom FROM 1two_annuaire_cat WHERE compteur=$id";
$res_nom_cat = @mysql_query($query,$db);
$list_nom_cat=@mysql_fetch_row($res_nom_cat);
if (($id=="") or ($id=="0")) {$list_nom_cat[0]="Accueil";}
?>
<? if($_POST['recherche']) {$search_term=$_POST['recherche'];} ?> 
<? if(isset($search_term)) {$_POST['recherche']=$search_term; $recherche=$search_term; $_POST['rechercher']="Rechercher";} ?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" href="style.css" type="text/css">
<SCRIPT language=JavaScript type=text/javascript>
function commentaires(pagename)
{
var info=window.open(pagename,'commentaires','toolbar=0,status=0,resizeable=yes,width=360,height=400,scrollbars=yes');
document.stop;
}
</SCRIPT>
</head>
<body>
<table width="100%" border="0" cellspacing="3" cellpadding="0">
  <tr> 
    <td align="center"><a href="index.php" class="lien2">Accueil</a> - <a href="<? echo "annu.php?menu=submitsite&id=$id"; ?>" class="lien2"><strong>Proposer 
      un site</strong></a> - <a href="?menu=newsites" class="lien2">Nouveaux sites</a></td>
  </tr>
</table>
<table width="100%" border="0" cellspacing="3" cellpadding="0" class="texte">
  <tr valign="top"> 
    <td width="160" align="center">
<?
$query="SELECT compteur FROM 1two_annuaire_sites WHERE valide=1"; $nbr_sites=@mysql_query($query,$db); $nbrsites=mysql_num_rows($nbr_sites);
$query="SELECT compteur FROM 1two_annuaire_cat"; $nbr_cat=@mysql_query($query,$db); $nbrcat=mysql_num_rows($nbr_cat);
echo "$nbrsites sites répartis dans $nbrcat catégories";
?>	
	<br>
	<form name="formrecherche" id="formrecherche" method="post" action=""><input type="text" name="recherche" /><br><input type="submit" name="rechercher" value="Rechercher" /></form>
	</td>
	<div id="attention">
	<p>
	<font color='red'><strong><blink>Attention!! Ne mettez surtout pas d'apostrophes dans votre description, votre nom ou le titre du site.Sinon celui-ci ne pourra être enregistré! (problème PHP)</blink></strong></font>
	</p>
	</div>
	
    <td>
<?
if ($id=="") {$id="0";}
if (($_POST['rechercher']=="Rechercher") and ($_POST['recherche']!=""))
	{
	$query="SELECT compteur, titre, url, description, owner, mail, DATE_FORMAT(date_ins, '%d-%m-%Y') FROM 1two_annuaire_sites WHERE titre LIKE '%$recherche%' or description LIKE '%$recherche%' ORDER BY date_ins DESC , heure_ins DESC";
	$res_racine = @mysql_query($query,$db);
	if (@mysql_num_rows($res_racine)!=0)
		{
		$nbracine=mysql_num_rows($res_racine);
		for ($i=0; $i<$nbracine; $i++)
			{
			$list_racine=@mysql_fetch_row($res_racine);
			$sitenew=diff_date(date("d-m-Y"), $list_racine[6]);
			$query="SELECT site_id FROM 1two_annuaire_commentaires WHERE site_id='$list_racine[0]'";
			$res_commentaires = @mysql_query($query,$db);
			$nbr_commentaires=@mysql_num_rows($res_commentaires);
			echo "<table width='100%' class='cadrenews'><tr>";
			echo "<td class='texte'><a href='$list_racine[2]' target='_blank' class='lien1'>$list_racine[1]</a> - <span class='tips'>$list_racine[6]</span>"; if ($sitenew<=$list_preferences[1]) {echo " <img src='design/new-icon.gif'>";} echo "<br>$list_racine[3]<br>Commentaires ($nbr_commentaires) : <a href=\"javascript:commentaires('commentaires.php?id=$list_racine[0]')\" class='lien3'>Voir</a> - <a href=\"javascript:commentaires('commentaires.php?id=$list_racine[0]#rediger')\" class='lien3'>Rédiger</a></td>";
			echo "</tr></table><br>";
			}
		}
	else {echo "<span class='textebig'>Pas de sites trouvés.</span><br><br>";}
	}
if (($_GET['menu']=="") and ($_POST['rechercher']!="Rechercher"))
	{
	$idmenu=$id;
	echo "<a href='' class='lien2'>Accueil</a>";
	while ($idmenu!=0)
		{
		$query="SELECT * FROM 1two_annuaire_cat WHERE compteur='$idmenu'";
		$res_cat_temps = @mysql_query($query,$db);
		$list_cat_temps=@mysql_fetch_row($res_cat_temps);
		$tabmenu[]="<a href='?id=$list_cat_temps[3]' class='lien2'>$list_cat_temps[0]</a>";
		$idmenu=$list_cat_temps[2];
		}
	$nbrtabmenu=count ($tabmenu);
	for ($t=$nbrtabmenu-1; $t>=0; $t--)
		{
		echo "<span class='texte'> - $tabmenu[$t]</span>";
		}
	echo "<br><br>";
	$query="SELECT * FROM 1two_annuaire_cat WHERE inside='$id' ORDER BY nom ASC";
	$res_cat_racine = @mysql_query($query,$db);
	if (@mysql_num_rows($res_cat_racine)!=0)
		{
		echo "<table width='100%'>";
		$nbcatracine=mysql_num_rows($res_cat_racine);
		for ($i=0; $i<$nbcatracine; $i++)
			{
			if ($list_preferences[5]!=1) {if ($i % $list_preferences[5] == 0) { echo "<tr>"; }} else {echo "<tr>";}
			$list_cat_racine=@mysql_fetch_row($res_cat_racine);
			$query="SELECT * FROM 1two_annuaire_cat WHERE inside='$list_cat_racine[3]' ORDER BY nom ASC LIMIT $list_preferences[2]";
			$res_cat_souscat = @mysql_query($query,$db);
			$pourc=100 / $list_preferences[5];
			echo "<td valign='top' width='"; echo "$pourc"; echo "%' class='texte'><img src='design/dossier.png'> <a href='?id=$list_cat_racine[3]' class='lien1'><strong>$list_cat_racine[0]</strong></a> ";			$list_cat[]=$list_cat_racine[3];
			while (list($not,$id_cat) = each ($list_cat))
				{
				$query="SELECT compteur FROM 1two_annuaire_cat WHERE inside='$id_cat'"; $res_inside=@mysql_query($query,$db); $nbrinside=mysql_num_rows($res_inside);
				for ($h=0;$h<$nbrinside;$h++)
					{
					$list_inside=@mysql_fetch_row($res_inside); $list_cat[]=$list_inside[0];
					}
				}
			$query_nbrsites = "SELECT compteur FROM 1two_annuaire_sites WHERE ";
			$nbr_cat = sizeof($list_cat);
			for ($nbc=0;$nbc<$nbr_cat-1;$nbc++)
				{ $query_nbrsites .= "categorie = '$list_cat[$nbc]' or "; }
			$query_nbrsites .= "categorie = '$list_cat[$nbc]'";
			$res_nbrsites=@mysql_query($query_nbrsites,$db);
			$nbrsites=mysql_num_rows($res_nbrsites);
			$list_cat="";
			echo "($nbrsites)<br>";
			if (@mysql_num_rows($res_cat_souscat)!=0)
				{
				$nbsouscat=mysql_num_rows($res_cat_souscat);
				for ($j=0; $j<$nbsouscat; $j++)
					{
					$list_cat_souscat=@mysql_fetch_row($res_cat_souscat);
					echo "<a href='?id=$list_cat_souscat[3]' class='lien1'>$list_cat_souscat[0]</a> ";
					}
				echo "<br><br>";
				}
			echo "</td>";
			if ($list_preferences[5]!=1) {if ($i / ($list_preferences[5]-1) == 1) { echo "</tr>"; }} else {echo "</tr>";}
			}
		echo "</table><br>";
		}
	else { if ($id=="0") {echo "<span class='textebig'>Pas encore de catégories créées !</span><br><br>";}}
	$query="SELECT description FROM 1two_annuaire_cat WHERE compteur='$id'";
	$res_cat_description = @mysql_query($query,$db);
	if (@mysql_num_rows($res_cat_description)!=0)
		{
		$list_cat_description=@mysql_fetch_row($res_cat_description);
		echo "<br><br>$list_cat_description[0]";
		echo "<br><br>";
		}
	$query="SELECT compteur, titre, url, description, owner, mail, DATE_FORMAT(date_ins, '%d-%m-%Y') FROM 1two_annuaire_sites WHERE categorie='$id' AND valide=1 ORDER BY titre ASC";
	$res_racine = @mysql_query($query,$db);
	if (@mysql_num_rows($res_racine)!=0)
		{
		$nbracine=mysql_num_rows($res_racine);
		$nbpage=ceil($nbracine/$list_preferences[3]);
		if ($_GET['page']=="") {$page=1;}
		for ($i=0; $i<$nbracine; $i++)
			{
			$list_racine=@mysql_fetch_row($res_racine);
			if ( ($i>=$list_preferences[3]*$page-$list_preferences[3]) and ($i<$list_preferences[3]*$page) )
				{
				$sitenew=diff_date(date("d-m-Y"), $list_racine[6]);
				$query="SELECT site_id FROM 1two_annuaire_commentaires WHERE site_id='$list_racine[0]'";
				$res_commentaires = @mysql_query($query,$db);
				$nbr_commentaires=@mysql_num_rows($res_commentaires);
				echo "<table width='100%' class='cadrenews'><tr>";
				echo "<td class='texte'><a href='$list_racine[2]' target='_blank' class='lien1'>$list_racine[1]</a> - <span class='tips'>$list_racine[6]</span>"; if ($sitenew<=$list_preferences[1]) {echo " <img src='design/new-icon.gif'>";} echo "<br>$list_racine[3]<br>Commentaires ($nbr_commentaires) : <a href=\"javascript:commentaires('commentaires.php?id=$list_racine[0]')\" class='lien3'>Voir</a> - <a href=\"javascript:commentaires('commentaires.php?id=$list_racine[0]#rediger')\" class='lien3'>Rédiger</a></td>";
				echo "</tr></table><br>";
				}
			}
		echo "<div align='right' class='texte'>Page "; 
		for ($j=1; $j<=$nbpage; $j++) { echo " <a href='?id=$id&page=$j' class='lien1'>$j</a> "; }
		echo "</div>";
		}
	else { if ($id!="0") {echo "Pas encore de sites dans cette catégorie !";}}
	}
if ($_GET['menu']=="submitsite")
	{
	for ($j=0; $j<strlen($_POST['email']); $j++)
		{
		if ( substr($_POST['email'],$j,1)=="@" ) { $validmail1="ok"; }
		if ( substr($_POST['email'],$j,1)=="." ) { $validmail2="ok"; }
		}
	if (($_POST['SubmitSite']=="Valider") and ($validmail1=="ok") and ($validmail2=="ok") and ($_POST['owner']!="") and ($_POST['email']!="") and ($_POST['titresite']!="") and ($_POST['urlsite']!="") and ($_POST['urlsite']!="http://") and ($_POST['descriptionsite']!=""))
		{
		if ($list_preferences[4]=="0") {$autovalid=0;} else {$autovalid=1;}
		$query="INSERT INTO 1two_annuaire_sites (categorie, owner, mail, titre, url, description, date_ins, heure_ins, valide) VALUES ('$listecat', '$owner', '$email', '$titresite', '$urlsite', '$descriptionsite', NOW(), NOW(), '$autovalid')";
		$res_modif_site = @mysql_query($query,$db);
		if ($list_preferences[4]=="0") {
		echo "<br><span class='textebig'><img src='design/ls-valid.gif'> Le site $urlsite vient d'être proposé dans l'annuaire, il est en attente de validation.</span><br><br>"; }
		else {
		echo "<br><span class='textebig'><img src='design/ls-valid.gif'> Le site $urlsite vient d'être ajouté dans l'annuaire.</span><br><br>";}
		$owner=""; $email=""; $titresite=""; $urlsite=""; $descriptionsite="";
		mail("$list_preferences[8]","Site ajouté dans l'annuaire VKXAnnu.","Le site $titresite a été ajouté dans l'annuaire VKXAnnu.\nMerci pour votre ajout.\n\nLa Volk'Team.","From: $list_preferences[6] <$list_preferences[8]>\r\n");
		}
	else
		{
		if (($_POST['SubmitSite']=="Valider") and (($validmail1!="ok") or ($validmail2!="ok"))) {echo "<span class='texte'>Adresse email incorrecte.</span>";}
		}
	echo "<br><span class='textebig'>Proposer un site (tous les champs sont obligatoires)</span><br><br>";
	echo "<form name='formeditsite' method='post' action=''>";
	echo "<table width='100%' border='0' cellspacing='3' cellpadding='0' class='texte'><tr>";
	echo "<td width='30%' align='right' valign='top'></td><td>";
	echo "<select name='listecat'>";
	echo "<option value='0'>Choisissez une catégorie</option>";
	$query="SELECT * FROM 1two_annuaire_cat ORDER BY nom ASC";
	$res_compteur = @mysql_query($query,$db);
	if (@mysql_num_rows($res_compteur)!=0)
		{
		$nbcompteur=mysql_num_rows($res_compteur);
		for ($i=0; $i<$nbcompteur; $i++)
			{
			$list_compteur=@mysql_fetch_row($res_compteur);
			$query="SELECT * FROM 1two_annuaire_cat WHERE inside='$list_compteur[3]'";
			$res_bout = @mysql_query($query,$db);
			if (@mysql_num_rows($res_bout)==0)
				{
				$tabmenu=""; $ligne="";
				$idliste=$list_compteur[3];
				while ($idliste!=0)
					{
					$query="SELECT * FROM 1two_annuaire_cat WHERE compteur='$idliste'";
					$res_idliste = @mysql_query($query,$db);
					$list_idliste=@mysql_fetch_row($res_idliste);
					$tabmenu[]="$list_idliste[0]";
					$idliste=$list_idliste[2];
					}
				$nbrtabmenu=count ($tabmenu);
				for ($t=$nbrtabmenu-1; $t>=0; $t--)
					{
					if ($t==$nbrtabmenu-1) {$ligne=$ligne . "$tabmenu[$t]";}
					else {
					$ligne=$ligne . " > $tabmenu[$t]"; }
					if ($tabfinal=="") {$tabfinal[]="$ligne";}
					else { if (in_array($ligne,$tabfinal)!=1) {$tabfinal[]="$ligne";} }
					}
				}
			}
		$nbrtabfinal=count ($tabfinal);
		$tabfinal[]=rsort($tabfinal);
		for ($f=$nbrtabfinal-1; $f>=0; $f--)
			{
			$tablastword= explode(" > ",$tabfinal[$f]); 
			$lastword=$tablastword[count($tablastword)-1];
			$query="SELECT compteur FROM 1two_annuaire_cat WHERE nom='$lastword'";
			$res_compteur_last_word = @mysql_query($query,$db);
			$list_compteur_last_word=@mysql_fetch_row($res_compteur_last_word);
			echo "<option value='$list_compteur_last_word[0]' "; if ($id=="$list_compteur_last_word[0]") {echo "selected";} echo ">$tabfinal[$f]</option>";
			}
		}
		
		
		
		
		
		
	
	echo "</select>";
	echo "</td></tr><tr>";
	echo "<td width='30%' align='right' valign='top'>Votre nom : </td>";
	echo "<td><input name='owner' type='text' size='40' maxlength='20' value='$owner'></td>";
	echo "</tr><tr>";
	echo "<td align='right' valign='top'>Adresse email : </td>";
	echo "<td><input name='email' type='text' size='40' maxlength='100' value='$email'></td>";
	echo "</tr><tr>";
	echo "<td align='right' valign='top'>Titre du site : </td>";
	echo "<td><input name='titresite' type='text' size='40' maxlength='100' value='$titresite'></td>";
	echo "</tr><tr>";
	echo "<td align='right' valign='top'>Url du site : </td>";
	echo "<td><input name='urlsite' type='text' size='40' maxlength='200' value='"; if ($urlsite=="") {echo "http://";} else {echo $urlsite;} echo "'></td>";
	echo "</tr><tr>";
	echo "<td align='right' valign='top'>Description du site :<br>";
	echo "<span class='tips'>256 caract&egrave;res max</span></td>";
	echo "<td><textarea name='descriptionsite' cols='30' rows='8'>$descriptionsite</textarea></td>";
	echo "</tr><tr><td align='right'>&nbsp;</td>";
	echo "<td><input type='submit' name='SubmitSite' value='Valider'></td>";
	echo "</tr></table></form>";
	}
if ($menu=="newsites")
	{
	$query="SELECT compteur, titre, url, description, owner, mail, DATE_FORMAT(date_ins, '%d-%m-%Y') FROM 1two_annuaire_sites WHERE valide=1 ORDER BY date_ins DESC, heure_ins DESC LIMIT 100";
	$res_racine = @mysql_query($query,$db);
	if (@mysql_num_rows($res_racine)!=0)
		{
		$nbracine=mysql_num_rows($res_racine);
		$nbpage=ceil($nbracine/$list_preferences[3]);
		if ($_GET['page']=="") {$page=1;}
		for ($i=0; $i<$nbracine; $i++)
			{
			$list_racine=@mysql_fetch_row($res_racine);
			if ( ($i>=$list_preferences[3]*$page-$list_preferences[3]) and ($i<$list_preferences[3]*$page) )
				{
				$sitenew=diff_date(date("d-m-Y"), $list_racine[6]);
				$query="SELECT site_id FROM 1two_annuaire_commentaires WHERE site_id='$list_racine[0]'";
				$res_commentaires = @mysql_query($query,$db);
				$nbr_commentaires=@mysql_num_rows($res_commentaires);
				echo "<table width='100%' class='cadrenews'><tr>";
				echo "<td class='texte'><a href='$list_racine[2]' target='_blank' class='lien1'>$list_racine[1]</a> - <span class='tips'>$list_racine[6]</span>"; if ($sitenew<=$list_preferences[1]) {echo " <img src='design/new-icon.gif'>";} echo "<br>$list_racine[3]<br>Commentaires ($nbr_commentaires) : <a href=\"javascript:commentaires('commentaires.php?id=$list_racine[0]')\" class='lien3'>Voir</a> - <a href=\"javascript:commentaires('commentaires.php?id=$list_racine[0]#rediger')\" class='lien3'>Rédiger</a></td>";
				echo "</tr></table><br>";
				}
			}
		echo "<div align='right' class='texte'>Page "; 
		for ($j=1; $j<=$nbpage; $j++) { echo " <a href='?menu=newsites&page=$j' class='lien1'>$j</a> "; }
		echo "</div>";
		}
	}
?>
Merci.

par Aureusms » 29 sept. 2007, 14:51

Ah ok.

Normallement tu récupère tes valeurs dans une variable postée :
$variable = $_POST["texte"];
il te suffit de faire :
$variable = addslashes($_POST["texte"]);
[/php]

par Volkow » 28 sept. 2007, 23:40

Bah en fait le problème c'est que lorsque il y a un site qui s'ajoute et que dans la description[...] il y a des apostrophes, il n'est pas enregistré dans ma base de données.

Et je ne sais pas trop comment placer le addslashes()...


EDIT: pour l'équivalent en html, j'ai beau faire ce que je veux il n'enregistre pas les sites dans la base de données...dès qu'il y a une apostrophe, il ne fait rien...

EDIT 2: sérieux, ce ****** de formulaire ne veut toujours pas rentrer dans cette ****** de base de données!!

Je vais devenir fou!!

par Aureusms » 28 sept. 2007, 23:11

Tu peux aussi remplacer l'apostrophe par son équivalent HTML via str_replace :
$texte = str_replace("'","&apos;",$texte);

par sadeq » 28 sept. 2007, 22:01

Tu peux utiliser la fonction addslashes() pour marquer les apostrophes comme caractères normaux car PHP les concidère comme délimiteurs de texte comme les guillemets. Cette opération s'appelle l'échapement et conciste à placer un caractère d'échapement \ avant le caractère à échaper.
Par exemple: la chaîne 'L'apostrophe' devient 'L\'apostrophe' après application de addslashes()

La fonction addslashes() doit être appliquée à la réception des paramètres $_POST ou $_GET ou du moins avant d'enregistrer les données pouvant contenir les apostrophes dans la base de données.

N.B: La fonction stripslashes() fait l'inverse de addslashes() elle est utilisée souvent lors de l'affichage de chaînes pouvant contenir des caractères échapés pour ne pas afficher les \

Problème avec les apostrophes

par Volkow » 28 sept. 2007, 20:56

Bon, me revoilà!

Je fais désormais un annuaire en ligne (http://www.volkteam.powa.fr).

Malheureusement j'ai de nouveau un p'tit problème.

Je propose à mes visiteurs d'inscrire leur site via un formulaire qui dès qu'on clique sur "valider" va balancer les infos du site dans la base de données.

Après, moi, je dois valider les sites que l'on me propose.

Mais voilà, seul problème c'est que quand un visiteur veut inscrire un site et que dans son nom, dans le nom du site ou dans sa description il y a des apostrophes, et bien là ça l'envoi MAIS je ne vois pas le site apparaître dans ma console d'admin afin de le valider...

Si quelqu'un voit d'où vient le problème, je l'écoute.

Merci, Volkow.