Problème de récupération

Résolu
flo39400 Messages postés 596 Date d'inscription   Statut Membre Dernière intervention   -  
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

J'ai voulu améliorer mon code mais j'arrive pas au résultat:
Pouvez vous me dire ce qu'il cloche ?



Avant j'avais ça, qui fonctionne très bien :

$requser = $bdd->prepare("SELECT * FROM membres WHERE pseudo = ? AND motdepasse = ?");
		$requser->execute(array($pseudoconnect, $mdpconnect));
		$userexist = $requser->rowCount(); 



Maintenant je remplace avec ceci est, l'id utilisateur n'est pas récupéré donc connexion impossible sans message d'erreur :

$prep_requser = "SELECT * FROM membres WHERE pseudo = ? AND motdepasse = ?";
		try{
			$requser = $bdd->prepare($prep_requser);
			$requser->execute(array($pseudoconnect, $mdpconnect));
		}catch(Exception $e){
			echo "Erreur :".$e->getMessage();
		}
		$req_userexist = $requser->fetchAll();
		$userexist = count($req_userexist);


Merci pour votre aide.




2 réponses

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour,

Comme je te l'avais déjà conseillé .. il est préférable de placer la requête et les données dans des variables à part .... cela permet, par exemple, d'en faire des ECHO pour savoir ce qu'elles contiennent réellement...

Donc ton code devient :
$sql = "SELECT * FROM membres WHERE pseudo = :pseudoconnect AND motdepasse = :mdpconnect";
$datas = array(":pseudoconnect"=>$pseudoconnect,":mdpconnect"=> $mdpconnect)
try{
  $prepare = $bdd->prepare($prep_requser);
  $prepare->execute($datas);
  $arr_Resultat = $prepare->fetchAll();
}catch(Exception $e){
  echo "Erreur :".$e->getMessage();
}


//si la requete a retourné un  résultat et que count retourne 1 ou plus..
$userexist = !empty($arr_Resultat) && count($arr_Resultat)>0 ? true : false;

//----------------------------
//le temps des tests :
//----------------------------
echo "<pre>La requete est : ".$sql."</pre>";
echo "Les datas sont :<br><pre>";
print_r($datas);
echo "</pre>";


//----------------------------

if($userexist){
  echo "l'utilisateur existe";
   
}else{
  echo "l'utilisateur n'existe pas";
}

0
flo39400 Messages postés 596 Date d'inscription   Statut Membre Dernière intervention   21
 
Bonsoir, j'ai un code erreur si je test votre code, je vais modifier juste le miens et faire des echo comme vous.

code erreur: Parse error: syntax error, unexpected 'try' (T_TRY)
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > flo39400 Messages postés 596 Date d'inscription   Statut Membre Dernière intervention  
 
J'ai juste oublié un point-virgule à la ligne avant le try
0
flo39400 Messages postés 596 Date d'inscription   Statut Membre Dernière intervention   21
 
Donc je vous affiche le résultat:

Donc le code erreur: Notice: Undefined variable: prep_requser

Puis le reste:

Erreur :SQLSTATE[42000]: Syntax error or access violation: 1065 Query est vide

La requete est : SELECT * FROM membres WHERE pseudo = :pseudoconnect AND motdepasse = :mdpconnect

Les datas sont :

Array
(
[:pseudoconnect] => DieuTopGun
[:mdpconnect] => 10eec3f9771022d3aacc8bbda28be42548a6a022
)

l'utilisateur n'existe pas

Pourtant sais l’utilisateur excite vraiment donc voila....
0
flo39400 Messages postés 596 Date d'inscription   Statut Membre Dernière intervention   21
 
J'ai modifier le code car $sql n'est pas affecter.


$prep_requser = "SELECT * FROM membres WHERE pseudo = :pseudoconnect AND motdepasse = :mdpconnect";
$datas = array(":pseudoconnect"=>$pseudoconnect,":mdpconnect"=> $mdpconnect);
try{
  $prepare = $bdd->prepare($prep_requser);
  $prepare->execute($datas);
  $arr_Resultat = $prepare->fetchAll();
}catch(Exception $e){
  echo "Erreur :".$e->getMessage();
}


//si la requete a retourné un  résultat et que count retourne 1 ou plus..
$userexist = !empty($arr_Resultat) && count($arr_Resultat)>0 ? true : false;

//----------------------------
//le temps des tests :
//----------------------------
echo "<pre>La requete est : ".$sql."</pre>";
echo "Les datas sont :<br><pre>";
print_r($datas);
echo "</pre>";


//----------------------------

if($userexist){
  echo "l'utilisateur existe";
   
}else{
  echo "l'utilisateur n'existe pas";
}
0
flo39400 Messages postés 596 Date d'inscription   Statut Membre Dernière intervention   21
 
Et la écran blanc pu rien....
Adresse de destination http://localhost/2017/profil.php?id=
Normalement l'id utilisateur est récupérer, la non... pourtant pas de message d'erreur...
0
flo39400 Messages postés 596 Date d'inscription   Statut Membre Dernière intervention   21
 
J'avance mais je suis tombé sur une autre erreur, vraiment je comprend pas dès que la solution est trouvé sa marche pas quand même....

if(isset($_POST['formconnexion']))
{
	$pseudoconnect = htmlspecialchars($_POST['pseudoconnect']);
	$mdpconnect = sha1($_POST['mdpconnect']);
	if(!empty($pseudoconnect) AND !empty($mdpconnect))
	{
$prep_requser = "SELECT * FROM membres WHERE pseudo = :pseudoconnect AND motdepasse = :mdpconnect";
$datas = array(":pseudoconnect"=>$pseudoconnect,":mdpconnect"=> $mdpconnect);
try{
  $prepare = $bdd->prepare($prep_requser);
  $prepare->execute($datas);
  $arr_Resultat = $prepare->fetchAll();
}catch(Exception $e){
  echo "Erreur :".$e->getMessage();
}


//si la requete a retourné un  résultat et que count retourne 1 ou plus..
$userexist = !empty($arr_Resultat) && count($arr_Resultat)>0 ? true : false;


if($userexist)
		{
		$prep_insertip = "UPDATE membres SET adresse_ip = ? WHERE id = ?";	
		try{
			$insertip = $bdd->prepare($prep_insertip);
			$insertip->execute(array($_SERVER['REMOTE_ADDR'], $_SESSION['id']));
		}catch(Exception $e){
			echo "Erreur :".$e->getMessage();
		}	
			
		$insertip = $bdd->prepare("UPDATE membres SET adresse_ip = ? WHERE id = ?");
		$insertip->execute(array($_SERVER['REMOTE_ADDR'], $_SESSION['id']));
		
		
			if(isset($_POST['rememberme']))
			{
			setcookie('pseudo',$pseudoconnect,time()+5*60,null,null,false,true);
			setcookie('password',$mdpconnect,time()+5*60,null,null,false,true);
			}
			$userinfo = $requser->fetch();

			$_SESSION['id'] = $userinfo['id'];
			$_SESSION['pseudo'] = $userinfo['pseudo'];
			$_SESSION['mail'] = $userinfo['mail'];
			$_SESSION['rang'] = $userinfo['rang'];
			$_SESSION['avatar'] = $userinfo['avatar'];
			header("Location: index.php?id=".$_SESSION['id']);
		}
		else
		{
			$erreur = "Mauvais pseudo ou mot de passe !";
		}
	}
	else
	{
		$erreur = "Tous les champs doivent être complétés !";
	}
}



Code erreur:

1 Notice: Undefined variable: requser in
2 Fatal error: Call to a member function fetch() on null in

ligne 80 au niveau du fetch (
$userinfo = $requser->fetch();
)
0
flo39400 Messages postés 596 Date d'inscription   Statut Membre Dernière intervention   21
 
Bon je vais pas y modifier je verrais sa plus tard...
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
La variable $requser n'est plus utilisée.
A la place... toutes les données de l'utilisateurs sont déjà présentes (grâce au fetchAll) dans un array
 $arr_Resultat = $prepare->fetchAll();

fais donc un print_r($arr_Resultat) et regarde ce qu'il contient.... tout y est !
0