logo Homepage
Pages: 1 [2] 3 4 ... 6
  Imprimer  
Auteur Fil de discussion: [PHP] Création d'un espace membre (question et aide)  (Lu 35470 fois)
Perfect Slayer

Profil challenge

Classement : 3028/54284

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 1974


Voir le profil WWW
« #15 le: 09 Août 2005 à 19:43:41 »

Citation de: Comtezero
Pour la connexion du membre , je peux utiliser mes variables du formulaires et non les GET et POST , d'ailleurs ceci ne pourrait pas avoir des problemes pour la sécurisation ( buffer overflow ...) ? Donc vaut mieux que j'utilise quoi ?
Bah pour récupérer les variables d'un formulaire, il faut passer par le super globla $_POST[]... Donc comme ça la question est réglée.

Citation de: Comtezero
En faite j'avais un probleme au niveau de mon include pour les valeurs du serveur user pass sur la bdd !!! je les mets dans le script php et voila que ca marche, pourtant en incluant les parametres dans le script de connexion a partir d'un autre script cela ne devrait pas marcher ?
Bah si normalement ca marche à part si les varaibles ont pas le meme nom (genre l'include te donne la var $var1 et que dans ton script tu veuilles $var2 mais j'pense pas que t'es fait ce genre d'erreur... :s) ou si l'include ne se fait pas... (genre mauvais chemin d'acces au fichier..)

Important ! Le fichier à inclure (s'il doit passer des variables) doit etre un fichier PHP donc avec les tags PHP <? et ?> en début et fin
Journalisée

Newbie Contest Staff :
(¯`·._.· [ Perfect Slayer ] ·._.·´¯)
Status :
Administrateur / Programmeur PHP / Optimisateur
Citation :
Sécurité, efficacité et rapidité riment avec Perfect(ion)
Perfect Slayer

Profil challenge

Classement : 3028/54284

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 1974


Voir le profil WWW
« #16 le: 09 Août 2005 à 20:13:39 »

Citation de: Comtezero
Code:
//j'enleve les caractères html et php aux entrées
if ($pseudo_c != NULL AND $pass_c != NULL) //S'ils sont pas vident
{
$login = strip_tags ( $login_c );
$pass = strip_tags ( $pass_c );

//je cherche dans la bdd les données correspondant

$db = mysql_connect ( $serveur, $user, $password)OR die ('Connexion impossible');
mysql_select_db($basename, $db)OR die ('base inexistance ou non joignable');
$req = mysql_query( "SELECT * FROM `membres`WHERE login='.$login' && pass='.pass'");
while ( $rec= mysql_fetch_array ($req))
{
$login= $rec['.$login'];
$pass= $rec['.$pass'];
echo "login $pass";
}
}
?>
Quand j'execute ce code , il me donne une page blanche , c'est normal ?
Vaut mieux faire une boucle en if a la place du while ou pas ?  La base de donnée est intelligente pour prendre le ogin qui va avec le pass ou pas ? Le tableau sert a quelque chose ?
Ne fait pas : $pseudo_c != NULL mais empty($pseudo_c)
On évite le SELECT * ... car ça utilise des ressources pour rien... Fait plutot : SELECT pseudo,pass

Ensuite, si tu fais un mysql_fetch_array, tu obtiens un tableau de tous les membres ont ce log et ce pass. Donc pour que le login soit bon, il faut qu'il y en ait un. Alors à ce moment là, pour vérifier si le log est bon : tu comtes les entrées de ce tableau avec la fonction count();. Si elle te renvoit 0, alors le log a échoué, si elle te renvoit 1 alors le log et bon et si elle te renvoit plus, alors il y a plussieurs utilisateurs avec le meme pass et meme code... :s

Sinon, on ne fait pas : $rec['.$login']; mais $rec['login'] ce qui correspond à l'index login de la matrice $rec qui correspond aux résultat de la requete SQL... J'espère que tu te perds pas trop.. .Mais si tu mets la var $login, ca cherche l'index de la matrice qui a pour nom le contenu de la variable $login.

Voilà, bonne chance pour la suite !! ++
Journalisée

Newbie Contest Staff :
(¯`·._.· [ Perfect Slayer ] ·._.·´¯)
Status :
Administrateur / Programmeur PHP / Optimisateur
Citation :
Sécurité, efficacité et rapidité riment avec Perfect(ion)
comtezero

Profil challenge

Classement : 2119/54284

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 1001


Voir le profil WWW
« #17 le: 09 Août 2005 à 20:13:49 »

Citation
Bah si normalement ca marche à part si les varaibles ont pas le meme nom (genre l'include te donne la var $var1 et que dans ton script tu veuilles $var2 mais j'pense pas que t'es fait ce genre d'erreur... :s) ou si l'include ne se fait pas... (genre mauvais chemin d'acces au fichier..)

Important ! Le fichier à inclure (s'il doit passer des variables) doit etre un fichier PHP donc avec les tags PHP <? et ?> en début et fin icon_wink
Béh c'est ca que je trouve bizarre les variables portaient le meme nom il y avait bien les <? ?>
Journalisée

·´¯`·­»Comtezero«­·´¯`·

http://www.masstek.org
Perfect Slayer

Profil challenge

Classement : 3028/54284

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 1974


Voir le profil WWW
« #18 le: 09 Août 2005 à 20:16:57 »

et l'include se fait bien ? Genre mets un echo "bipbip"; dans le fichier à include et regarde s'il s'affiche bien ? (je sais, c'est un peu barbare comme méthode mais j'pense pas que je vais commencer les cours sur le debugging avec toi maintenant !)
Journalisée

Newbie Contest Staff :
(¯`·._.· [ Perfect Slayer ] ·._.·´¯)
Status :
Administrateur / Programmeur PHP / Optimisateur
Citation :
Sécurité, efficacité et rapidité riment avec Perfect(ion)
comtezero

Profil challenge

Classement : 2119/54284

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 1001


Voir le profil WWW
« #19 le: 09 Août 2005 à 20:18:24 »

mouarff des cours au niveau ou j'en suis , faudrait encore que j'ai quelque chose a débugger .
Journalisée

·´¯`·­»Comtezero«­·´¯`·

http://www.masstek.org
Bricou
Profil challenge

Classement : 9139/54284

Membre Junior
**
Hors ligne Hors ligne
Messages: 96


Voir le profil
« #20 le: 10 Août 2005 à 06:23:27 »

Code:
<?
    /* Chargement de la configuration */
    require("config.php");

    /* Récupération des variable */
    $login = $_POST["login"];
    $pass = $_POST["pass"];

    /* Connection à la base de données */
    $db_link = mysql_connect($sql_server,$sql_login,$sql_pass);
    if(!$db_link) {
        die("Connexion impossible à la base de données : " . mysql_error());
    }

    /* Selection de la base de données */
    $db_selected = mysql_select_db($sql_bdd,$db_link);
    if(!$db_selected) {
        die("Impossible de selectionner la base de données : " . mysql_error());
    }

    /* Identification */
    $requete = mysql_query("SELECT * FROM membre WHERE login=\"$login\" AND pass=\"$pass\"",$db_link);
    if(!$requete) {
        die("Impossible d'executer la requete : " . mysql_error());
    }

    /* Vérification du nombre de resultat */
    if(mysql_num_rows($requete)==1) {
    /* Création de l'id */
        $taille = 20;
        $lettres = "abcdefghijklmnopqrstuvwxyz0123456789";
        $id = "";
        srand(time());
   for ($i=0;$i<$taille;$i++) {
            $id.=substr($lettres,(rand()%(strlen($lettres))),1);
}
        $requete = mysql_db_query($sql_bdd,"UPDATE membre SET id=\"$id\" WHERE login=\"$login\" AND pass=\"$pass\"",$db_link);
        header("Location:index.php?id=$id");
    } else {
        header("Location:erreur_connection.htm");
        exit;
    }
    mysql_close($db_link);


?>
Voila un petit script home made pas du tout fini, mais il y a qd meme la base.
Contrairement au script de Comtezero, celui la verifie le nombre de reponses que renvoi la requete SQL avec mysql_num_rows()
Ca evite d'utiliser une boucle et de consomer de la memoire pour rien
Voila j'espere que ca peut vous aider
Journalisée
comtezero

Profil challenge

Classement : 2119/54284

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 1001


Voir le profil WWW
« #21 le: 10 Août 2005 à 13:02:15 »

merci de ce petit script , j'en avais fait un avec la fonction mysql_num_rows() mais je comprend pas pourquoi il faut mettre 1 car cette fonction et dans mon livre mais il n'explique pourquoi ca renvoie 1 qu'est-ce que ca doit renvoyer sinon ? 1=true et 0=false ou pas ?
Journalisée

·´¯`·­»Comtezero«­·´¯`·

http://www.masstek.org
Bricou
Profil challenge

Classement : 9139/54284

Membre Junior
**
Hors ligne Hors ligne
Messages: 96


Voir le profil
« #22 le: 10 Août 2005 à 18:28:15 »

mysq_num_rows() donne le nombre de reponses que renvoi la requete SQL.
Si elle est = 0, c soit un mauvais login, soit un mauvais password.
Si elle est = 1, tout est bon.
Si elle est > 1, il y a un gros pb on va dire lol. C'est soit il y a 2x le meme enregistrement dans la table, soit on essaye les injections sql
Journalisée
Perfect Slayer

Profil challenge

Classement : 3028/54284

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 1974


Voir le profil WWW
« #23 le: 10 Août 2005 à 18:32:48 »

Bah y a quand meme quelques petites choses à redire Bricou...
Tu traites pas les superglobaux POST.
Ton code est vulnérable aux injection. (sythaxe de la requete)
Tu veux éviter la boucle pour la ressource mais tu en gache inutilement :

Code:
    /* Connection à la base de données */
    mysql_connect($sql_server,$sql_login,$sql_pass) or die("Connexion impossible à la base de données : " . mysql_error());
a la place de :

Code:
    /* Connection à la base de données */
    $db_link = mysql_connect($sql_server,$sql_login,$sql_pass);
    if(!$db_link) {
        die("Connexion impossible à la base de données : " . mysql_error());
    }
PS. a quoi sert ton id ??
Journalisée

Newbie Contest Staff :
(¯`·._.· [ Perfect Slayer ] ·._.·´¯)
Status :
Administrateur / Programmeur PHP / Optimisateur
Citation :
Sécurité, efficacité et rapidité riment avec Perfect(ion)
Bricou
Profil challenge

Classement : 9139/54284

Membre Junior
**
Hors ligne Hors ligne
Messages: 96


Voir le profil
« #24 le: 11 Août 2005 à 06:12:45 »

Citation
Voila un petit script home made pas du tout fini, mais il y a qd meme la base.

L'id me sert d'identifiant. Si la personne à le meme id et le meme pseudo que ceux de la table, alors il est identifié.
Code:
if ( $data['login']== $login && $data['pass']==$pass )
{
echo '<a href="http://site.free.fr/membres.htm" >Membres</a>';
}
Ici tu as aucune protection. Qui dit au site que celui qui va sur la page membres.htm est bien identifié ?
Enfin de compte, on verifie seulement si le login et le pass correspondent bien, et si c'est juste, on te donne un lien vers la page membres.
Autant aller directement sur la page membres
Journalisée
Perfect Slayer

Profil challenge

Classement : 3028/54284

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 1974


Voir le profil WWW
« #25 le: 11 Août 2005 à 10:36:20 »

Bah il en est pas encore au mécanisme de session ou de cookie...

Et sinon pourquoi tu utilises pas l'ID de ta BDD ? La clé primaire que tu as du mettre en autoincrément (ne serait-ce apres que pour lier des tables ensembles... )
Journalisée

Newbie Contest Staff :
(¯`·._.· [ Perfect Slayer ] ·._.·´¯)
Status :
Administrateur / Programmeur PHP / Optimisateur
Citation :
Sécurité, efficacité et rapidité riment avec Perfect(ion)
comtezero

Profil challenge

Classement : 2119/54284

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 1001


Voir le profil WWW
« #26 le: 11 Août 2005 à 10:50:00 »

la clé défini pendant l'installation en plus du pass et du login , mais ca me servirait a quoi si ils sont bons ? l'utilisateur ne les connaitras pas . En effet j'en suis pas encore au session , deja que c'est la lutte pour une petit script de connexion , ca va etre la guerre pour les sessions .
Journalisée

·´¯`·­»Comtezero«­·´¯`·

http://www.masstek.org
Bricou
Profil challenge

Classement : 9139/54284

Membre Junior
**
Hors ligne Hors ligne
Messages: 96


Voir le profil
« #27 le: 11 Août 2005 à 10:55:15 »

L'id ici c'est l'id de la session, pas l'id du membre en question.
D'ailleurs, comment on utilise l'auto-incrementation avec une requete INSERT
Journalisée
comtezero

Profil challenge

Classement : 2119/54284

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 1001


Voir le profil WWW
« #28 le: 11 Août 2005 à 10:58:45 »

oui je l'ai d'ailleurs défini mors de l'inscription du membre mais elle servirait a quoi si il rentre un pseudo et pass ?
Journalisée

·´¯`·­»Comtezero«­·´¯`·

http://www.masstek.org
Bricou
Profil challenge

Classement : 9139/54284

Membre Junior
**
Hors ligne Hors ligne
Messages: 96


Voir le profil
« #29 le: 11 Août 2005 à 11:46:24 »

Je parle bien de l'id de session et pas de l'id du membre que tu donnes lors de l'inscription.
Cet id me permet de savoir si le client qui regarde telle page est identifié.

http://www.bricou.org/webjeff_espace_membre_v1.11.zip
Dedans y a un script d'inscription, d'identification et de modification je croix.
Ca pourra surment t'aider
Journalisée
Pages: 1 [2] 3 4 ... 6
  Imprimer  
 
Aller à: