Fatal error

poliboolod
Invité n'ayant pas de compte PHPfrance

10 août 2011, 19:08

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>

poliboolol
Invité n'ayant pas de compte PHPfrance

10 août 2011, 19:10

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>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

10 août 2011, 20:27

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 :)



@+
Il en faut peu pour être heureux ......

poliboolol
Invité n'ayant pas de compte PHPfrance

10 août 2011, 20:38

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

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

10 août 2011, 21:00

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 ....
@+
Il en faut peu pour être heureux ......