Page 1 sur 1

Probleme function setFetchMode()

Posté : 24 mars 2011, 12:01
par prohand
Voilà j'ai une page de login mais il m'affiche ce message :

Code : Tout sélectionner

( ! ) Fatal error: Call to a member function setFetchMode() on a non-object in C:\wamp\www\pages membres\login.php on line 9 Call Stack # Time Memory Function Location 1 0.0002 375256 {main}( ) ..\login.php:0
Voici la page :
<?php
include('config.php');

if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['pass'])) {
  extract($_POST);
  
  		$connexion = new PDO('mysql:host='.$PARAM_hote.';port='.$PARAM_port.';dbname='.$PARAM_nom_bd, $PARAM_utilisateur, $PARAM_mot_passe);
		$sql=$connexion->query("SELECT login,pwd WHERE membres"); // on va chercher tous les membres de la table qu'on trie par ordre croissant
		$sql->setFetchMode(PDO::FETCH_OBJ); // on dit qu'on veut que le résultat soit récupérable sous forme d'objet
		if( $data = $sql->fetch() ) 

  if($data['pwd'] != $pass) {
    echo '<p>Mauvais login / password. Merci de recommencer</p>';
    include('form.html'); // On inclut le formulaire d'identification
    exit;
  }
  else {
    session_start();
    $_SESSION['login'] = $login;
    
        echo '<center>Vous etes connecté</center>';
	    echo '<center><p style="color:green">Connexion réussi! </p></center>';
		echo '<center><p style="color:red"> Vous serez automatiquement redirigé dans 4 secondes.</p></center>';
		echo '<center><p style="blue"> Si vous n êtes pas redirigé veuillez cliquer sur le lien si dessous </p></center>';
        echo '<center><p><a href="./index.php">Accès Membre</a></p></center>';
		 header('Refresh: 4; membres.php');
  }   
}
else {
  echo '<center><p>Vous avez oublié de remplir un champ.</p></center>';
   include('form.html'); // On inclut le formulaire d'identification
   exit;
}


?>
Merci de votre aide

Re: Probleme function setFetchMode()

Posté : 24 mars 2011, 12:14
par prohand
Maintenant j'ai cette erreur :

Code : Tout sélectionner

Fatal error: Cannot use object of type stdClass as array in C:\wamp\www\pages membres\login.php on line 12
<?php
include('config.php');

if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['pass'])) {
  extract($_POST);
  
  		$connexion = new PDO('mysql:host='.$PARAM_hote.';port='.$PARAM_port.';dbname='.$PARAM_nom_bd, $PARAM_utilisateur, $PARAM_mot_passe);
		$sql=$connexion->query("SELECT login,pwd FROM membres"); // on va chercher tous les membres de la table qu'on trie par ordre croissant
		$sql->setFetchMode(PDO::FETCH_OBJ); // on dit qu'on veut que le résultat soit récupérable sous forme d'objet
		if( $data = $sql->fetch() ) 

  if($data['pwd'] != $pass) {
    echo '<p>Mauvais login / password. Merci de recommencer</p>';
    include('form.html'); // On inclut le formulaire d'identification
    exit;
  }
  else {
    session_start();
    $_SESSION['login'] = $login;
    
        echo '<center>Vous etes connecté</center>';
	    echo '<center><p style="color:green">Connexion réussi! </p></center>';
		echo '<center><p style="color:red"> Vous serez automatiquement redirigé dans 4 secondes.</p></center>';
		echo '<center><p style="blue"> Si vous n êtes pas redirigé veuillez cliquer sur le lien si dessous </p></center>';
        echo '<center><p><a href="./index.php">Accès Membre</a></p></center>';
		 header('Refresh: 4; membres.php');
  }   
}
else {
  echo '<center><p>Vous avez oublié de remplir un champ.</p></center>';
   include('form.html'); // On inclut le formulaire d'identification
   exit;
}


?>
J'ai modifié le where par un from.

Merci

Re: Probleme function setFetchMode()

Posté : 24 mars 2011, 12:18
par prohand
J'ai modifié sa :

if($data['pwd'] != $pass) {
Par sa :
if($data->pwd==$pass) {
Mais il me dit mauvais login alors que c'est bien ce qu'il y a dans la bdd.

Merci

Re: Probleme function setFetchMode()

Posté : 24 mars 2011, 12:27
par moogli
Salut,

Alors le 1er message était du a ta requete foireuse (comme tu l'anremarqué). Pour eviter ces problemes test si le retour du query est different de false !

Ton second probleme est du au fait que tu demande un objet et que tu utilise un tableau donc php râle c'est normal :)

Tu doit utiliser $data->login et non $data['login'].

Je pense que tu n'a pas bien saisis le code que utilise je te conseil de lire un peu de doc sur la poo (programmation orienté objet et sur l'utilisation de pdo, dont les differents mode anmettre dans le setfetchmode ;) )

@+

Re: Probleme function setFetchMode()

Posté : 24 mars 2011, 12:35
par prohand
Voilaà sa fonctionne en ayant modifié le code par :
<?php
include('config.php');

if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['pass'])) {
  extract($_POST);
  
  		$connexion = new PDO('mysql:host='.$PARAM_hote.';port='.$PARAM_port.';dbname='.$PARAM_nom_bd, $PARAM_utilisateur, $PARAM_mot_passe);
		$sql=$connexion->query("SELECT login,pwd FROM membres"); // on va chercher tous les membres de la table qu'on trie par ordre croissant
		$sql->setFetchMode(PDO::FETCH_OBJ); // on dit qu'on veut que le résultat soit récupérable sous forme d'objet
		if( $data = $sql->fetch() ) 
{
  if($data->pwd==$pass) 
  {
     if($data->login==$login) 
        {
            $sql->closeCursor();
		    echo("login OK");
		    return true;
		}
			else
				{
					echo("Le nom d'utilisateur n'est pas correct");
				}
		}
			else
			{
				echo("Le mot de passe n'est pas correct");
			}
				
		}
		$sql->closeCursor();
		return false;
	}
	?>
<form action="./login.php" method="post">
<center><img src="images/webmail.png"> 
<TABLE BORDER="1"><tr><th><center>Login : </center><input type="text" name="login" value="" /></th></tr><br />
    <tr><th><center>Mot De Passe : </center><input type="password" name="pass" value="" /></th></tr><br />
    <tr><th><input type="submit" value="envoyer"></tr></th>
</form><center></TABLE> </center>

Re: Probleme function setFetchMode()

Posté : 24 mars 2011, 18:46
par stealth35
pourquoi tu fais pas fetchObjet ?
et n'oublie pas la gestion des erreurs : http://www.php.net/manual/fr/pdo.error-handling.php