Bonjour,

Je voudrais avoir votre avis sur cette méthode de requête préparé :


        if(isset($_GET['id'])){
            $id = $db->quote($_GET['id']);
            $select = $db->prepare("UPDATE users SET avatar=$avatar, username=$username, slug=$slug, activation=$activation WHERE id=$id");
			$select->execute(array
				(
					'avatar'=>$avatar, 
					'username'=>$username, 
					'slug'=>$slug, 
					'activation'=>$activation
				)
			);
        }


Cette requête es t'elle bien construite j'ai tester elle fonctionne j'ai bien mon update mai la requête préparé n'es t'elle pas prévue pour évité de mettre des variables dans le UPDATE ou SELECT etc....

La où est le soucis est que je ne vois pas du-tout comment l'écrire !

Pouvez vous me montré comment faire ensuite je pourrai me débrouiller Smiley biggrin voila en vous remerciant.
Le but du prepare est effectivement d'une part de ne pas inclure de variable à la requête directement, mais également de pouvoir réutiliser la requête en ne changeant que la valeur des paramètres à chaque exécution ce qui est utile dans des traitements en boucle.

Dans ton cas, il faudrait transformer le code vers quelque chose comme ça:

$select = $db->prepare("UPDATE users SET avatar=:avatar, username=:username, slug=:slug, activation=:activation WHERE id=:id");
			$select->execute(array
				(
					':avatar'=>$avatar, 
					':username'=>$username, 
					':slug'=>$slug, 
					':activation'=>$activation
				)
			);


Tu trouves toutes les informations nécessaires dans la documentation php ici: http://php.net/manual/fr/pdo.prepare.php
Modifié par jacqueminv (09 Oct 2014 - 11:18)
Merci de ta réponse j'ai tester avant cette méthode ! mai ça ne fonctionner pas j'ai bien le setflash qui indique que la modification c'est bien déroulé mai rien n'a étais pris en compte le var_dump est égal a zero c'est pourquoi je voulais savoir si je mis prenez bien car le code que j'ai fait fonctionne mai de la bonne manière ça ne fonctionne pas.

Voici l'intégralité de ma page édite membre j'avoue être dans le flou car ça devrais fonctionner :


/*******  
* On modifie un utilisateur inscrit
********/
if(isset($_GET['id']) && isset($_POST['username']) && isset($_POST['activation']) && isset($_POST['slug']) && isset($_POST['avatar'])){
    checkCsrf();
    $slug = $_POST['slug'];
	$activation = $_POST['activation'];
    if(in_array($slug, array('modo', 'admin', 'non_actif', 'membre'))){
        $username = $db->quote($_POST['username']);
		$avatar = $db->quote($_POST['avatar']);
		$activation = $db->quote($_POST['activation']);
		$slug = $db->quote($_POST['slug']);
		$id = $db->quote($_GET['id']);
        if(isset($_GET['id'])){
            $id = $db->quote($_GET['id']);
           $select = $db->prepare("UPDATE users SET avatar=:avatar, username=:username, slug=:slug, activation=:activation WHERE id=:id");
			$select->execute(array
				(
					':avatar'=>$avatar, 
					':username'=>$username, 
					':slug'=>$slug, 
					':activation'=>$activation
				)
			);
        }	
		setFlash('L\'utilisateur a bien étais modifier !');
		header('Location:index.php#cat');
        die();
    }else{
        setFlash('Le slug ou activation n\'est pas valide', 'danger');
    }
}
/*******  
* verification de l'id
********/
if(isset($_GET['id'])){
    $id = $db->quote($_GET['id']);
    $select = $db->prepare("SELECT * FROM users WHERE id=$id");
	$select->execute(array('*'));
    if($select->rowCount() == 0){
        setFlash("Il n'y a pas d'utilisateurs avec cet ID", 'danger');
        header('Location:users_edit.php');
        die();
    }
    $_POST = $select->fetch();
}
L'appel à rowCount pour une requête SELECT n'est pas garanti par toutes les base de données. Tu as meilleur temps de récupérer le résultat et en vérifier la présence:

if ( isset($_GET['id']) ) {
    $id = $db->quote($_GET['id']);

    $query = $db->prepare("select  users where id=:id")->execute(array(':id' => $id));

    $user = $select->fetch();
    if(empty($user)){
        setFlash("Il n'y a pas d'utilisateurs avec cet ID", 'danger');
        header('Location:users_edit.php');
        die();
    }

    $user = $select->fetch();
    if(empty($user)){
        setFlash("Il n'y a pas d'utilisateurs avec cet ID", 'danger');
        header('Location:users_edit.php');
        die();
    }
}

La requête select n'est pas valide, la publication de ma réponse ne passe pas lorsque je mets un select avec la table...
Attention tu avais fait la même erreur par rapport au paramètre dans la requête SQL
Modifié par jacqueminv (13 Oct 2014 - 12:22)