Page 1 sur 2

addslashes() ou stripslashes()

Posté : 07 avr. 2006, 11:50
par alexdarcy
Bonjour a tous j'ai un chti probleme (pour ne po changer lol) cette fois avec les apostrophes ...

mais où dois je mettre ces fonctions :
$res = addslashes("L'a");
$res = stripslashes("L\'a");
???

:oops:

Posté : 07 avr. 2006, 11:52
par charabia

Posté : 07 avr. 2006, 12:00
par alexdarcy
oui mais je ne sais po dans quel script l'insérer ... :oops:

dans celui çi ? :
<?php 
// on se connecte à MySQL 
$db = mysql_connect('localhost', 'agence', 'xxxxx'); 

// on sélectionne la base 
mysql_select_db('agences',$db); 

// on crée la requête SQL 
$id = isset($_GET['ID']) ? $_GET['ID'] : 1; 
$sql = 'SELECT ID,titre 
    FROM agences_tbl'; 
// on envoie la requête 
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 
// on fait une boucle qui va faire un tour pour chaque enregistrement 
while($data = mysql_fetch_assoc($req)) 
{ 
  ?>  <TR> 
      <TD class=row1>&nbsp; 
           <a href="agences.php?ID=<?php echo $data['ID']?>"><?php echo $data['titre']?></a> 
       </TD> 
    </TR> <?
} 
// on ferme la connexion à mysql 
mysql_close(); 
?>
:cry:

Posté : 07 avr. 2006, 12:06
par charabia
Tu l'appliques tout simplement sur le résultat, un de test $date[...]

Posté : 07 avr. 2006, 12:06
par Invité
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

Posté : 07 avr. 2006, 12:08
par alexdarcy
Tu l'appliques tout simplement sur le résultat, un de test $date[...]
je comprends po charabia ... :cry:

Posté : 07 avr. 2006, 12:24
par alexdarcy
comme cela ? :
$nom       = addslashes(isset($_POST['nom']))       ? $_POST['nom']       : "";
:cry:

Posté : 07 avr. 2006, 12:27
par Invité
$nom =isset($_POST['nom'])) ...

$nom=addslashes($nom);

Posté : 07 avr. 2006, 12:42
par alexdarcy
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:

Posté : 07 avr. 2006, 13:18
par alexdarcy
personne ne me réponds ? :oops: :cry:

Posté : 07 avr. 2006, 13:52
par ouckileou
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

Posté : 07 avr. 2006, 13:59
par alexdarcy
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:

Posté : 07 avr. 2006, 14:05
par ouckileou
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 ?

Posté : 07 avr. 2006, 14:13
par alexdarcy
merci ouckileou mais franchement il me faut un exemple concret, aussi par exemple est-ce comme ça ? :
$nom       = (isset($_POST addSlashes['nom']))       ? $_POST['nom']       : ""; 
????

Posté : 07 avr. 2006, 14:17
par ouckileou
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...");