session

x@v
Mammouth du PHP | 570 Messages

02 mars 2007, 05:04

Bonjour,
je dois récupérer un résultat d'une base mais cette requete me renvoie false à partir de la deuxième ligne ?
la fonction avec la requete qui déconne
function verification($nom,$mot_de_passe)
{
  include('connexion.php');
  connexion();
      echo $mot_de_passe;
    echo $nom;
  // Création de la requête SQL

  $result = mysql_query("SELECT * FROM utilisateur WHERE user_name='$nom' AND mot_de_passe='$mot_de_passe'");
  if (!$result)
     return 0;
  
  if (mysql_num_rows($result)>0)
  {
     return 1;
	echo 'vrai';
  }else{
  	echo 'faux';
    return 0;
  }
}
La récupération du formulaire
session_start();
include('fonction_client.php');
if(isset($_POST['pseudo']) && isset($_POST['mot_de_passe'])) {
    $nom=$_POST['pseudo'];
    $mot_de_passe=$_POST['mot_de_passe'];

    // on teste si le mot de passe est valide
    if(verification($mot_de_passe, $nom)!= false) {
    $_SESSION['nom']= $nom;
    header ('location:index.php');
    }
     else 
	{
	  $message='<p>Mauvais mot de passe</p><br />';
	  $message.='<p><a href="creation_compte.php">Vous pouvez créer un compte pour ajouter un article et commander</a></p>';
  	}
} 
else 
{
echo 'xcvvcxvxcxvc';
/*   $message="<p>Le login ou le mot de pass est vide, réessayer</p>";
   $message.="<p><a href=\"#.php\">Vous pouvez créer un compte pour ajouter un article et commander</a></p>";*/
}
Je ne comprend pas, sa n'a pas de sens ?

x@v
Mammouth du PHP | 570 Messages

02 mars 2007, 05:07

en faite sa ne fonctionne que quand le nom et le mot de passe sont identique, pourtant la requète ne dit pas ça ?
  $result = mysql_query("SELECT * FROM utilisateur WHERE user_name='$nom' AND mot_de_passe='$mot_de_passe'");

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

02 mars 2007, 09:19

Quel est le message d'erreur ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

x@v
Mammouth du PHP | 570 Messages

02 mars 2007, 18:34

il ny'a pas de message d'ereur.

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

02 mars 2007, 18:39

Ta fonction retourne 0 dans deux cas : pb de requête ou bien pas d'utilisateur trouvé. Change un des retours en 2, ou bien dis nous ce qui arrive vraiment.
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

x@v
Mammouth du PHP | 570 Messages

02 mars 2007, 22:13

pouquoi changé le retour en 2, c'est booléens ?
1 == TRUE;
0 == FALSE;
j'ai essayer avec trus et false sans résultat.

x@v
Mammouth du PHP | 570 Messages

02 mars 2007, 22:26

je me demande si sa ne vient pas de la table :
CREATE TABLE `utilisateur` (
  `customerid` int(11) unsigned NOT NULL auto_increment,
  `user_name` varchar(40) NOT NULL default '',
  `prenom` varchar(250) NOT NULL default '',
  `mot_de_passe` varchar(40) NOT NULL default '',
  `email` varchar(200) NOT NULL default '',
  `civilite` varchar(10) NOT NULL default '',
  `adresse` text NOT NULL,
  `code_postal` varchar(8) NOT NULL default '',
  `ville` text NOT NULL,
  `tel` varchar(15) NOT NULL default '',
  `fax` varchar(15) NOT NULL default '',
  PRIMARY KEY  (`customerid`)
) TYPE=MyISAM AUTO_INCREMENT=3 ;
INSERT INTO `utilisateur` VALUES (1, 'xaviou', '', 'xav', '[email protected]', '', '', '0', '', '0', '');
INSERT INTO `utilisateur` VALUES (2, 'xav', 'xav', 'xav', '[email protected]', 'mr', 'sddsdsds', '75009', 'paris', '0175487525', '');
la page en question
http://courant-alternatif.org/test_conn ... e/auth.php

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

03 mars 2007, 00:00

cette requete me renvoie false à partir de la deuxième ligne ?
C'est une question ?

C'est quoi la ligne 2 pour toi ?

Vu ce que tu nous montres il ne se passera rien, en cas de retour négatif, à par l'affectation d'une variable $message d'un message d'erreur qui n'est plus utilisé par la suite... donc page blanche certainement.

Pour coder correctement une fonction ne comporte qu'un seul return en fin de fonction. Affecte une variable de la valeur à retourner :
function f($toto)
{
   if($toto == "toto")
      $retour = true;
   else 
      $retour = false;

   return $retour;
}

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

x@v
Mammouth du PHP | 570 Messages

03 mars 2007, 03:39

En faite il me renvois vrai seulement quand les deux champs tester sont identique
===
"SELECT * FROM utilisateur WHERE user_name='$nom' AND mot_de_passe='$mot_de_passe'"
Cette requete renvoi false si user_name et mot_de_ passe sont different. Alors à partir de là je me pose la question, sa ne serai pas au niveau de la requette ?
et donc comment tester ces deux champs ?
  $result = mysql_query("SELECT * FROM utilisateur WHERE user_name='$nom' AND mot_de_passe='$mot_de_passe'");
  if (!$result)
     return 0;
  
  if ($result=mysql_num_rows($result)>0)
  {
  echo 'rrrrrrrrrrrrrrrrr';
	$result=true;
  } else {
  //echo 'rrrrrrrrrrrrrrrrr';
	$result =false;
  }
  return $result;
}
<?php
session_start();
include('fonction_client.php');

    $nom=$_POST['pseudo'];
    $mot_de_passe=$_POST['mot_de_passe'];
if(isset($nom) && isset($mot_de_passe)) {
    // on teste si le mot de passe est valide
    if(verification($mot_de_passe, $nom)==true) {
    $_SESSION['nom']= $nom;
    header ('location:index.php');
    }
     else 
	{
	  $message='<p>Mauvais mot de passe</p><br />';
	  $message.='<p><a href="creation_compte.php">Vous pouvez créer un compte pour ajouter un article et commander</a></p>';
  	}
} 
else 
{
echo '';
 $message="<p>Le login ou le mot de pass est vide, réessayer</p>";
   $message.="<p><a href=\"#.php\">Vous pouvez créer un compte pour ajouter un article et commander</a></p>";
}
?>

x@v
Mammouth du PHP | 570 Messages

03 mars 2007, 04:00

j'ai enfin trouvé, à force de faire la part des choses :
  $result = mysql_query("SELECT * FROM utilisateur WHERE user_name='$nom' AND mot_de_passe='$mot_de_passe'");
   if (!$result || mysql_num_rows($result)!=0)
     return false;
   else
	return true;
La solution est assez simple finalement.
Modifié en dernier par x@v le 03 mars 2007, 04:03, modifié 1 fois.

Eléphant du PHP | 445 Messages

03 mars 2007, 04:01

Cependant, tu n'as pas suivi le conseil de Truc concernant le return ;)

Et à quoi sert ta première condition ? Puisque tu refais la vérification dans ton second if
LLDC
Ulti

x@v
Mammouth du PHP | 570 Messages

03 mars 2007, 04:04

La solution de trux ne fonctionne pas non plus, j'ai essayer
ce qui fait fonctionner le tout c'est cela :
mysql_num_rows($result)!=0
et rien que ça
et en faisant differant de sa je retune true;
qui est la seul valeur possible ;)
je ne me l'explique pas, d'ailleurs ?
les autres solutions ont un sens en théorie ?
PS : ma table est autocrémenté par l'index, peut être que php attrape ce champ :
0, 1, 2
Je suis dérouté, parce qu'en principe, je ne fait pas appel à un objet.
j'aurrai du d'ailleurs essayer
$row=mysql_fetch_object($result);
echo $row->$result;
Mais c'est une affaire classée

x@v
Mammouth du PHP | 570 Messages

03 mars 2007, 08:51

je me suis aperçu que tous les noms s'accroche.
donc j'ai tout refais mais toujours avec le même problème, ce qui est pas normal puisque logique je défie quiconque peux me dire pourquoi ?
function login($nom,$mot_de_passe)
{
  include('connexion.php');
  connexion();
  $result = mysql_query("SELECT * FROM utilisateur WHERE user_name='$nom' and mot_de_passe='$mot_de_passe'");
  //echo mysql_num_rows($result).'<br />';
  if (!$result)
  echo 'Vous ne pouvez pas vous connectez';
  
  if (mysql_num_rows($result)>0)
     return true;
  else 
     echo 'Connexion impossible.';
}
session_start();
include('fonction_client.php');

    $nom=$_POST['pseudo'];
    $mot_de_passe=$_POST['mot_de_passe'];

    // on teste si le mot de passe est valide
    if(login($mot_de_passe, $nom) == true) {
        $_SESSION['nom']= $nom;
    header ('location:index.php');
} 
else 
{
  echo 'vous ne pouvez pas voue logger';
}