Page 1 sur 1

Problème d'apostrophe sur une variable

Posté : 08 juil. 2015, 23:34
par yoann38
Salut à tous.
Je vous expose mon soucis,
J'envoie en bdd via une variable un champ description et un champ city.
Il se peut que les titre et les ville comportent des apostrophes du coup j'utilise addslashe mais ca ressort de la façon suivante:

TOURS ET REMPARTS D\'AIGUES-MORTES
du coup je me retrouve avec un \ , c'est moche ...

Mon code:
la partie ou on traite:
// Récupération des données en fonction du tagname du XML
    $titre = addslashes($item->name);
    $price = $item->price;
    $url_fnac = $item->deepLink;
	$date_debut_sortie = $item->validFrom;
    $date_fin_sortie = $item->validTo;
    $street = addslashes($item->terms);
    $photo = $item->largeImage;
    $genre = $item->merchantCategoryPath;
	
	
      // Code postal
      $postcode  = addslashes($item->extra2);
      $pieces = explode(" | ", $postcode);
la partie de l'insert
// Association de la description en fonction du type de sorties
	
		$assoc_concert = 'Votre concert avec '.$titre.', à '.$pieces[1].'. Un plaisir pour les oreilles,une sortie proposée par notre partenaire fnac, <a class="lien" href="'.$url_fnac.'">découvrez le descriptif complet.</a> ';
		

		if ($id_type_loisirs == 10) {
			$desc_genre = $assoc_concert; // Concert
		}
	
	// description
	$description = addslashes($desc_genre);
	
	$result = mysql_query("SELECT id_loisirs FROM loisirs WHERE titre = ".$titre.", city = ".$pieces[2].", postcode = ".$pieces[1].", date_debut_sortie = ".$dateDebut.", date_fin_sortie = ".$dateFin."");
	if(mysql_num_rows($result) == 1){
		
	//Entrée déjà existante
	echo 'Cette entrée existe déjà';
	
	}else{
		
	// Pseudo libre
	 $sql = "INSERT INTO `matable` (id_simply_user,titre,price,photo,url_fnac,date_debut_sortie,horaire_debut,date_fin_sortie,horaire_fin,description,street,postcode,city,id_region,id_departements,id_type_loisirs,valide) VALUES ('$id_simply_user','$titre','$price','$photo','$url_fnac','$date_debut_sortie', '$heureDebut', '$date_fin_sortie', '$heurefin', '$description','$street','$pieces[0]','$pieces[1]','$region','$departement','$id_type_loisirs','$valide')";
  $req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
  echo 'Insertion en bdd';
	}
// suite et fin du code ...
Merci à vous

Re: Problème d'apostrophe sur une variable

Posté : 08 juil. 2015, 23:47
par tof73
http://php.net/manual/fr/function.stripslashes.php lors de l'affichage des données issues de la bdd

Re: Problème d'apostrophe sur une variable

Posté : 09 juil. 2015, 13:59
par Ryle
Bonjour,

La solution de tof te permet de résoudre le problème d'affichage, mais à mon sens ta valeur ne base de données ne devrait pas contenir de "\". Le problème est à résoudre lors de l'enregistrement de ta variable en base. En effet, si à l'affichage de ton champ tu obtiens "REMPARTS D\'AIGUES-MORTES", c'est probablement que cette valeur est également présente telle quel dans ta base de données (tu peux le vérifier facilement).

Si tu utilises une version de php antérieure à la 5.4, il ne faut faire appel à addslashes que si le serveur ne protège pas déjà lui même les valeurs reçues (directive magic quotes). Sinon tu ajoutes les antislashes à une variable qui est déjà "protégée" et au moment de l'insertion en base tu envois en réalité " REMPARTS D\\\'AIGUES-MORTES ".
Dans ce cas, tu peux utiliser get_magic_quotes_gpc() pour savoir si ce paramètre est actif ou non sur le serveur.

Si tu es sur une version supérieur ou égale à la 5.4, c'est probablement que tu protèges deux fois ta variables, il suffit alors de trouver où est le addslash en trop et de l'enlever :)