Update sur deux tables

Résolu/Fermé
nestor94 Messages postés 74 Date d'inscription dimanche 28 février 2021 Statut Membre Dernière intervention 14 octobre 2021 - Modifié le 6 mars 2021 à 18:05
nestor94 Messages postés 74 Date d'inscription dimanche 28 février 2021 Statut Membre Dernière intervention 14 octobre 2021 - 7 mars 2021 à 23:54
Bonjour,
le script suivant fonctionne et je voudrais que les deux valeurs (pos_x et pos_y)soient aussi mises à jour dans une autre table (map) ! J'ai un peu vu ici et là qu'avec un INNER JOIN ca semble fonctionner mais je suis un peu perdu au niveau du "lien" à mettre dans la seconde table ainsi que la requete finale.

<?php
session_start();
require_once 'config.php';

$pos_x_min = 0;
$pos_x_max = 500;
$pos_y_min = 0;
$pos_y_max = 500;

$pos_x = mt_rand($pos_x_min,$pos_x_max);
$pos_y = mt_rand($pos_y_min,$pos_y_max);
$id = !empty($_SESSION['id']) ? $_SESSION['id'] : NULL;

    $pdostat = $bdd->prepare('UPDATE membres SET pos_x= :pos_x, pos_y= :pos_y WHERE id= :id');
    $pdostat->bindvalue(':pos_x',$pos_x, PDO::PARAM_INT);
    $pdostat->bindvalue(':pos_y',$pos_y, PDO::PARAM_INT);
    $pdostat->bindValue(':id', $id, PDO::PARAM_INT);
    $pdostat->execute();
    $_SESSION['pos_x'] = $pos_x; 
    $_SESSION['pos_y'] = $pos_y; 
    header('Location: page_membre.php');

    exit; 

?>


je pensais mettre cela en requete ?
    $pdostat = $bdd->prepare('UPDATE membres SET membres.pos_x= :map.pos_x, membres.pos_y= :map.pos_y FROM membres INNER JOIN map ON membres.id = map.id WHERE id= :id');


par contre le "membre.id" et "map.id" ??????????
A voir également:

3 réponses

nestor94 Messages postés 74 Date d'inscription dimanche 28 février 2021 Statut Membre Dernière intervention 14 octobre 2021
7 mars 2021 à 08:08
J'ai mal formulé mon besoin, en fait c'est un insert que je dois réaliser dans une seconde table.
<?php
session_start();
require_once 'config.php';

$pos_x_min = 0;
$pos_x_max = 500;
$pos_y_min = 0;
$pos_y_max = 500;

$pos_x = mt_rand($pos_x_min,$pos_x_max);
$pos_y = mt_rand($pos_y_min,$pos_y_max);
$id = !empty($_SESSION['id']) ? $_SESSION['id'] : NULL;

    $pdostat = $bdd->prepare('UPDATE membres SET pos_x= :pos_x, pos_y= :pos_y WHERE id= :id');
    $pdostat->bindvalue(':pos_x',$pos_x, PDO::PARAM_INT);
    $pdostat->bindvalue(':pos_y',$pos_y, PDO::PARAM_INT);
    $pdostat->bindValue(':id', $id, PDO::PARAM_INT);
    $pdostat->execute();
    $_SESSION['pos_x'] = $pos_x; 
    $_SESSION['pos_y'] = $pos_y; 
	
	$sql = "INSERT INTO map (pos_x, pos_y) VALUES(:pos_x, :pos_y);";
	try{
    $prep =  $bdd->prepare($sql);
    $prep ->bindvalue(':pos_x',$pos_x, PDO::PARAM_INT);
    $prep->bindvalue(':pos_y',$pos_y, PDO::PARAM_INT);
	
	header('Location: page_membre.php');
    exit; 
 }catch(Exception $e){
  //en cas d'erreur dans la requete
  echo "Erreur " . $e->getMessage();
               }     
?> 


pas de message erreur et la table map est non renseignée.
0
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
7 mars 2021 à 14:22
Bonjour,
Tu as oublié le execute pour ta seconde requete
0
nestor94 Messages postés 74 Date d'inscription dimanche 28 février 2021 Statut Membre Dernière intervention 14 octobre 2021
7 mars 2021 à 19:41
Oups, oui...

J'ai quand meme une autre erreur

Erreur SQLSTATE[HY000]: General error: 1364 Field 'ressource' doesn't have a default value

il va gueuler pour tous les champs de la table map... pas encore concernés si j'ose dire ?
0
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
7 mars 2021 à 21:16
bah il te dit que tu as configuré le champ sans valeur par défaut ...donc soit tu en configure un soit tu le mets dans ta requête...
0
nestor94 Messages postés 74 Date d'inscription dimanche 28 février 2021 Statut Membre Dernière intervention 14 octobre 2021
7 mars 2021 à 23:54
C'est bon ça marche.
0