Update sur deux tables

Résolu
nestor94 Messages postés 74 Statut Membre -  
nestor94 Messages postés 74 Statut Membre -
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. nestor94 Messages postés 74 Statut Membre
     
    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
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Bonjour,
      Tu as oublié le execute pour ta seconde requete
      0
  2. nestor94 Messages postés 74 Statut Membre
     
    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
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      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
  3. nestor94 Messages postés 74 Statut Membre
     
    C'est bon ça marche.
    0