Problème d'apostrophe sur une variable

Mammouth du PHP | 643 Messages

08 juil. 2015, 23:34

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

Mammouth du PHP | 688 Messages

08 juil. 2015, 23:47

http://php.net/manual/fr/function.stripslashes.php lors de l'affichage des données issues de la bdd

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

09 juil. 2015, 13:59

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 :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...