Update sur deux tables [Résolu]

Signaler
Messages postés
73
Date d'inscription
dimanche 28 février 2021
Statut
Membre
Dernière intervention
6 mai 2021
-
Messages postés
73
Date d'inscription
dimanche 28 février 2021
Statut
Membre
Dernière intervention
6 mai 2021
-
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

Messages postés
73
Date d'inscription
dimanche 28 février 2021
Statut
Membre
Dernière intervention
6 mai 2021

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.
Messages postés
32956
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 juin 2021
3 558
Bonjour,
Tu as oublié le execute pour ta seconde requete
Messages postés
73
Date d'inscription
dimanche 28 février 2021
Statut
Membre
Dernière intervention
6 mai 2021

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 ?
Messages postés
32956
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 juin 2021
3 558
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...
Messages postés
73
Date d'inscription
dimanche 28 février 2021
Statut
Membre
Dernière intervention
6 mai 2021

C'est bon ça marche.