addslashes() ou stripslashes()

Eléphant du PHP | 257 Messages

07 avr. 2006, 11:50

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:

Avatar du membre
ViPHP
ViPHP | 3008 Messages

07 avr. 2006, 11:52


Eléphant du PHP | 257 Messages

07 avr. 2006, 12:00

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:

Avatar du membre
ViPHP
ViPHP | 3008 Messages

07 avr. 2006, 12:06

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

Invité
Invité n'ayant pas de compte PHPfrance

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

Eléphant du PHP | 257 Messages

07 avr. 2006, 12:08

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

Eléphant du PHP | 257 Messages

07 avr. 2006, 12:24

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

Invité
Invité n'ayant pas de compte PHPfrance

07 avr. 2006, 12:27

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

$nom=addslashes($nom);

Eléphant du PHP | 257 Messages

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:

Eléphant du PHP | 257 Messages

07 avr. 2006, 13:18

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

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

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

Eléphant du PHP | 257 Messages

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:

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

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 ?

Eléphant du PHP | 257 Messages

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']       : ""; 
????

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

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...");