Encodage caractères

ViPHP
xTG
ViPHP | 7331 Messages

23 sept. 2014, 20:09

Quel driver utilises-tu ?
- mysql_query ? => Mysql => mysql_real_escape_string qu'il te faut utiliser pour protéger les variables
- mysqli_query ? => Mysqli => mysqli_real_escape_string
- query ? => PDO à priori => PDO::quote
- exec / execute ? => PDO => les paramètres sont déjà protégés si tu les passes dans exec ou execute (mais pas si tu les mets directement dans la requête par contre !)
J'ai regardé "addslashes", sans comprendre si j'étais ou pas dans le champ possible d'application.[/quote
Surtout pas, addslashes n'est pas fait pour contrer les injections SQL, seulement échapper certains caractères.
un bout de code qui recherchait les quote dans les chaines de variables et leur en ajoutait une seconde
Bricolage encore pire que d'utiliser addslashes...
Certains me parlent de me protéger des injections SQL, d'autres de faire les injections ... qui croire ?
Quand tu insères une variable dans une requête SQL on parle d'injection.
Cependant il peut y avoir des injections non contrôlées, les fonctions de protection sont là pour éviter cela.
Si tu injectes par exemple le mot de passe dans une requête pour un formulaire de connexion sans le protéger et que l'utilisateur rentre : ' OR 1=1
Dans ce cas il y a une injection non contrôlée qui permet de se connecter sans connaître le mot de passe.

Exemple de protection contre l'injection avec le driver Mysqli :
<?php
$maVariable = mysqli_real_escape_string($maVariable);
$sql = 'SELECT * FROM maTable WHERE maVariable = ' . $maVariable;
$res = mysqli_query($sql);

jack in the box
Invité n'ayant pas de compte PHPfrance

23 sept. 2014, 21:57

Bonsoir,
merci pour ces réponses, même si je pige pas toutes les questions... lol
Pour les drivers, je sais pas... Ils sont où ? quelque part sur mon disque ? faut les télécharger ? ils sont sur la base ? chez l'hébergeur ? ......
Pour le code, en voilà un bout (enfin, celui qui récupère les variables pour les mettre dans la base) :

Code : Tout sélectionner

... <?php header('Content-Type: text/html; charset=UTF-8'); include("connexion.php") ; // if ($_POST['num']!='') { connexion() ; //récupération des valeurs des champs: //num: $num = $_POST["num"] ; //nom: $nom = $_POST["nom"] ; //prenom: $prenom = $_POST["prenom"] ; //offres jardin et nature $o_jar = $_POST["o_jar"] ; //offres aide domestique $o_dom = $_POST["o_dom"] ; //offres garde et baby-sitting $o_gar = $_POST["o_gar"] ; //offres Cours et conseils $o_cou = $_POST["o_cou"] ; //offres activitó diverses $o_act = $_POST["o_act"] ; //offres services $o_ser = $_POST["o_ser"] ; //offres travaux et bricolage $o_tra = $_POST["o_tra"] ; //offres brocante $o_bro = $_POST["o_bro"] ; //création de la requète SQL: $sql = "INSERT INTO offres ( num, nom, prenom, o_jar, o_dom, o_gar, o_cou, o_act, o_ser, o_tra, o_bro) VALUES ( '$num', '$nom', '$prenom', '$o_jar', '$o_dom', '$o_gar', '$o_cou', '$o_act', '$o_ser', '$o_tra', '$o_bro') " ; //exécution de la requète SQL: $requete = mysql_query($sql) or die( mysql_error() ) ; } ...

jack in the box
Invité n'ayant pas de compte PHPfrance

23 sept. 2014, 22:05

Et le code qui retourne certaines valeurs de la table à l'affichage :
(mais celui-là ne fait pas de problème, même si je ne comprends pas par quel miracle il me retourne bien des éé àà èè, alors que sous (sur?) PHPMyAdmin la table n'affiche que des À© À©À©, mais bon, ça fonctionne...)
...
<?php
	echo '<h2>'."Offres Jardin et Nature".'</h2>'.'<br>';

$bdd = new PDO('mysql:host=#######;dbname=#######','#######','#######');
$require = $bdd->query('SELECT num, nom, prenom, o_jar from offres WHERE o_jar!="" ORDER BY num DESC');

while ($data = $require->fetch()){
	echo "n&deg d'adh&eacuterent : ".'<b><big>'.$data[num].'</big></b>'." / ".$data[nom]." ".$data[prenom]." / ".$data[o_jar].'<br>';
	echo '<hr>';
}
$require ->closeCursor(); 
?>
...

jack in the box
Invité n'ayant pas de compte PHPfrance

24 sept. 2014, 00:25

Bonsoir à tous !
Ça y est ! j'ai réussi à trouver la bonne syntaxe ! Mais j'ai sué, hein
Pour ceux que ça peut intéresser, la voilà :
...
  //création de la requète SQL:
  $sql = " INSERT INTO offres ( num, nom, prenom, o_jar, o_dom, o_gar, o_cou, o_act, o_ser, o_tra, o_bro)
	VALUES ( '$num', '$nom', '$prenom', '".mysql_real_escape_string(stripslashes($o_jar))."', 
	'".mysql_real_escape_string(stripslashes($o_dom))."', '".mysql_real_escape_string(stripslashes($o_gar))."', 
	'".mysql_real_escape_string(stripslashes($o_cou))."', '".mysql_real_escape_string(stripslashes($o_act))."', 
	'".mysql_real_escape_string(stripslashes($o_ser))."', '".mysql_real_escape_string(stripslashes($o_tra))."', 
	'".mysql_real_escape_string(stripslashes($o_bro))."') " ;
 ...
Merci à tous ceux qui m'ont aidé de leurs conseils :-)))