Page 1 sur 1

Fatal error

Posté : 10 août 2011, 19:08
par poliboolod
Bonjour

Je suis en train de faire un script de la page d'inscription a l'espace membres (cf dernier tp du livre de php).
Je code et je teste le formulaire marche parfaitement, je clique sur le bouton valider.
Et la j'ai un fatal error:

Fatal error: Call to a member function closeCursor() on a non-object in /var/www/poliboolold.fr/htdocs/membres_inscription.php on line 59

Comme a mon habitude, je fait une recherche sur google pour essayer de trouver qu'es qui ne va pas !
Je trouve qu'il faut seulement mettre des closeCursor lorsqu'on fait un ou plusieur fetch . Comme j'ai fait un fetch a la requete ou il y'a le problème . Ca ne m'avance pas

Voila merci d'avance a ceux qui peuvent m'aider
Voici le code:
<?php
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
   <head>
       <title>poliboolold.fr</title>
       <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
   </head>
   <body>

<?php

try
{
	if(!isset( $_POST['pseudo'])AND !isset( $_POST['mdp']) AND !isset( $_POST['mdpdouble']) AND !isset( $_POST['email']))
	{
		if(!isset( $_SESSION['id']) AND !isset( $_SESSION['pseudo']))
		{
			?>
			<form method="post" action="membres_inscription.php">
			
			<p>
			Pseudo <input type="text" name="pseudo"/>
			mdp <input type="password" name="mdp"/>
			mdpdouble <input type="password" name="mdpdouble"/>
			email <input type="text" name="email"/>
			<input type="submit" value="Valider" />

<?php
		}
	}
	
	elseif(isset ($_SESSION['id']) AND !isset($_SESSION['pseudo']))
	{
		echo"connecté";
	}

	elseif ($_POST['mdp']!= $_POST['mdpdouble'])
	{
		    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
   			 $bdd = new PDO('mysql:host=**********;dbname=***************', '***********', '***********', $pdo_options);
		$req= $bdd->prepare('SELECT id FROM membres WHERE pseudo=:pseudo AND pass=:pass');
		$req->execute(array('pseudo'=> $_POST['pseudo'],'pass'=> $_POST['mdp']));
		$resultat= $req->fetch();
			
			if(!$resultat)
{
		if (preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $_POST['email']))
		{

echo"recommencez";
}
}
}
		else
		{
			$pass_hache = sha1($_POST['mdp']);
			$req->closeCursor();
			$requete = $bdd->prepare('INSERT INTO membres(pseudo, pass, email, date_inscription) VALUES(:pseudo, :pass, :email, CURDATE())');
			$requete->execute(array('pseudo'=> $_POST['pseudo'], 'pass'=> $_POST['pass_hache'], 'email'=> $_POST['email']));
			echo"Inscrit";
			$requete->closeCursor();
		}
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
?>

   </body>
</html>

Re: Fatal error

Posté : 10 août 2011, 19:10
par poliboolol
Pardon pour le code (comme j'etait en invité, j'ai pas pu éditer mon message)

Code : Tout sélectionner

<?php session_start(); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" > <head> <title>poliboolold.fr</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> </head> <body> <?php try { if(!isset( $_POST['pseudo'])AND !isset( $_POST['mdp']) AND !isset( $_POST['mdpdouble']) AND !isset( $_POST['email'])) { if(!isset( $_SESSION['id']) AND !isset( $_SESSION['pseudo'])) { ?> <form method="post" action="membres_inscription.php"> <p> Pseudo <input type="text" name="pseudo"/> mdp <input type="password" name="mdp"/> mdpdouble <input type="password" name="mdpdouble"/> email <input type="text" name="email"/> <input type="submit" value="Valider" /> <?php } } elseif(isset ($_SESSION['id']) AND !isset($_SESSION['pseudo'])) { echo"connecté"; } elseif ($_POST['mdp']!= $_POST['mdpdouble']) { $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; $bdd = new PDO('mysql:host=**********;dbname=***************', '***********', '***********', $pdo_options); $req= $bdd->prepare('SELECT id FROM membres WHERE pseudo=:pseudo AND pass=:pass'); $req->execute(array('pseudo'=> $_POST['pseudo'],'pass'=> $_POST['mdp'])); $resultat= $req->fetch(); if(!$resultat) { if (preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $_POST['email'])) { echo"recommencez"; } } } else { $pass_hache = sha1($_POST['mdp']); $req->closeCursor(); $requete = $bdd->prepare('INSERT INTO membres(pseudo, pass, email, date_inscription) VALUES(:pseudo, :pass, :email, CURDATE())'); $requete->execute(array('pseudo'=> $_POST['pseudo'], 'pass'=> $_POST['pass_hache'], 'email'=> $_POST['email'])); echo"Inscrit"; $requete->closeCursor(); } } catch(Exception $e) { die('Erreur : '.$e->getMessage()); } ?> </body> </html>

Re: Fatal error

Posté : 10 août 2011, 20:27
par moogli
salut
Pardon pour le code (comme j'etait en invité, j'ai pas pu éditer mon message)
avec les balises
 ça aurait était mieux :)

le message t'indique que $req n'est pas un objet. 

Pourquoi ?

Parce que tu fait la connexion et la requête dans le elseif et que tu fait le closecursor() dans le else, il faut mettre le closecurso dans le elseif :)



@+

Re: Fatal error

Posté : 10 août 2011, 20:38
par poliboolol
Je l'ai fait et ca me met:
Fatal error: Call to a member function prepare() on a non-object in /var/www/poliboolold.fr/htdocs/membres_inscription.php on line 59

Re: Fatal error

Posté : 10 août 2011, 21:00
par moogli
même problème la connexion PDO n'est pas faite quand tu est DANS le else vu que tu ne passe pas dans le elseif !!!!

fait ta connexion PDO avant le if ....
@+