8768 sujets

Développement web côté serveur, CMS

Bonjour,
Il semblait bien que j'aurai un souci avec une requête Update.
voici ce que j'ai écrit

		// on cherche le nom et prenom dans la bdd
		$cnx = new PDO('mysql:host=127.0.0.1;dbname=jumelage;charset=utf8', 'root', '');
		// teste si les nom et le prénom sont déjà dans la base de données
		$sql = $cnx->prepare("SELECT * FROM membres WHERE nom = ? AND prenom = ? ");
		$sql->execute(array($nom, $prenom));
		$result = $sql->rowCount();
		if ($result == 1){
			$user_id = $result['id'];
			$_SESSION['utilisateur'] = $prenom;
			$_SESSION['id_utilisateur'] = $result['id'];
			$pass_hache = password_hash($passwordFC, PASSWORD_DEFAULT);
			$passwordFC = $pass_hache;

			//enregistre l'adresse mail et le mot de passe 
			$sql = new PDO("UPDATE membres SET telephone = :$telephone, mail = :$mailFC, password = :$passwordFC WHERE id = $:user_id");
			$sql->execute(array(
				'id' => $user_id,
				'telephone' => $telephone,
				'mail' => $mailFC,
				'password' => $passwordFC
				));
			$message1 = "Vos données sont bien enregistrés.";
		}
		else {
			$message = "Oups! Nous ne vous avons pas trouvé dans notre base!!<br />
			Merci de vérifier votre saisie ou contacter l'administrateur";
		}

A priori la requête SELECT semble fonctionner car je n'ai pas d'erreur.
Quant à la requête Update voici les messages que j'obtiens
"Fatal error: Uncaught exception 'PDOException' with message 'could not find driver' in C:\Weblocal\Sites\Jumelage\fr\connexion\firstconnect.php:72 Stack trace: #0 C:\Weblocal\Sites\Jumelage\fr\connexion\firstconnect.php(72): PDO->__construct('UPDATE membres ...') #1 C:\Weblocal\Sites\Jumelage\index.php(170): include('C:\\Weblocal\\Sit...') #2 {main} thrown in C:\Weblocal\Sites\Jumelage\fr\connexion\firstconnect.php on line 72"

la ligne 72 :

$sql = new PDO("UPDATE membres SET telephone = :$telephone, mail = :$mailFC, password = :$passwordFC WHERE id = :$user_id");


j'ai cherché sur internet, il semble que cela vient du fichier php.ini.
Je n'ai rien modifié lorsque j'ai téléchargé la version de EasyPhp 5.6 !!
Tu as un problème dès le SELECT, la méthode rowCount ne fait que "regarder" s'il peut peut y avoir des résultats, mais elle ne retourne rien. Il faut faire un fetch si tu as un seul résultat à récupérer, sinon un fetchAll.
Ensuite, ton objet PDO sert uniquement à connecter la base de données, tu n'as donc pas besoin de recréer un objet à chaque requête.
Enfin, des petites erreurs sur l'assignation des variables dans l'execute de la requête update...
Essaie plutôt ça:

// on cherche le nom et prenom dans la bdd
$cnx = new PDO('mysql:host=127.0.0.1;dbname=jumelage;charset=utf8', 'root', '');
// teste si les nom et le prénom sont déjà dans la base de données
$sql = $cnx->prepare("SELECT * FROM membres WHERE nom = ? AND prenom = ? ");
$sql->execute(array($nom, $prenom));
// $result = $sql->rowCount();
if ($result = $sql->fetch(PDO::FETCH_ASSOC)){
	$user_id = $result['id'];
	$_SESSION['utilisateur'] = $prenom;
	$_SESSION['id_utilisateur'] = $result['id'];
	$pass_hache = password_hash($passwordFC, PASSWORD_DEFAULT);
	$passwordFC = $pass_hache;

	$cnx->closeCursor(); /*Permet de "couper" le fetch */

	//enregistre l'adresse mail et le mot de passe 
	$sql = $cnx->prepare("UPDATE membres SET telephone = :telephone, mail = :mail, password = [langue]assword WHERE id = :user_id");
	$sql->execute(array(
		'user_id' => $user_id,
		'telephone' => $telephone,
		'mail' => $mailFC,
		'password' => $passwordFC
		));
	$message1 = "Vos données sont bien enregistrés.";
}
else {
	$message = "Oups! Nous ne vous avons pas trouvé dans notre base!!<br />
	Merci de vérifier votre saisie ou contacter l'administrateur";
}

/* Si ça ne semble pas fonctionner, après le execute tu peux faire un var_dump($sql->errorInfo()); qui va retourner les erreurs à l'éxecution */

Modifié par Mathieu8337 (04 Jul 2019 - 16:02)
Modérateur
ça n'a rien à voir, quand tu crée l'objet PDO tu dois lui passer les infos de connexion, pas la requête

regarde ta requête SELECT précédente:


$cnx = new PDO('mysql:host=127.0.0.1;dbname=jumelage;charset=utf8', 'root', '');
$sql = $cnx->prepare("SELECT * FROM membres WHERE nom = ? AND prenom = ? ");
dupre51,
fais gaffe si tu fais un copier/coller, le forum a remplacé ": p" par [ langue ] dans la requête update... Con de smiley^^ Smiley langue
Modifié par Mathieu8337 (04 Jul 2019 - 16:26)
J'ai enlevé les espaces

	$sql->execute(array(
		'user_id'=>$user_id,
		'telephone'=>$telephone,
		'mail'=>$mailFC,
		'password'=>$passwordFC
		));

ça marche !!