Par contre htmlspecialchars(), htmlentities() ou strip_tags() sont inutile pour les requetes SQL... MySQL n'est pas sensible au html... c'est pour l'affichage qu'il faut s'en servir... pour empecher les failles XSS... par exemple quand tu fais "félécitation blabla vous êtes enregistrés"... .. .
Vérifier les retour de mysql comme le dit juki_webmaster
if(empty($user_name)) { echo 'Attention !!! User name manquant'; exit();}
elseif (empty($password)){echo'Attention !!! Mot de passe manquant';exit();}
else
{
. .. ... code ... .. .
}
Tes exit(); ne servent pas à grand chose (et c'est crade en plus) ou alors c'est ton else {} qui sert à rien... soit tu fais...
if(empty($user_name))
exit('Attention !!! User name manquant');
elseif(empty($password))
exit('Attention !!! Mot de passe manquant');
. .. ... code ... .. .
soit tu fais
if(empty($user_name))
echo 'Attention !!! User name manquant';
elseif(empty($password))
echo'Attention !!! Mot de passe manquant';
else
{
. .. ... code ... .. .
}
C'est plus logique... .. .
dans le même esprit pourquoi séparer la page de traitement du formulaire... ça peut être utile dans certains cas (exemple post sur un forum pour éviter les doublons par réactualisation de la page) mais pour ce code c'est inutile et ça augmente le nombre de fichiers pour rien... .. .
Voili voilou
@ tchaOo°
cs_devlo
Messages postés5Date d'inscriptionvendredi 7 octobre 2005StatutMembreDernière intervention 3 janvier 2008 10 janv. 2007 à 14:24
Oula je devrais relire ce que jecris avant de poster.....
La remarque de JUKI est tout à fait justifiée
juki_webmaster
Messages postés947Date d'inscriptionmercredi 19 novembre 2003StatutMembreDernière intervention 5 avril 20083 10 janv. 2007 à 14:22
Non non tu verifie bien $resultat avant $tab= mysql_fetch_array($req3);, car là si ton $resultat vaut <= 0, ça sera pas tres jolie :)
if (mysql_num_rows($req3) <= 0) { // ou !== (int)1 si ont prefere :)
// Rien
} else {
$tab = mysql_fetch_array($req3);
}
nightlord666
Messages postés746Date d'inscriptionvendredi 17 juin 2005StatutMembreDernière intervention23 mai 200710 10 janv. 2007 à 13:24
Je pense qu'il voulait plutôt dire de vérifier $req3, et pas $resultat...
Sinon, je suis totalement d'accord, ce code est vraiment très peu réutilisable, et on dirait plus un exercice personnel qu'un code pouvant être partagé avec les autres.
cs_devlo
Messages postés5Date d'inscriptionvendredi 7 octobre 2005StatutMembreDernière intervention 3 janvier 2008 10 janv. 2007 à 11:46
//$resultat = mysql_num_rows($req3);
//Tu ne verifit pas si $resultat vaut quelque chose avant mysql_fetch_array()
Quelle est l'utilité de vérifier au préalable si $resultat 'vaut quelque chose'
Moi j'ai toujours effectué un test sur le nombre de lignes retournées avec mysql_num_rows
puis si > 0 alors affectation du résultat à une variable avec mysql_fetch_array
Mais je suis peut être dans l'erreur... ?
juki_webmaster
Messages postés947Date d'inscriptionmercredi 19 novembre 2003StatutMembreDernière intervention 5 avril 20083 10 janv. 2007 à 01:03
Le genre de code qui as dut etre poster 10-20-30 fois sur PHPCS :(
Pas de nouveautés, c'est le genre de code qu'ont ne reutiliserais meme pas sur son site, vu qu'il est pas du tout "portable", autemps tout reecrire soit meme pour ces besoins.
10 janv. 2007 à 15:13
# else $Inom="";
Je traduit ça sur une seul ligne (bien que sa soit plus lent):
$Inom = isset($_POST['Inom']) ? $_POST['Inom'] : null;"
Pas d'accord... chacun fait comme il l'entend le premier exemple est valable et plus rapide qui plus est... .. .
Pour le reste comme d'hab... ATTENTION AU SQL INJECTIONS !!! .. .
Il faut utiliser mysql_real_escape_string() sur le variable servant aux requêtes
http://fr.php.net/manual/fr/function.mysql-real-escape-string.php
Sauf si c'est un int... à ce moment là...
'SELECT ... .. . WHERE id='.(int)$maVariable
Par contre htmlspecialchars(), htmlentities() ou strip_tags() sont inutile pour les requetes SQL... MySQL n'est pas sensible au html... c'est pour l'affichage qu'il faut s'en servir... pour empecher les failles XSS... par exemple quand tu fais "félécitation blabla vous êtes enregistrés"... .. .
Vérifier les retour de mysql comme le dit juki_webmaster
if(empty($user_name)) { echo 'Attention !!! User name manquant'; exit();}
elseif (empty($password)){echo'Attention !!! Mot de passe manquant';exit();}
else
{
. .. ... code ... .. .
}
Tes exit(); ne servent pas à grand chose (et c'est crade en plus) ou alors c'est ton else {} qui sert à rien... soit tu fais...
if(empty($user_name))
exit('Attention !!! User name manquant');
elseif(empty($password))
exit('Attention !!! Mot de passe manquant');
. .. ... code ... .. .
soit tu fais
if(empty($user_name))
echo 'Attention !!! User name manquant';
elseif(empty($password))
echo'Attention !!! Mot de passe manquant';
else
{
. .. ... code ... .. .
}
C'est plus logique... .. .
dans le même esprit pourquoi séparer la page de traitement du formulaire... ça peut être utile dans certains cas (exemple post sur un forum pour éviter les doublons par réactualisation de la page) mais pour ce code c'est inutile et ça augmente le nombre de fichiers pour rien... .. .
Voili voilou
@ tchaOo°
10 janv. 2007 à 14:24
La remarque de JUKI est tout à fait justifiée
10 janv. 2007 à 14:22
# $resultat = mysql_num_rows($req3);
#
#
# $tab= mysql_fetch_array($req3);
if (mysql_num_rows($req3) <= 0) { // ou !== (int)1 si ont prefere :)
// Rien
} else {
$tab = mysql_fetch_array($req3);
}
10 janv. 2007 à 13:24
Sinon, je suis totalement d'accord, ce code est vraiment très peu réutilisable, et on dirait plus un exercice personnel qu'un code pouvant être partagé avec les autres.
10 janv. 2007 à 11:46
//Tu ne verifit pas si $resultat vaut quelque chose avant mysql_fetch_array()
Quelle est l'utilité de vérifier au préalable si $resultat 'vaut quelque chose'
Moi j'ai toujours effectué un test sur le nombre de lignes retournées avec mysql_num_rows
puis si > 0 alors affectation du résultat à une variable avec mysql_fetch_array
Mais je suis peut être dans l'erreur... ?
10 janv. 2007 à 01:03
Pas de nouveautés, c'est le genre de code qu'ont ne reutiliserais meme pas sur son site, vu qu'il est pas du tout "portable", autemps tout reecrire soit meme pour ces besoins.
En vrac :
# if(isset($_POST['Inom'])) $Inom=$_POST['Inom'];
# else $Inom="";
Je traduit ça sur une seul ligne (bien que sa soit plus lent):
$Inom = isset($_POST['Inom']) ? $_POST['Inom'] : null;
http://fr.php.net/manual/fr/language.operators.comparison.php#language.operators.comparison.ternary
#
# $Idate="$Iyear"."-"."$Imois"."-"."$Ijour";
$Idate = $Iyear . '-' . $Imois . '-' . $Ijour;
# $sql3 = "SELECT * FROM public_tbl WHERE Nom_Utilisateur='$user_name'";
# $req3 = mysql_query($sql3) or die('Erreur SQL !
Tu selectionne touts les champs, c'est peut etre pas nessesaire ? et si un jour ta table ait beaucoups plus de champs ?
$resultat = mysql_num_rows($req3);
Tu ne verifit pas si $resultat vaut quelque chose avant mysql_fetch_array()
$nm=$tab["Nom"];
Regles de nomage et d'indentation.
# $db = mysql_connect('localhost', 'root', '') or die('Erreur de connexion '.mysql_error());
Tu aurais dut mettre les identifiants de connexions dans un fichier à part, pour faciliter ce qui aurons envie d'essayer le code.
# $sql = "INSERT INTO public_tbl(Nom_Utilisateur, Mot_De_Passe, Nom, Prenom, Date_Naissance,Sexe, Commentaire) VALUES('$Iuser_name','$Ipassword','$Inom','$Iprenom','$Idate','$Isexe','$Itxt')";
Ce n'est pas securiser, voir mysql_real_escape_string() , get_magic_quotes_gpc(), htmlentities() .
Avec les sessions PHP sa serais mieu : http://fr.php.net/manual/fr/ref.session.php
Un index auto-incrementable sur la table membre sera trés utile.
Bref, bon courage, n'hesite sourtout pas à te rendre sur php.net pour la documentation detaillé des fonctions dont je vient d'en parlé.