Formation Google AnalyticsSavez-vous bien utiliser les outils de mesure d'audience ?
Effectuez-vous un calcul de ROI (Retour sur investissement) pour savoir comment améliorer vos campagnes emarketing ?
Savez-vous utiliser les bons outils pour booster votre taux de transformation ?
La formation Web Analytics de Ranking Metrics, présentée par un expert reconnu officiellement par Google Analytics, vous apportera les réponses à toutes vos questions !
===> Informations et inscriptions.

Enregistrement en bd et mysql_real_escape_string()

Poster un nouveau sujet Imprimer cette discussion    Forum -> Développement d'un site Web   Les dernières discussions de ce forum sont disponibles au format RSS
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
 
tryan
WRInaute accro
WRInaute accro

Inscrit le: 20 Fév 2005
Messages: 1239
Localisation: Planete terre

URL permanente de ce messagePosté le : Ven Sep 12, 2008 13:13    Sujet du message: Enregistrement en bd et mysql_real_escape_string()

Bonjour,

J'ai un doute sur la façon d'enregistrer en bd les données de plusieurs champs ...

Suite au formulaire je fais un :
Code:

$lechamp12 = mysql_real_escape_string($_POST["ville"]);

Puis j'enregistre les données en bd. Donc les quotes sont échappées par un slash.(ex:L'estacade devient L\'estacade)

Pour l'affichage, dans la boucle while,je fais un:
Code:
   
$la_ville = stripcslashes(htmlspecialchars($localisation['ville']));

Tout s'affiche correctement. Sa me vire tout les slash et convertit les balises HTML.

Par contre, si le nom de la ville enregistré contient un apostrophe ( ' ) (ex:L'estacade)
et que je fais un lien du style:
Code:

<a href="'.$la_ville.'.php">'.$la_ville.'</a>

et que je récupère sur la page suivante par $_GET:
Code:

$la_ville=stripcslashes(htmlspecialchars($_GET["vil"]));

pour ensuite utiliser "$la_ville" comme variable pour une recherche dans ma bd, sa ne fonctionne pas, rien ne s'affiche ... WHY ?
Merci
 
tryan Visiter le site web du posteur
SuperCureuil
WRInaute passionné
WRInaute passionné

Inscrit le: 09 Mar 2007
Messages: 661
Localisation: Bxl, Belgique

URL permanente de ce messagePosté le : Ven Sep 12, 2008 13:41    Sujet du message: Enregistrement en bd et mysql_real_escape_string()

Salut,

Citation:
<a href="'.$la_ville.'.php">'.$la_ville.'</a>


Y'a aucune variable GET là-dedans, donc pas étonnant que tu ne la récupères pas par la suite Wink

Code:
<a href="'.$la_ville.'.php?vil='.$la_ville.'">'.$la_ville.'</a>


@+
 
SuperCureuil
jvgamers
WRInaute discret
WRInaute discret

Inscrit le: 13 Juil 2004
Messages: 74

URL permanente de ce messagePosté le : Ven Sep 12, 2008 13:44    Sujet du message: Enregistrement en bd et mysql_real_escape_string()

Ouhla... Smile

Alors, petites choses en bataille:
Code:
$lechamp12 = mysql_real_escape_string($_POST["ville"]);

Il est important pour éviter une erreur de type notice de tester l'existence de la variable auparavant, de cette manière:
Code:
$lechamp12 = isset($_POST["ville"]) ? mysql_real_escape_string($_POST["ville"]) : '';


Alors, ensuite, pas besoin de faire un stripslashes pour supprimer les backslash sur le résultat de la base de données car justement, le fait d'avoir utilisé mysql_real_escape_string permet juste d'éviter les SQL injection et n'ajoute PAS de backslash dans la base de données.

Ensuite, quand tu fais un lien $laville.php, cela modifie le nom du fichier mais ne passe rien en paramètre, normal donc de ne rien récupérer.

Il faut faire un lien du type: fichier.php?ville=$laville
 
jvgamers
SuperCureuil
WRInaute passionné
WRInaute passionné

Inscrit le: 09 Mar 2007
Messages: 661
Localisation: Bxl, Belgique

URL permanente de ce messagePosté le : Ven Sep 12, 2008 13:47    Sujet du message: Enregistrement en bd et mysql_real_escape_string()

Citation:
Alors, ensuite, pas besoin de faire un stripslashes pour supprimer les backslash sur le résultat de la base de données car justement, le fait d'avoir utilisé mysql_real_escape_string permet juste d'éviter les SQL injection et n'ajoute PAS de backslash dans la base de données.


M'semblait bien Wink
 
SuperCureuil
tryan
WRInaute accro
WRInaute accro

Inscrit le: 20 Fév 2005
Messages: 1239
Localisation: Planete terre

URL permanente de ce messagePosté le : Ven Sep 12, 2008 14:20    Sujet du message: Enregistrement en bd et mysql_real_escape_string()

SuperCureuil autant pour moi sur le lien, c'est parce qu'il est rewrité ^^.
Citation:
...mysql_real_escape_string permet juste d'éviter les SQL injection et n'ajoute PAS de backslash dans la base de données


Je viens de refaire le teste et chaque entré comportant un apostrophe, un backslash est insérer automatiquement dans ma bd ... d'où l'utilisation de stripcslashes .
Du coup moi pas comprendre ?

Edit: Il n'y aurai pas une histoire de magic quote activé sur mon hébergeur qui ferait que sa merde comme sa ?
 
tryan Visiter le site web du posteur
tryan
WRInaute accro
WRInaute accro

Inscrit le: 20 Fév 2005
Messages: 1239
Localisation: Planete terre

URL permanente de ce messagePosté le : Ven Sep 12, 2008 17:51    Sujet du message: Enregistrement en bd et mysql_real_escape_string()

Pas de réponses ...ou une suggestion qui pourrait m'avancer?
 
tryan Visiter le site web du posteur
Bool
WRInaute accro
WRInaute accro

Inscrit le: 26 Fév 2004
Messages: 1168
Localisation: Lyon

URL permanente de ce messagePosté le : Ven Sep 12, 2008 18:01    Sujet du message: Enregistrement en bd et mysql_real_escape_string()

Oui les magic_quotes_gpc ont tendance à pourrir toutes les données en entrée.

La plupart des "frameworks" ou applications qui cherchent de la portabilité commencent par désactiver cette saloperie Very Happy

Grosso modo je fais ainsi :
Code:
if( ini_get('magic_quotes_gpc') ){
   xxx_gpcStripWalk($_GET);
   xxx_gpcStripWalk($_POST);
   xxx_gpcStripWalk($_COOKIE);
   xxx_gpcStripWalk($_REQUEST);
}
function xxx_gpcStripWalk( & $array )
{
   foreach ( $array as $key => $item ) {
      $newKey = stripslashes($key);
      if ( $newKey !== $key ) {
         unset( $array[ $key ] );
         $array[ $newkey ] = $item;
      }

      if ( is_array($item) === true ) {
         xxx_gpcStripWalk($array[ $newKey ]);
      } else {
         $array[ $newKey ] = stripslashes($item);
      }
   }
}


edit: d'ailleurs en passant, l'utilisation de PDO avec les pseudos requêtes préparées est bien sympathique pour éviter d'oublier les mysql_real_escape_string().
A moins évidement d'utiliser une classe/bibliothèque maison qui s'en charge.
 
Bool Visiter le site web du posteur
tryan
WRInaute accro
WRInaute accro

Inscrit le: 20 Fév 2005
Messages: 1239
Localisation: Planete terre

URL permanente de ce messagePosté le : Ven Sep 12, 2008 19:24    Sujet du message: Enregistrement en bd et mysql_real_escape_string()

Whaouuuuuuuuuuuuuuuuuuuuuu,merci Bool mais j'ai rien comprit Shocked et j'ai vraiment pas le niveau requis pour l'utilisation de ton code ... tu as un décodeur stp ^^.

Il y a un truc que je ne comprend vraiment pas... il est dit quasi partout d'utiliser mysql_real_escape_string() avant l'insertion de données en bd pour ce protéger des injections
Hors si magic quotes est activé (ce qui est mon cas) et qu'on ne peut le désactiver(ce qui est encore mon cas -1&1), celui ci ajoute des backslash.

A la finale je fais comment moi pour insérer correctement mes données tout en les protègent?

En gros:
-Formulaire
-$lechamp12 = $_POST["ville"]; (<-je fais quoi ici ?)
-Vérification du formulaire
-Enregistrement en bd

Merci
 
tryan Visiter le site web du posteur
Bool
WRInaute accro
WRInaute accro

Inscrit le: 26 Fév 2004
Messages: 1168
Localisation: Lyon

URL permanente de ce messagePosté le : Ven Sep 12, 2008 19:31    Sujet du message: Enregistrement en bd et mysql_real_escape_string()

erf... désolé.

Citation:
Il y a un truc que je ne comprend vraiment pas... il est dit quasi partout d'utiliser mysql_real_escape_string() avant l'insertion de données en bd pour ce protéger des injections

J'aurais tendance à le conseiller aussi, même si c'est parfois un peu "trop".

Citation:
Hors si magic quotes est activé (ce qui est mon cas) et qu'on ne peut le désactiver(ce qui est encore mon cas -1&1), celui ci ajoute des backslash.


"Mon" code intervient justement dans ce genre de cas : exécuté au début de chaque script il annule l'effet de magic_quotes_gpc.
 
Bool Visiter le site web du posteur
tryan
WRInaute accro
WRInaute accro

Inscrit le: 20 Fév 2005
Messages: 1239
Localisation: Planete terre

URL permanente de ce messagePosté le : Ven Sep 12, 2008 19:40    Sujet du message: Enregistrement en bd et mysql_real_escape_string()

En gros, je fais un copier/coller de ton code dans la (plutôt les) page(s) contenant le formulaire et c'est tout ?
 
tryan Visiter le site web du posteur
seebz
WRInaute impliqué
WRInaute impliqué

Inscrit le: 15 Avr 2007
Messages: 386

URL permanente de ce messagePosté le : Ven Sep 12, 2008 19:43    Sujet du message: Enregistrement en bd et mysql_real_escape_string()

dans ton cas mysql_escape_string(stripslashes($_POST['data'])) résoud le problème (comme l'a suggéré Bool)
 
seebz Visiter le site web du posteur
Bool
WRInaute accro
WRInaute accro

Inscrit le: 26 Fév 2004
Messages: 1168
Localisation: Lyon

URL permanente de ce messagePosté le : Ven Sep 12, 2008 19:49    Sujet du message: Enregistrement en bd et mysql_real_escape_string()

Yep tryam. "Idéallement", si tu as un script qui contient toutes les fonctions que tu utilises le plus souvent, autant l'y mettre directement.
 
Bool Visiter le site web du posteur
 
Montrer les messages depuis:   
Revenir en haut    Forum -> Développement d'un site Web Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1 - 
Connexion
Nom d'utilisateur:    Mot de passe:      Se connecter automatiquement à chaque visite    

A lire dans l'actualité sur WRI :

CLIQUEZ ICI pour vous inscrire à WebRankInfo (forum, annuaire, outils...)

Connexion

© 2001-2005 phpBB Group, support français
Personnalisation : WebRankInfo ™


 ODP  Firefox  Alsacreations  annuaire webmaster Yagoort