Page 1 sur 1

mysql_query

Posté : 24 janv. 2008, 12:01
par bruno.rotrou
re slt

j'avance (grâce a votre aide) dans ma compréhension de ces languages mais j'ai encore beaucoup de lacunes et pour preuve le code qui suis:
<?php session_start() ?>
<?php
//renvois utilisateur ver page acceuil si pas logger
if(empty($_POST['utilisateur']) or empty($_POST['pass']))
{header("location:accueil.html");echo"vous devez vous logger";}
else{echo"champ remplis<br>";
//recuperation de var email (id utilisateur) pour la session complete
$_SESSION['email']=$_POST['utilisateur'];
//connexion base de donnee fetetout//
require_once('Connections/conexion_bd_fetetout.php');
// verification de l'utilisateur si il est enregistré
$requete= "SELECT email FROM coordonnees WHERE email='$_SESSION[email]'" ;
//envois requete
$resultat=mysql_query($requete,$BD_membre)or die ("Requete invalide");

echo"<br>var session utilisateur : ".$_SESSION['email'];

if($resultat){echo"<br>l'utilisateur existe";}else{echo"<br>l'utilisateur n'existe pas";}
}//fin else condition remplissage champ
?>

lorque je remplis mon formulaire avec une adresse mail qui n'existe pas dans la BD il me renvois qu'elle existe quand meme?????
la condition if qui renvois cette valeur me semble pourtant bien ecrite, mais j'ai des doutes sur ce que me renvois $resultat peut etre que ca me renvois true meme si ds la BD l'email n'existe pas ??
merci

Posté : 24 janv. 2008, 12:11
par d0m
salut,

c'est normal c'est parce que tu fais une mauvaise vérification :
$resultat=mysql_query($requete,$BD_membre)or die ("Requete invalide");

if($resultat){echo"<br>l'utilisateur existe";}else{echo"<br>l'utilisateur n'existe pas";}

la fonction mysql_query renvoie false si la requête a échoué,
or là elle n'échoue pas elle te renvoie juste aucune ligne.
il faut compter le nombre de ligne de ce résultat et regarder si celui ci vaut 0.

MERCI

Posté : 24 janv. 2008, 12:24
par bruno.rotrou
merci
je me douter qu'il y avait un truc du genre mais impossible de le matérialiser
c'est fait grâce a ton aide
merci
A+

Posté : 24 janv. 2008, 12:29
par Ryle
Alors déjà une chose méga super hyper supra importante : l'indentation du code. L'indentation, c'est le décalage du code à chaque nouvelle structure (if, for, while, etc.) qui te permet de voir en un coup d'oeil ce sur quoi elle porte :)
if (empty($_POST['utilisateur']) or empty($_POST['pass'])) {
    header("location:accueil.html");
    echo"vous devez vous logger";
} 
else {
    ....
}
Autre chose importante, les opérateur "OR" et "||" ne sont pas rigoureusement identique (la différence étant dans leur ordre de priorité). Si en sql tu ne peux utiliser que "OR", en php, à moins de savoir précisément ce que tu attends, je te recommande d'utiliser "||" pour l'opérateur OU (idem pour "&&" et "AND" :))
if (empty($_POST['utilisateur']) || empty($_POST['pass'])) 
Concernant le header(), pour que celui-ci fonctionne correctement, il ne faut absolument pas envoyer d'infos au navigateur au préalable. Donc pas de echo, pas de code html, pas le moindre espace en dehors des balises <?php ... ?>, et pas non plus de retour à la ligne :
Au lieu de :
<?php session_start() ?> 
<?php 
//renvois utilisateur ver page acceuil si pas logger 
if (...)
Fais simplement
<?php session_start(); 
//renvois utilisateur ver page acceuil si pas logger 
if (...)
Il n'est pas non plus utile d'afficher un message ensuite, puisque le navigateur effectuera une redirection, l'utilisateur ne le verra pas :)

Enfin, concernant ton problème, mysql_query() ne retourne FAUX qu'en qu'à d'erreur d'exécution. Dans tous les autres cas, que la requête ait retournée une valeur ou pas (ce qui n'est pas une erreur, juste le fait qu'il n'y a pas de résultat), le résultat sera une Ressource qu'il te faudra ensuite parcourir (avec les fonctions mysql_fetch_assoc(), mysql_fetch_object(), ... ) pour savoir si oui ou non elle contient des enregistrements :) Tu peux aussi utiliser mysql_num_rows() pour savoir combien d'enregistrement ont été retournés :)
<?php session_start(); 
//renvois utilisateur ver page acceuil si pas logger 
if (empty($_POST['utilisateur']) || empty($_POST['pass'])) {
  header("location:accueil.html");
  exit(); // ce exit indique qu'il n'est pas utile d'exécuter la suite du code 
} 
else{
  echo "champ remplis<br>"; 
  //recuperation de var email (id utilisateur) pour la session complete 
  $_SESSION['email'] = $_POST['utilisateur']; 
  //connexion base de donnee fetetout// 
  require_once('Connections/conexion_bd_fetetout.php'); 
  // verification de l'utilisateur si il est enregistré 
  $requete= "SELECT email FROM coordonnees WHERE email='$_SESSION[email]'" ; 
  //envois requete 
  $resultat=mysql_query($requete,$BD_membre)or die ("Requete invalide"); 

  echo"<br>var session utilisateur : ".$_SESSION['email']; 

  if (mysql_num_rows($resultat) > 0){
    echo"<br>l'utilisateur existe";
  }
  else {
    echo "<br>l'utilisateur n'existe pas";
  } 

}//fin else condition remplissage champ 
?> 

quelle lecon!!!

Posté : 24 janv. 2008, 12:45
par bruno.rotrou
merci pour toute cette explication
j'avais finalement reussi a faire fonctionner le code avec l'aide du précédant éléphant du php en utilisant mysql_num_rows.

sauf que mon code était beaucoup moins propre.

tu me conseil donc de ne pas diviser les balises php dans une même page de code.
c'était pour moi une question de lisibilité de séparer la partie session du reste.
pendant que je vous tient une petite question doit on écrire?
 echo("hjjsdfff");
ou
echo"hghh";
car je vois les deux et les deux fonctionne personnellement je trouve qu'avec les parenthèses que c'est plus claire.
une autre rapidement:lol:
header est elle la seule façon de rediriger vers une autre page de manière automatique (sans lien du type html?
merci encore
A+

Posté : 24 janv. 2008, 13:07
par Ryle
Pour le echo, y a pas de règles.. personnellement je trouve que les parenthèses surchargent inutilement pour la lecture donc j'en mets pas... par contre je colle un espace pour aérer un peu ;)
echo "hjjsdfff";
Pour le header() c'est effectivement la seule solution en php, mais il est également possible de faire des redirection en javascript et html. Ceci dit, il vaut quand même mieux qu'elle soit faite au niveau du serveur pour être sur de sa compatibilité quelque soit le navigateur du visiteur :)

merci ryle

Posté : 24 janv. 2008, 13:12
par bruno.rotrou
A+

Posté : 24 janv. 2008, 13:52
par Truc
Juste en passant... à l'avenir essaie d'utiliser des titres un peu plus précis :wink: