Mon Problème Qui Est Super Bien Expliqué Sujet : Sessions

francewebmaster
Invité n'ayant pas de compte PHPfrance

09 déc. 2006, 20:41

alimenter.php
<?php 
// On commence par récupérer les champs 
if(isset($_POST['nom']))      $nom=$_POST['nom']; 
else      $nom=""; 

if(isset($_POST['prenom']))      $prenom=$_POST['prenom']; 
else      $prenom=""; 

if(isset($_POST['pseudo']))      $pseudo=$_POST['pseudo']; 
else      $pseudo=""; 

if(isset($_POST['pass']))      $pass=$_POST['pass']; 
else      $pass=""; 

if(isset($_POST['email']))      $email=$_POST['email']; 
else      $email=""; 

if(isset($_POST['telephone']))      $telephone=$_POST['telephone']; 
else      $telephone=""; 

if(isset($_POST['numero']))      $numero=$_POST['numero']; 
else      $numero=""; 

// On vérifie si les champs sont vides 
if(empty($nom) OR empty($prenom) OR empty($pseudo) OR empty($pass) OR empty($email) OR empty($telephone) OR empty($numero))
    { 
    echo '<font color="red">Attention, aucun champs ne peut rester vide !</font>'; 
    } 

// Aucun champ n'est vide, on peut enregistrer dans la table 
else      
    { 
       // connexion à la base 
$db = mysql_connect('sql.free.fr', 'francewebmaster', '******')  or die('Erreur de connexion '.mysql_error()); 

    // sélection de la base  
    mysql_select_db('francewebmaster',$db)  or die('Erreur de selection '.mysql_error()); 
    
    // on écrit la requête sql 
    $sql = "INSERT INTO user(pseudo,pass) VALUES('$pseudo','$pass')";
    
    // on insère les informations du formulaire dans la table 
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 

    // on affiche le résultat pour le visiteur 
    echo 'Vos infos on été ajoutées.'; 

    mysql_close();  // on ferme la connexion 
    } 
?>
form.html
<html>
<form method="POST" action="alimenter.php">
<center>
<input type="text" name="nom" size="20" value="nom" maxlength="35">
<input type="text" name="prenom" size="20" value="prenom" maxlength="35">
<input type="text" name="pseudo" size="20" value="pseudo" maxlength="35">
<input type="text" name="pass" size="20" value="pass" maxlength="35">
<input type="text" name="email" size="20" value="email" maxlength="35">
<input type="text" name="telephone" size="20" value="telephone" maxlength="35">
<input type="text" name="numero" size="20" value="numero" maxlength="35">
<input type="submit" value="Envoyer" name="envoyer">
</center>
</form>
</html>
Table user

Code : Tout sélectionner

CREATE TABLE user (id INT (11) not null AUTO_INCREMENT, nom VARCHAR (35) null , prenom VARCHAR (35) null , pseudo VARCHAR (70) not null , pass INT (11) not null , email VARCHAR (70) null , telephone VARCHAR (255) null , numero VARCHAR (255) null , PRIMARY KEY (id), INDEX (id), UNIQUE (id))
interroger.php
<?php 
// on se connecte à MySQL 
$db = mysql_connect('sql.free.fr', 'francewebmaster', '******'); 

// on sélectionne la base 
mysql_select_db('francewebmaster',$db); 

// on crée la requête SQL 
$sql = 'SELECT nom,prenom,pseudo,pass,email,telephone,numero FROM user'; 

// on envoie la requête 
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 

// on fait une boucle qui va faire un tour pour chaque enregistrement 
while($data = mysql_fetch_assoc($req)) 
    { 
    // on affiche les informations de l'enregistrement en cours 
    echo ''.$data['nom'].' '.$data['prenom'].''; 
    echo ''.$data['email'].' '.$data['telephone'].' '.$data['numero'].'';
    } 

// on ferme la connexion à mysql 
mysql_close(); 
?>
session.html
<html>
 <head>
  <title>Connexion</title>
 </head>
 <body>
  <form method="post" action="verifLogin.php">
   <table border="0" width="400" align="center">
    <tr>
     <td width="200">Pseudo</td>
     <td width="200">
      <input type="text" name="login">
     </td>
    </tr>
    <tr>
     <td width="200">Pass</td>
     <td width="200">
      <input type="$password" name="$password">
     </td>
    </tr>
    <tr>
     <td colspan="2">
      <input type="submit" name="submit" value="login">
     </td>
    </tr> 
   </table>
  </form>
 </body>
</html>
verifLogin.php
<?php
$loginOK = false;

if ( isset($_POST) && (!empty($_POST['pseudo'])) && (!empty($_POST['pass'])) ) {

  extract($_POST);

//connexion à la base de données
$liendb=mysql_connect("sql.free.fr","francewebmaster","*****");
$db=mysql_select_db(francewebmaster);

  // On va chercher le mot de passe afférent à ce login
  $sql = "SELECT pseudo, pass FROM user WHERE login = '".addslashes($login)."'";
  $req = mysql_query($sql) or die('Le pseudo OU Le pass est faux !!'.$sql);
  
  // On vérifie que l'utilisateur existe bien
  if (mysql_num_rows($req) > 0) {
     $data = mysql_fetch_assoc($req);
    
    // On vérifie que son mot de passe est correct
    if ($password == $data['pass']) {
      $loginOK = true;
    }
  }
}

// Si le login a été validé on met les données en sessions
if ($loginOK) {
  $_SESSION['pseudo'] = $data['pseudo'];
  $_SESSION['pass'] = $data['pass'];
}
else {
  echo 'Une erreur est survenue, veuillez réessayer !'; 
}
?>
PS : Dans la table user il y a aucun retour à la ligne là c'est seulement pour que sa ne soit pas trop long sur le post ( en largeur)

PS : Dans verifLogin.php, alimenter.php et interroger.php le mot de passe à été remplacer par * mais en vrai c'est corriger...

- Bon j'arrive à alimenter la table user

- Je n'arrive pas à l'interroger, sa n'affiche aucun message d'erreur, c'est une feuille blanche

- Et quand j'ouvre une session depuis session.html sa me met : Une erreur est survenue, veuillez réessayer !

Quel sont les fines erreur commises ??

Mon E-mail est : [email protected]

Mammouth du PHP | 19672 Messages

09 déc. 2006, 20:46

Il y a des variables PHP non interprétées dans ton fichier session.html : essaye en mettant session.php à la place et en encadrant ces variables dans un
...attribut="<?php echo($variable); ?>"
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

09 déc. 2006, 21:20

Il y a des variables PHP non interprétées dans ton fichier session.html : essaye en mettant session.php à la place et en encadrant ces variables dans un
...attribut="<?php echo($variable); ?>"
Pas compris,

session.php

Code : Tout sélectionner

<? <html> <head> <title>Connexion</title> </head> <body> <form method="post" action="verifLogin.php"> <table border="0" width="400" align="center"> <tr> <td width="200">Pseudo</td> <td width="200"> <input type="text" name="login"> </td> </tr> <tr> <td width="200">Pass</td> <td width="200"> <input type="$password" name="$password"> </td> </tr> <tr> <td colspan="2"> <input type="submit" name="submit" value="login"> </td> </tr> </table> </form> </body> </html> ?>
Comme ça ?? Je ne suis pas sûr...

francewebmaster
Invité n'ayant pas de compte PHPfrance

09 déc. 2006, 21:24

heu... Invité c'est francewebmaster (désoler, j'ai oublier de mettre mon peudo)

francewebmaster
Invité n'ayant pas de compte PHPfrance

09 déc. 2006, 22:13

heu quelqu'un a trouver autre chose, bien que je n'est pas compris la remarque précédente..

Mammouth du PHP | 19672 Messages

09 déc. 2006, 22:23

C'est pourtant assez élémentaire il me semble :
<html>
 <head>
  <title>Connexion</title>
 </head>
 <body>
  <form method="post" action="verifLogin.php">
   <table border="0" width="400" align="center">
    <tr>
     <td width="200">Pseudo</td>
     <td width="200">
      <input type="text" name="login">
     </td>
    </tr>
    <tr>
     <td width="200">Pass</td>
     <td width="200">
      <input type="<?php echo($password); ?>" name="<?php echo($password); ?>">
     </td>
    </tr>
    <tr>
     <td colspan="2">
      <input type="submit" name="submit" value="login">
     </td>
    </tr> 
   </table>
  </form>
 </body>
</html>
Si ton fichier est en .html, il sera envoyé tel quel vers le navigateur.
Si ton fichier est en .php, il sera analysé par l'interpréteur PHP avant envoi vers le navigateur. Mais ce que tu avais fait comme correction n'avait aucun sens. Regarde ce que j'ai fait à la place et dis moi si tu comprends le pourquoi de ce que j'ai modifié :-k
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

francewebmaster
Invité n'ayant pas de compte PHPfrance

09 déc. 2006, 22:43

Car sinon la page verifLogin.php ne pourrai le lire correctement voir pas du tout... c'est ça ?? :?:

francewebmaster
Invité n'ayant pas de compte PHPfrance

09 déc. 2006, 23:09

Y a le même message d'erreur...

Une erreur est survenue, veuillez réessayer !

Pourquoi ce message s'affiche ?

Mammouth du PHP | 19672 Messages

10 déc. 2006, 00:49

Parce que ta requête ne retourne pas ce que tu attends. Donc ta variable $loginOk reste à false

Ceci dit, tu récupères $_POST['pseudo'] mais tu testes dans ta table en contrôlant la valeur de $_POST['login']

D'autre part, ta méthode n'est pas terrible, au lieu de récupérer des données inutiles, un comptage suffirait amplement. Voici une proposition de correction de ton code. Si tu ne comprends pas un point particulier, pose la question.
<?php
$loginOK = false;
$pseudo  = isset($_POST['pseudo']) ? $_POST['pseudo'] : "";
$pass    = isset($_POST['pass'])   ? $_POST['pass']   : "";

if ( (!empty($pseudo)) && (!empty($pass)) )
{
    //connexion à la base de données
    $liendb = mysql_connect("sql.free.fr","francewebmaster","*****");
    $db     = mysql_select_db(francewebmaster);

    // On va vérifier l'existence du couple pseudonyme+mot de passe
    $sql = "SELECT COUNT(*) ".
           "FROM `user` ".
           "WHERE `login` = '". addslashes($pseudo) ."' ".
           "AND `pass` = '". addslashes($pass) ."';";
    /* Exécution de la requête */
    $req = mysql_query($sql) or die("Erreur lors de l'exécution de la requête : \"".$sql ."\"");

    // On vérifie le résultat retourné
    if (mysql_result($req, 0) == 1)
    {
        $loginOK = true;
    }
}

// Si le login a été validé on met les données en sessions
if ($loginOK) 
{
    $_SESSION['pseudo'] = $pseudo;
    /* On enregistre jamais un mot de passe dans une variable de session ! */
}
else 
{
    echo "Le pseudonyme ou le mot de passe est erroné, veuillez réessayer !";
}
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

francewebmaster
Invité n'ayant pas de compte PHPfrance

10 déc. 2006, 03:55

cette fois sa affiche

Code : Tout sélectionner

Le pseudonyme ou le mot de passe est erroné, veuillez réessayer !
je croit que je n'est pas bien tapé ma table user

le champs pass doit pas avoir des caractéristiques difèrente des autres ?

Invité
Invité n'ayant pas de compte PHPfrance

10 déc. 2006, 03:59

En plus il n'y a pas de login "ce n'est pas peudo à la place ?" dans la table alors pourquoi :

Code : Tout sélectionner

"WHERE `login` = '". addslashes($pseudo) ."' ".
??

francewebmaster
Invité n'ayant pas de compte PHPfrance

10 déc. 2006, 04:05

OUI en toute logique le problème vien de la table user !!

Mammouth du PHP | 19672 Messages

10 déc. 2006, 11:42

J'avais oublié de vérifier le code de ta table : du coup il y a un champ de la requête suggéré qui n'est pas bon. Remplacer par ceci :
<?php
$loginOK = false;
$pseudo  = isset($_POST['pseudo']) ? $_POST['pseudo'] : "";
$pass    = isset($_POST['pass'])   ? $_POST['pass']   : "";

if ( (!empty($pseudo)) && (!empty($pass)) )
{
    //connexion à la base de données
    $liendb = mysql_connect("sql.free.fr","francewebmaster","*****");
    $db     = mysql_select_db(francewebmaster);

    // On va vérifier l'existence du couple pseudonyme+mot de passe
    $sql = "SELECT COUNT(*) ".
           "FROM `user` ".
           "WHERE `pseudo` = '". addslashes($pseudo) ."' ".
           "AND `pass` = '". addslashes($pass) ."';";
    /* Exécution de la requête */
    $req = mysql_query($sql) or die("Erreur lors de l'exécution de la requête : \"".$sql ."\";<br />\nErreur retournée : ". mysql_error());

    // On vérifie le résultat retourné
    if (mysql_result($req, 0) == 1)
    {
        $loginOK = true;
    }
}

// Si le login a été validé on met les données en sessions
if ($loginOK) 
{
    $_SESSION['pseudo'] = $pseudo;
    /* On enregistre jamais un mot de passe dans une variable de session ! */
}
else 
{
    echo "Le pseudonyme ou le mot de passe est erroné, veuillez réessayer !";
}
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

francewebmaster
Invité n'ayant pas de compte PHPfrance

10 déc. 2006, 12:32

Sa affiche : "Le pseudonyme ou le mot de passe est erroné, veuillez réessayer !"

J'ai 2 question :

1) Au lieu d'écrire "Le pseudonyme ou le mot de passe est erroné, veuillez réessayer !" on peut redirriger vers http://francewebmaster.free.fr/HTML/erreur_session.php

2) Comment rediriger les inscrit dans la table user vers http://francewebmaster.free.fr/HTML/membre/membre.php
avec aucune accesiblité depuis une autre page que verifLogin.php

Merci...

Mammouth du PHP | 19672 Messages

10 déc. 2006, 19:53

francewebmaster, on ne peut pas dire que tu sois d'une logique considérable : as-tu testé ta requête directement ? Fais afficher la requête dans la page, copie-la et teste-là directement via phpMyAdmin pour vérifier le retour obtenu.

Et je te rappelle pour mémoire, j'ai verrouillé l'autre sujet : les "up" sont interdits.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: