Update sur deux tables

Résolu
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" ??????????

3 réponses

  1. 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 ?
    1. Modérateur
      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...
  2. 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.
    1. Modérateur
      Bonjour,
      Tu as oublié le execute pour ta seconde requete