addslashes() ou stripslashes()

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 : addslashes() ou stripslashes()

par alexdarcy » 07 avr. 2006, 15:02

oui j'ai bien regardé la faq ... :wink:
Bon alors maintenant l'apostrophe a bien été pris en compte ouf

Merci ouckileou pour tes conseils et ton exemple.
:lol: :lol:
Je mets résolu.

:wink:

par ouckileou » 07 avr. 2006, 14:39

eh bien avec mes toutes petites petites connaissances et ma toute petite technique cette phrase envoie les données à la table
Non pas du tout

Je parle bien de ce code là hein :
$nom = (isset($_POST['nom']))       ? $_POST['nom']       : ""; 
Qui veut dire :

SI $_POST['nom'] existe
on met $_POST['nom'] dans $nom
SINON
on met vide "" dans $nom

Tu as regardé le lien vers la FAQ que je t'ai donné ?

Sinon pour le reste du code ça devrait convenir, il suffit que ce soit fait avant la requête

par alexdarcy » 07 avr. 2006, 14:33

eh bien avec mes toutes petites petites connaissances et ma toute petite technique cette phrase envoie les données à la table :oops:

ainsi c'est comme ça :
<?php 
// On commence par récupérer les champs 
$nom       = (isset($_POST['nom']))       ? $_POST['nom']       : ""; 
$nom = addSlashes($nom);
$titre     = (isset($_POST['titre']))     ? $_POST['titre']     : ""; 
$itre = addSlashes($itre);
$adresse   = (isset($_POST['adresse']))   ? $_POST['adresse']   : ""; 
$telephone = (isset($_POST['telephone'])) ? $_POST['telephone'] : ""; 
$fax       = (isset($_POST['fax']))       ? $_POST['fax']       : ""; 
$mail      = (isset($_POST['mail']))      ? $_POST['mail']      : ""; 
$agent1    = (isset($_POST['agent1']))    ? $_POST['agent1']    : ""; 
$mail1     = (isset($_POST['mail1']))     ? $_POST['mail1']     : ""; 
$agent2    = (isset($_POST['agent2']))    ? $_POST['agent2']    : ""; 
$mail2     = (isset($_POST['mail2']))     ? $_POST['mail2']     : ""; 
$agent3    = (isset($_POST['agent3']))    ? $_POST['agent3']    : ""; 
$mail3     = (isset($_POST['mail3']))     ? $_POST['mail3']     : ""; 
$img       = (isset($_POST['img']))       ? $_POST['img']       : ""; 

{ 
$dest_dossier = '/var/www/xxxxxxx/agences/upload/'; 
// utilisez également des slashes sous windows : $dest_dossier  = '/upload/'; 

       // connexion à la base 
$db = mysql_connect('localhost', 'agence', 'xxxx')  or die('Erreur de connexion '.mysql_error()); 
// sélection de la base   
mysql_select_db('agences',$db)  or die('Erreur de selection '.mysql_error()); 
      
    // on écrit la requête sql dans agences_tbl 
    $sql = "INSERT INTO agences_tbl(ID, nom, titre, adresse, telephone,fax, mail, agent1, mail1, agent2, mail2, agent3, mail3) 
VALUES('','$nom','$titre','$adresse','$telephone','$fax','$mail','$agent1','$mail1','$agent2','$mail2','$agent3','$mail3')"; 
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 

   // on récupère l'ID qui vient d'être généré 
    $ID = mysql_insert_ID();    
$nomDuFichier = basename($_FILES['img']['name']); // Le nom du fichier d'origine 
$extension = substr($nomDuFichier, strrpos($nomDuFichier, ".")); // tant qu'on y est, on récupère l'extension du fichier (tout ce qui suit le dernier point) 
// on compose le nouveau nom du fichier avec $ID récupéré avec mysql_get_id(), l'extension du fichier initiale, et 
éventuellement un bout de nom choisit (ex: "logo_agence_") : 
$dest_fichier = "logo_agence_" . $ID .  $extension; 

// reste plus qu'à déplacer le fichier comme avant, avec son nouveau nom 
move_uploaded_file($_FILES['img']['tmp_name'], $dest_dossier . $dest_fichier); 

    // on écrit la requête sql dans logo 
$sql = "INSERT INTO logo(ID) VALUES('$ID')"; 
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 

// on affiche le résultat pour le visiteur 
    echo '<a href="http://www.xxxx.com/agences/ad_agents.htm">Vos infos on été ajoutées.</a>'; 

mysql_close();  // on ferme la connexion 
    }   
?> 

par ouckileou » 07 avr. 2006, 14:17

Est-ce que tu comprends le fonctionnement de cette ligne ?
$nom       = (isset($_POST['nom']))       ? $_POST['nom']       : ""; 
Je me permet de demander en voyant ta proposition précédente :roll:
Si tu veux des explications regarde dans la FAQ : (expr1) ? expr2 : expr3 => opérateur ternaire

Exemple concret :
// si la variable $_POST['nom'] existe on la met dans $nom sinon on met du vide
$nom       = (isset($_POST['nom']))       ? $_POST['nom']       : ""; 
// on passe $nom dans la fonction pour échapper les caractères pouvant poser problèmes
$nom = addSlashes($nom);
// on fait l'insertion
mysql_query("INSERT...");

par alexdarcy » 07 avr. 2006, 14:13

merci ouckileou mais franchement il me faut un exemple concret, aussi par exemple est-ce comme ça ? :
$nom       = (isset($_POST addSlashes['nom']))       ? $_POST['nom']       : ""; 
????

par ouckileou » 07 avr. 2006, 14:05

le addSlashes tu l'insères entre la récupèration de la variable avec $_POST et ta requête INSERT

le stripSlashes tu l'insères entre un SELECT et le echo pour afficher

Question : est-ce que tu as compris à quoi servaient ces fonctions ?

par alexdarcy » 07 avr. 2006, 13:59

Voici le script add.php et je ne sais vraiment po où insérer :
<?php 
// On commence par récupérer les champs 
$nom       = (isset($_POST['nom']))       ? $_POST['nom']       : ""; 
$titre     = (isset($_POST['titre']))     ? $_POST['titre']     : ""; 
$adresse   = (isset($_POST['adresse']))   ? $_POST['adresse']   : ""; 
$telephone = (isset($_POST['telephone'])) ? $_POST['telephone'] : ""; 
$fax       = (isset($_POST['fax']))       ? $_POST['fax']       : ""; 
$mail      = (isset($_POST['mail']))      ? $_POST['mail']      : ""; 
$agent1    = (isset($_POST['agent1']))    ? $_POST['agent1']    : ""; 
$mail1     = (isset($_POST['mail1']))     ? $_POST['mail1']     : ""; 
$agent2    = (isset($_POST['agent2']))    ? $_POST['agent2']    : ""; 
$mail2     = (isset($_POST['mail2']))     ? $_POST['mail2']     : ""; 
$agent3    = (isset($_POST['agent3']))    ? $_POST['agent3']    : ""; 
$mail3     = (isset($_POST['mail3']))     ? $_POST['mail3']     : ""; 
$img       = (isset($_POST['img']))       ? $_POST['img']       : ""; 

 { 
$dest_dossier = '/var/www/xxxxxxx/agences/upload/';
// utilisez également des slashes sous windows : $dest_dossier  = '/upload/';

       // connexion à la base
$db = mysql_connect('localhost', 'agence', 'xxxx')  or die('Erreur de connexion '.mysql_error());
// sélection de la base  
mysql_select_db('agences',$db)  or die('Erreur de selection '.mysql_error()); 
     
    // on écrit la requête sql dans agences_tbl
    $sql = "INSERT INTO agences_tbl(ID, nom, titre, adresse, telephone,fax, mail, agent1, mail1, agent2, mail2, agent3, mail3) 
VALUES('','$nom','$titre','$adresse','$telephone','$fax','$mail','$agent1','$mail1','$agent2','$mail2','$agent3','$mail3')";
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());

   // on récupère l'ID qui vient d'être généré 
    $ID = mysql_insert_ID();   
$nomDuFichier = basename($_FILES['img']['name']); // Le nom du fichier d'origine 
$extension = substr($nomDuFichier, strrpos($nomDuFichier, ".")); // tant qu'on y est, on récupère l'extension du fichier (tout ce qui suit le dernier point)
// on compose le nouveau nom du fichier avec $ID récupéré avec mysql_get_id(), l'extension du fichier initiale, et 
éventuellement un bout de nom choisit (ex: "logo_agence_") : 
$dest_fichier = "logo_agence_" . $ID .  $extension; 

// reste plus qu'à déplacer le fichier comme avant, avec son nouveau nom 
move_uploaded_file($_FILES['img']['tmp_name'], $dest_dossier . $dest_fichier); 

    // on écrit la requête sql dans logo
$sql = "INSERT INTO logo(ID) VALUES('$ID')";
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());

// on affiche le résultat pour le visiteur 
    echo '<a href="http://www.xxxx.com/agences/ad_agents.htm">Vos infos on été ajoutées.</a>';

mysql_close();  // on ferme la connexion 
    }  
?> 
:cry:

par ouckileou » 07 avr. 2006, 13:52

Tu demandes précisément où le mettre, mais nous on ne peut pas te dire on ne sait pas ce que ton script fait !!

Ils t'ont déjà expliqué mais bon j'en rajoute une couche :

addSlashes => ajoute un anti-slash devant chaque caractère de la chaîne qui pourrait poser problème (ex : ' ou ")
stripSlashes => enlève ces anti-slashes

Donc habituellement ces fonctions sont utilisées pour des chaînes qui doivent être stockées en bases de données:

AVANT l'insertion, on passe la $variable dans addSlashes
AVANT l'affichage on passe la $variable dans stripSlashes

Exemple : tu récupères une citation, et tu veux l'enregistrer
// citation récupérée dans $citation :
// D'habitude, je me lève à 8h mais là j'étais "à la bourre grave"

// on récupère du formulaire
$citation_brute = $_POST['citation_formulaire'];
// on neutralise donc les caractères qui pourraient poser problème lors de l'exécution de la requête, l'apostrophe et les guillemets
$citation_traitee = addSlashes($citation_brute);

// exécution de la requête
$req_insert = "INSERT INTO citations (txt_citation) VALUES ('".$citation_traitee."')";
mysql_query($req_insert);

// récupération de la citation en BDD
$req_select = "SELECT txt_citation FROM citations LIMIT 0,1";
$exec = mysql_query($req_select);
$resultat = mysql_fetch_array($exec, MYSQL_ASSOC);
$citation_brute = $resultat['txt_citation'];

// on enlève les \ qui ont été ajoutés avant l'insertion
$citation_affichage = $stripSlashes($citation_brute);

// on affiche
echo $citation_affichage;
Voilà donc c'est simple, il suffit de passer tes variables à protéger dans la fonction avant insertion/affichage

par alexdarcy » 07 avr. 2006, 13:18

personne ne me réponds ? :oops: :cry:

par alexdarcy » 07 avr. 2006, 12:42

ou ça ?
// On commence par récupérer les champs 
$nom       = (isset($_POST['nom']))       ? $_POST['nom']       : ""; 
$titre     = (isset($_POST['titre']))     ? $_POST['titre']     : ""; 
$adresse   = (isset($_POST['adresse']))   ? $_POST['adresse']   : ""; 
$telephone = (isset($_POST['telephone'])) ? $_POST['telephone'] : ""; 
$fax       = (isset($_POST['fax']))       ? $_POST['fax']       : ""; 
$mail      = (isset($_POST['mail']))      ? $_POST['mail']      : ""; 
$agent1    = (isset($_POST['agent1']))    ? $_POST['agent1']    : ""; 
$mail1     = (isset($_POST['mail1']))     ? $_POST['mail1']     : ""; 
$agent2    = (isset($_POST['agent2']))    ? $_POST['agent2']    : ""; 
$mail2     = (isset($_POST['mail2']))     ? $_POST['mail2']     : ""; 
$agent3    = (isset($_POST['agent3']))    ? $_POST['agent3']    : ""; 
$mail3     = (isset($_POST['mail3']))     ? $_POST['mail3']     : ""; 
$img       = (isset($_POST['img']))       ? $_POST['img']       : ""; 
?? :oops:

par Invité » 07 avr. 2006, 12:27

$nom =isset($_POST['nom'])) ...

$nom=addslashes($nom);

par alexdarcy » 07 avr. 2006, 12:24

comme cela ? :
$nom       = addslashes(isset($_POST['nom']))       ? $_POST['nom']       : "";
:cry:

par alexdarcy » 07 avr. 2006, 12:08

Tu l'appliques tout simplement sur le résultat, un de test $date[...]
je comprends po charabia ... :cry:

par Invité » 07 avr. 2006, 12:06

le addslaches c'est juste avant de mettre dans ta base de données, et pour le stripslaches c'est quand tu vas afficher :D

par charabia » 07 avr. 2006, 12:06

Tu l'appliques tout simplement sur le résultat, un de test $date[...]