Problème avec une requête préparé...

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème avec une requête préparé...

Re: Problème avec une requête préparé...

par Invité » 02 avr. 2010, 11:57

Bon j'ai regardé les liens que vous m'avez donné et du coup j'ai repris les révisions. Alors c'est repartis j'continu à bien avancer sur le nouveau http://www.MABOUILLE.COM. Par contre j'ai bien l'impression que pour le SELECT COUNT il n'existe plus en PDO car on dirait qu'il est remplacé par count() à partir d'un SELECT qui est d'ailleur à mon sens plus logique car le SELECT COUNT avait plutot tendance à m'agacer avec le AS qui désignait une variable.... Enfin voilà mon count() péparé pour ceux que ca intéresse :wink: ...
				$reponse = $bdd->prepare("
						SELECT email
						FROM membres
						WHERE email = :email
						");
				$reponse->execute(array(
						'email' => $email
						));
				
				$reponse->setFetchMode(PDO::FETCH_OBJ);


				$reponse->execute();
				$array = $reponse->fetchALL();
				$nb_entrees = count($array);

Re: Problème avec une requête préparé...

par Dr@ke » 01 avr. 2010, 17:17

Et aussi, encore juste pour info, regarde fetch_style, ici:
http://www.php.net/manual/fr/pdostatement.fetch.php

C'est pratique aussi pour récupérer que ce que tu as besoin et/ou comment :)

Re: Problème avec une requête préparé...

par stealth35 » 01 avr. 2010, 17:13

la 2eme est plus simple (mon avis aussi), mais la 1er ne prend pas en compte l'ordre et ca c'est pratique :wink:

Re: Problème avec une requête préparé...

par Dr@ke » 01 avr. 2010, 17:09

Sinon quand tu as juste un élément à insérer tu peux utiliser: bindParam au lieu d'un array().
Le tableau étant surtout pratique quand il y a plusieurs éléments, comme toujours d'ailleurs.

Regarde par exemple dans les commentaires de cette page:
http://php.net/manual/fr/pdo.prepare.php

Pour info, il y a plusieurs syntaxes possible, regarde les deux exemples du manuel de la page ci-dessus aussi :)

(Personellement je trouve la deuxième plus simple, mais bon ceci est juste mon avis personnel)

Re: Problème avec une requête préparé...

par stealth35 » 01 avr. 2010, 17:04

c'est un attribute de champs pour mysql, comme tu dirais INDEX, ou PRIMARY KEY
http://dev.mysql.com/doc/refman/5.0/fr/ ... y-key.html

Re: Problème avec une requête préparé...

par Invité » 01 avr. 2010, 17:01

Alors MacGawel ta bien trouvé ou ca allait pas effectivement mon COUNT affiche rien, pourtant j'y suis arrivé a un moment a compter grace à une requete avec le PDO mais j'ai changé jsais pas quoi et depuis j'arrive à rien, arf! :|
C'était pourtant tellement simple ya deux jours avec mysql... J'arrive meme plus à faire une simple requete, c'est pourtant bon ca :
		// Compter à l'aide d'une requête préparée
		$reponse = $bdd->prepare("
								SELECT COUNT(*)
								AS nb_entrees
								FROM bouilleusers
								WHERE nom = :nom
								");
		$reponse->execute(array(
								'nom' => $nom
								));
		$resultat = $reponse->fetch();

		
		
echo $resultat['nb_entrees'];
Et pour répondre à Stealth35 je ne connais pas l'attribut UNIQUE tu n'aurais pas un lien vers un cour pour que je puisse savoir l'utiliser parce que j'ai regardé la doc et c'est toujours autant le flou pour moi :?

Re: Problème avec une requête préparé...

par macgawel » 01 avr. 2010, 11:37

Bonjour.

A priori, si l'email existe déjà dans la table, tu n'éxécutes pas ta requête INSERT (d'ailleurs, tu le dis toi-même :roll: )
Le problème ne vient donc pas de là...

Il manque la partie gérant l'affichage, donc on va supposer que l'erreur est dans cette partie de code, et on part de l'erreur pour remonter à la cause.

Tu t'attends à passer dans $message = 'Cet email est déjà utilisé, changez-le.' et tu arrives sur le header(...)
Donc le if ($resultat['nb_entrees'] == 0) ne te branche pas au bon endroit.
Donc, c'est que $resultat['nb_entrees'] est à 0 alors qu'il devrait être à 1 (ou plus).

Tu fais un echo $resultat['nb_entrees']; Ca te donne bien 1 quand l'email existe déjà ?

Re: Problème avec une requête préparé...

par stealth35 » 01 avr. 2010, 11:26

tu devrais utiliser l'attribut UNIQUE sur ton champs mysql, ca te ferait qu'une seule requête a exécuter :wink:

Problème avec une requête préparé...

par Invité » 01 avr. 2010, 11:04

Bonjour a tous!!! tite embrouille qui m'donne mal à la tête j'vous explique... :) J'ai récupéré un tuto pour faire la connexion à un compte client mais j'ai dus l'adapter pour être en PDO et quand j'ai modifié mes requête c'est là que ca s'est mis a déconner... Alors le symptome est que lorsque je tape un email existant il ne l'enregistre pas dans la base comme convenu mais par contre il m'envois vers ma redirection quand meme au lieu d'afficher le message disant "Cet email est déjà utilisé". J'pense que c'est ma requête INSERT INTO qui est pas bonne car j'ai lu qu'elle devrait retourner true si elle s'est bien déroulé et là j'ai l'impression qu'elle retourne rien du tout :( bouh!
<?php
  /*************************************************************************/
 /*** Création du compte client à partir de l'email et d'un mot de pass
/*************************************************************************/

// Initialisation du message de réponse
$message = null;



if (isset($_POST['email'])) 
{

	// Vos identifiants
	$email = (isset($_POST['email']) && trim($_POST['email']) != '')? Verif_magicquotes($_POST['email']) : null;

	$password = (isset($_POST['password']) && trim($_POST['password']) != '')? Verif_magicquotes($_POST['password']) : null;

	
	
	
	
	
    // Si $email et $password est déjà présent dans la base
    if (isset($email,$password)) 
    {




		$reponse = $bdd->prepare("
								SELECT COUNT(email)
								AS nb_entrees
								FROM membres
								WHERE email = :email
								");
		$reponse->execute(array(
								'email' => $email
								));
		$resultat = $reponse->fetch();

	
echo $resultat['nb_entrees'];


        if ($resultat['nb_entrees'] == 0) 
        {
		 
		// Insertion à l'aide d'une requête préparée
		$req = $bdd->prepare("
							INSERT INTO membres 
							VALUES('', :email, :password)
							");
		$req->execute(array(
							'email' => $email,
							'password' => $password
							));
	 
		$verif = $req->fetch();
        
            if ($verif == true)
            {

                 $_SESSION['email'] = $email;

            	header("Location: ../../templates/pages/etape6_recapitulatif.php");
				exit();

			}   


			
        }
        else
        {
             $message = 'Cet email est déjà utilisé, changez-le.';
        }
    }
    else 
    {
         $message = 'Les champs "email" et "Mot de passe" doivent être remplis.';
    }
}
?>