Connexion / indentifiant

cs_eva4 Messages postés 278 Date d'inscription dimanche 13 décembre 2009 Statut Membre Dernière intervention 24 juin 2011 - 14 févr. 2010 à 07:10
cs_eva4 Messages postés 278 Date d'inscription dimanche 13 décembre 2009 Statut Membre Dernière intervention 24 juin 2011 - 14 févr. 2010 à 15:31
bonjour,

j'ai un petit soucis que je ne comprends pas. Pour une connexion à un site, je fais appel à une identification, nom et mot de pass.

je me connecte sans pb ainsi que d'autres mais beaucoup me disent qu'ils ne se pass rien apres l'entré du nom et pass, comme si ils n'étaient pas enregistré dans la bdd alors que si...

j'ai beau chercher je ne trouve rien d'anormal.
phpmyadmin est en max connexion 20000, largement de quoi faire.

11 réponses

cs_eva4 Messages postés 278 Date d'inscription dimanche 13 décembre 2009 Statut Membre Dernière intervention 24 juin 2011
14 févr. 2010 à 07:26
voici mon script indentification:


<?php
// connexion à votre base de données
$mysql_link=mysql_connect("localhost", "********", "********");
mysql_select_db("*********", $mysql_link);
//initialize the session
session_start();
 
//initialisation de la session   
session_start();   
if($_POST['nom']=="" or $_POST['pass']=="") {

  header('Location: identification.htm');
  exit();}

//si les champs ont été remplis   
if (!$_POST['nom']=="" && !$_POST['pass']=="") {   
  //on récupÚre les valeurs des champs   
   $pass = $_POST['pass'];  
   $nom = $_POST['nom']; 
 
// connexion à votre base de données
$mysql_link=mysql_connect("localhost", "*******", "***********");
mysql_select_db("********", $mysql_link);
$sql = mysql_query("SELECT * FROM eleves WHERE nom='$nom'");
  $row = mysql_fetch_array($sql);   
  $nom_sql = $row['nom'];
  $pass_sql = $row['pass']; 
     
  
  //on teste si le mot de passe correspond à la base de donnée   
  if ($pass_sql == $pass) {   
   //identification ok, alors aller vers l'acceuil.
//on créé la variable de session avec son nom   
    $_SESSION['nom'] = $nom;    


 	
 	 
header('Location: index.php');
}
  
else 
 header('Location: identification.htm');
   
  


0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
14 févr. 2010 à 09:42
Salut,

Tu devrais surement commencer par revoir un peu ton code car il y a pas mal de "bricoles" pas top top :

- pense à activer l'affichage des erreurs pour le debug

$mysql_link=mysql_connect("localhost", "********", "********");
mysql_select_db("*********", $mysql_link);

=> en doublon

session_start();

=> en doublon

if($_POST['nom']=="" or $_POST['pass']=="")

=>
if(empty($_POST['nom']) or empty($_POST['pass']))


if (!$_POST['nom']=="" && !$_POST['pass']=="")

=> inutile de refaire un test, un simple else suffit

WHERE nom='$nom'

> à proscrire !!! > utilise systématiquement mysql_real_escape_string() pour les variables externes

- header() doit toujours être suivi d'un exit()

etc ...

En gros ton code devrait se limiter à qqchose du genre :
<?php

if (isset($_POST['nom']) && isset($_POST['pass'])) {
//si les champs ont été remplis
    if (!empty($_POST['nom']) && !empty($_POST['pass'])) {
    
    // connexion à votre base de données
        $mysql_link =mysql_connect("localhost", "*******", "***********");
        mysql_select_db("********", $mysql_link);
        
        //on récupÚre les valeurs des champs
        $pass = mysql_real_escape_string($_POST['pass']);
        $nom = mysql_real_escape_string($_POST['nom']);
        
        
        $sql = mysql_query("SELECT nom FROM eleves WHERE nom='$nom' AND pass='$pass'");
        if (mysql_num_rows($sql) == 1) {
            $_SESSION['nom'] = $nom;
            header('Location: index.php');
            exit;
        }
    }
}
header('Location: identification.htm');
?>



Cordialement,

Kohntark -
0
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
14 févr. 2010 à 11:21
Salut,

Juste quelques remarques :

//on récupÚre les valeurs des champs
$pass = $_POST['pass'];
$nom = $_POST['nom'];

Non, non, non et non, tu ne récupère pas la valeur des champs. Tu fais juste une action totalement inutile qui est de copier le contenu d'une variable dans un autre, ça sert à rien du tout. De plus, en utilisant $_POST au moins on se rend compte directement de la provenance de la valeur, c'est à dire de l'utilisateur (et donc d'une source non fiable), ce qui n'est pas le cas des variable que tu définie (sans regarder l'assignation, il est impossible de dire si $nom provient d'une entrée utilisateur ou si c'est toi qui l'a généré).

=> à proscrire !!! => utilise systématiquement mysql_real_escape_string() pour les variables externes

On a déjà eu ce débat, ça fonctionne uniquement pour les valeurs qui sont a insérer entre quotes dans le SQL, donc si on fait sa requête proprement ça ne fonctionne pas pour les entiers, flotants, etc.

- header() doit toujours être suivi d'un exit()

Seulement dans le cas d'une redirection et autre chose pour lequel le script devrai se terminer. Quand tu fais un header destiné, par exemple, à définir le content-type faut surtout pas mettre de exit et dérivés.
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
14 févr. 2010 à 12:01
Salut TychoBrahe,

Ces précisions ne seront peut être pas de trop. Ca me parait tellement évident de ne pas mettre de exit() après un header content-*, accept-*, statut and co qu'a me lire ça peut effectivement prêter à confusion pour des plus néophytes que moi ...

On a déjà eu ce débat, ça fonctionne uniquement pour les valeurs qui sont a insérer entre quotes dans le SQL, donc si on fait sa requête proprement ça ne fonctionne pas pour les entiers, flotants, etc.

Je ne me souviens plus de ce débat et à vrai dire j'ai peur de ne pas comprendre où tu veux en venir (??)
Pour quelles raisons l'utilisation de mysql_real_escape_string ne fonctionnerait elle pas sur les int, float, etc ... ?


Cordialement,


Kohntark -
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
14 févr. 2010 à 12:25
Salut,

Je ne me souviens plus de ce débat et à vrai dire j'ai peur de ne pas comprendre où tu veux en venir (??)
Pour quelles raisons l'utilisation de mysql_real_escape_string ne fonctionnerait elle pas sur les int, float, etc ... ?

Souvenir

Soit dit en passant, dans ce que je dit il y a une petite correction à apporter, ctype_digit() et dérivés est plus recomandé que is_numeric().
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
14 févr. 2010 à 14:04
Merci pour ce rafraichissement de mémoire (m'en suis souvenu à la lecture des premières lignes)
Je ne vais pas relancer le débat, surtout que dans le fond tu as entièrement raison, mais mettre un int entre "'" ne me choque pas plus que ça (dans ce cas précis évidemment) je sais, je vais en faire bondir plus d'un.
Nous ne sommes pas en C et le fait de vouloir à tous prix typer les variables en PHP me semble aller à l'encontre du fondement même du langage ( il y en a qui bouillonnent là)
Je parle ici de certains développeurs qui poussent un peu trop (à mon humble petit avis) les contrôles en tous genres :
$truc = 'bidule';
[...]
if (ctype_alpha($truc) === true) [...] else throw new exception('$truc is not a valid ...');
[...]
$tartanpion = (isset($truc))? (string)$truc:false;

... je n'exagère que peu.

Sauf erreur de ma part mysql/[php] s'en fiche que tu lui envoies une string dans un champ INT, le résultat sera toujours le même et d'après moi il faut profiter de ces fonctionnalités qui ont justement été développées dans ce but. Ca simplifie énormément les choses (déclarations, cast, ...), surtout lorsque l'on ne connait pas le type de variable attendue (sisi, ça peut arriver )

Soyons clair, je ne suis pas en train de dire qu'il est inutile de contrôler les types ou d'exécuter des requêtes syntaxiquement "propres", mais uniquement qu'un juste milieu doit être recherché, entre avantages du langage et nécessité de borner et sécuriser le code.


au final j'ai peur d'avoir relancé le débat


Bonne après midi ensoleillée (?) à toi,


Kohntark -
0
cs_eva4 Messages postés 278 Date d'inscription dimanche 13 décembre 2009 Statut Membre Dernière intervention 24 juin 2011
14 févr. 2010 à 14:20
waouh, c'est vrai que c plus simple...
bon j'ai suivi votre exemple, je dois ajouter une petite précision

dans cette partie la (la mienne que j'avais avant)
$sql = mysql_query("SELECT * FROM eleves WHERE nom='$nom'");
  $row = mysql_fetch_array($sql);   
  $nom_sql = $row['nom'];
  $pass_sql = $row['pass'];
  $ville_sql = $row['ville'];
  $adresse_sql = $row['adresse'];


je sortais des infos sup:
 
$ville_sql = $row['ville'];
$adresse_sql = $row['adresse'];


voila mon script actuel qui fonctionne sauf que j'arrive pas à en dégager les infos sup. bon j'ai creer une deuxieme page du coup apres l'indentifiacation qui va me chercher ces infos avant d'arriver dans l'index.

<?php
//initialisation de la session

if (!$_POST['nom']=="" && !$_POST['pass']=="") {

$mysql_link=mysql_connect("localhost", "****", "*****");
mysql_select_db("******", $mysql_link);


session_start();

$pass = mysql_real_escape_string($_POST['pass']);
        $nom = mysql_real_escape_string($_POST['nom']);



$sql = mysql_query("SELECT * FROM eleves WHERE nom='$nom' and passd='$pass'");
 if (mysql_num_rows($sql) == 1) {
 			
            $_SESSION['nom'] = $nom;
            

header('Location: identificationphpok.php');
exit;
        }

}

header('Location: identification.htm');
?>


arrivé ici, la page identificationphpok.php va me chercher les infos manquantes ou nom et pass = les valeurs entrées. Ensuite cela renvoie sur index.php


j'ai donc essayée d'intégrer dans le script 'aller chercher les infos manquantes' mais sa ceux pas. Pourtant je penses que ce serait l'indéal, sa eviterais avoir a aller dans la page 'identificationphpok.php' pour ensuite aller à index....
0
cs_eva4 Messages postés 278 Date d'inscription dimanche 13 décembre 2009 Statut Membre Dernière intervention 24 juin 2011
14 févr. 2010 à 14:28
- header() doit toujours être suivi d'un exit()


Seulement dans le cas d'une redirection et autre chose pour lequel le script devrai se terminer. Quand tu fais un header destiné, par exemple, à définir le content-type faut surtout pas mettre de exit et dérivés.


mais alors, est ce que dans ce cas la (qui est une redirection avec fin du script) on dois enlever le exit() ?
parce que même si effectivement on change de page, même si le script est fini, on se sert quand même des infos resorties ..... ? :
session_start();

$pass = mysql_real_escape_string($_POST['pass']);
$nom = mysql_real_escape_string($_POST['nom']);


$sql = mysql_query("SELECT * FROM eleves WHERE nom='$nom' and passd='$pass'");
if (mysql_num_rows($sql) == 1) {

$_SESSION['nom'] = $nom;


header('Location: identificationphpok.php');
exit;
0
cs_eva4 Messages postés 278 Date d'inscription dimanche 13 décembre 2009 Statut Membre Dernière intervention 24 juin 2011
14 févr. 2010 à 14:30
et qu 'entendez vous par :

=> à proscrire !!! => utilise systématiquement mysql_real_escape_string() pour les variables externes

0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
14 févr. 2010 à 15:05
j'ai donc essayée d'intégrer dans le script 'aller chercher les infos manquantes' mais sa ceux pas.


c'est toujours autant difficile d'avoir des infos avec toi Eva.
"ça ne veut pas" ne nous permet pas de t'apporter la moindre aide. Pour cela il faudrait voir le code que tu as tenté de mettre en place pour récupérer ces champs.

mais alors, est ce que dans ce cas la (qui est une redirection avec fin du script) on dois enlever le exit() ?

Je cite TychoBrahe :
Seulement dans le cas d'une redirection

Ce qui est clair, contrairement à ta "question"
Si tu parles du exit() après le header() (celui qui est en toute fin de script) il ne sert à rien puisque qu'aucune instruction ne le suit (aucun risque donc d'exécuter du code après l'envoi du header)


parce que même si effectivement on change de page, même si le script est fini, on se sert quand même des infos resorties ..... ?

Désolé mais je n'ai rien compris.
Je t'encourage à rechercher sur le net "headers http" ce qui t'apportera sans doute les réponses à tes questions. Si il subsiste des interrogations n'hésites pas à nous en faire part.

et qu 'entendez vous par : [...]

As tu pris le soin de jeté un oeil à la doc ??
Si oui peux tu être plus précise sur ta question ?

Une petite remarque au passage, que j'espère tu ne prendras pas mal :
Il serait de bon ton que tu ais 'le dernier mot' sur les threads que tu inities; un 'ti merci aux personnes qui ont donné de leur temps à tenter de t'aider, un petit mot pour dire si tu t'en es sortie, et par quel biais, une réponse aux questions qui te sont posées, etc ... ne font pas de mal.
Force est de constater que nombre de tes demandes ne satisfont pas ces quelques principes de base.

Cordialement,

Kohntark -
0
cs_eva4 Messages postés 278 Date d'inscription dimanche 13 décembre 2009 Statut Membre Dernière intervention 24 juin 2011
14 févr. 2010 à 15:31
voici ce que j'ai fais pour chercher les valeur manquante (ce qui fonctionne pas)

<?php
//initialisation de la session

if (!$_POST['nom']=="" && !$_POST['pass']=="") {

$mysql_link=mysql_connect("localhost", "****", "*****");
mysql_select_db("******", $mysql_link);


session_start();

$pass = mysql_real_escape_string($_POST['pass']);
        $nom = mysql_real_escape_string($_POST['nom']);



$sql = mysql_query("SELECT * FROM eleves WHERE nom='$nom' and passd='$pass'");
$row = mysql_fetch_array($sql);   
  $ville = $row['ville'];
  $adresse= $row['adresse']; 

 if (mysql_num_rows($sql) == 1) {
 			
            $_SESSION['nom'] = $nom;
            

header('Location: identificationphpok.php');
exit;
        }

}

header('Location: identification.htm');
?>
0
Rejoignez-nous