SIMULATION DE LOGIN

juki_webmaster Messages postés 947 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 5 avril 2008 - 10 janv. 2007 à 01:03
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015 - 10 janv. 2007 à 15:13
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/41041-simulation-de-login

kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
10 janv. 2007 à 15:13
"# 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;"

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°
cs_devlo Messages postés 5 Date d'inscription vendredi 7 octobre 2005 Statut Membre Derniè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és 947 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 5 avril 2008 3
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 :)

# $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);
}
nightlord666 Messages postés 746 Date d'inscription vendredi 17 juin 2005 Statut Membre Dernière intervention 23 mai 2007 10
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és 5 Date d'inscription vendredi 7 octobre 2005 Statut Membre Derniè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és 947 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 5 avril 2008 3
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.

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é.
Rejoignez-nous