[RESOLU] problème construction update

Eléphant du PHP | 345 Messages

08 sept. 2021, 18:36

Bonjour,
je n'arrive pas à mettre à jour sur le dernier update :cry:


<?php
$sql = "UPDATE membres SET pos_x = pos_x, pos_y= pos_y+1, dep_vehicule= dep_vehicule-1, pos_x_vehicule= pos_x, pos_y_vehicule= pos_y WHERE id=:id";
$pdostat = $bdd->prepare($sql);
$pdostat->bindvalue(':id',$id ,PDO::PARAM_INT);
$pdostat->execute();

$pdostat = $bdd->prepare('SELECT * FROM membres WHERE id = :id);
$pdostat->bindvalue(':id', $id, PDO::PARAM_INT);
$pdostat->execute();
$resultat = $pdostat->fetch();
if (!empty($resultat)) {
$pos_x =  $resultat['pos_x'];
$pos_y =  $resultat['pos_y'];
$id_captif = $resultat['id_captif'];

}

$pdostat = $bdd->prepare("UPDATE membres SET pos_x = :pos_x AND pos_y = :pos_y WHERE id = :id_captif");
$pdostat->bindvalue(':id_captif', $resultat['id_captif'], PDO::PARAM_INT);
$pdostat->bindvalue(':pos_x', $resultat['pos_x'], PDO::PARAM_INT);
$pdostat->bindvalue(':pos_y', $resultat['pos_y'], PDO::PARAM_INT);
header('Location:map_maj.php');
exit;
?>

ynx
Mammouth du PHP | 586 Messages

08 sept. 2021, 20:18

Bonjour,

Il y a une erreur de syntaxe dans le code : il manque un guillemet pour fermer la chaîne de caractère qui contient la deuxième requête.
$pdostat = $bdd->prepare('SELECT * FROM membres WHERE id = :id');
Si ce n'est pas déjà le cas, tu devrais activer l'affichage des erreurs PHP en développement pour avoir un message indiquant l'erreur et le numéro de la ligne où elle s'est produite.

Eléphant du PHP | 345 Messages

08 sept. 2021, 23:39

pour le guillemet, sans doute un loupé avec le copier/coller.
je n'ai aucun message d'erreurs. le perso se déplace bien une case au nord et la table se met à jour. Mais pas pour son "captif" (qui l'accompagne lors de chaque déplacement)...
les var_dump des 3 variables donnent bien ce qui est existant
C:\wamp64\www\move_N_apied.php:43:string '468' (length=3) pour $pos_x

C:\wamp64\www\move_N_apied.php:44:string '67' (length=2) pour $pos_y

C:\wamp64\www\move_N_apied.php:45:string '18' (length=2) pour l'id du joueur captif

Mammouth du PHP | 2703 Messages

08 sept. 2021, 23:54

sans exécuter la requête, il ne faut pas s'attendre à ce qu'il y ai des changements.

Eléphant du PHP | 345 Messages

09 sept. 2021, 10:18

$pdostat = $bdd->prepare("SELECT * FROM membres WHERE id = :id");
$pdostat->bindvalue(':id', $id, PDO::PARAM_INT);
$pdostat->execute();
$resultat = $pdostat->fetch();
if (!empty($resultat)) {
$pos_x =  $resultat['pos_x'];
$pos_y =  $resultat['pos_y'];
$id_captif = $resultat['id_captif'];
}
	
$pdostat = $bdd->prepare("UPDATE membres SET pos_x = :pos_x , pos_y = :pos_y WHERE id =:id_captif");

$pdostat->bindvalue(':id_captif', $resultat['id_captif'], PDO::PARAM_INT);
$pdostat->bindvalue(':pos_x', $resultat['pos_x'], PDO::PARAM_INT);
$pdostat->bindvalue(':pos_y', $resultat['pos_y'], PDO::PARAM_INT);
$pdostat->execute();


header('Location:map_maj.php');
exit;
?>