IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

insertion id client dans table externe [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 10
    Par défaut insertion id client dans table externe
    Bonjour à tous !

    Je m'excuse si le titre du topic n'est pas assez explicite ou s'il s'agit du mauvais forum pour poster.

    Je souhaite réaliser une application web sous forme de formulaire capable de simuler un devis.

    J'ai une table client qui contient un champ idclient (clé primaire + auto-incrémentation) ainsi qu'un champ prénom, nom et email.


    Nom : aaaaaaaaa.PNG
Affichages : 560
Taille : 84,3 Ko


    J'ai une table devis, qui contient un champ iddevis (clé primaire + auto-incrémentation) ainsi que le champ numéroclient que j'ai mis en relation avec le champ idclient de ma table client.

    Nom : aaddd.PNG
Affichages : 561
Taille : 68,5 Ko

    J'aimerai faire en sorte que lorsque qu'un client simule un devis, l'id du client soit inséré dans le champ numéroclient de ma table devis mais je n'ai aucune idée de comment faire.

    Voici mon php, évidemment l'insertion des données dans les champ vitre et surface ne fonctionnent pas pour l'instant.
    J'ai essayé de faire en sorte que si l'email est déjà existant, aucun tuple n'est inséré dans la table client :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    if(isset($_GET) && !empty($_GET))
      { 
    $n = $_GET['email'];
    $sql = "SELECT email FROM client WHERE email='".$n."'";
    $reponse = $dbh->query($sql);
    $donnees = $reponse->fetch();
    //si l'email n'existe pas
    if (empty($donnees['email']))
    {
      //insère infos client dans table client
     $sql = "INSERT INTO client(nom, prenom, email)
              VALUES( :nom, :prenom,:email )";
     
        $stmt = $dbh->prepare( $sql );
     
        $l = $_GET['nom'];
        $m = $_GET['prenom'];
        $n = $_GET['email'];
     
        $datas = [
         'nom' => $l,
         'prenom' => $m,
         'email' => $n
        ];
     
        $stmt->execute([
          ':nom' => $datas['nom'],
          ':prenom' => $datas['prenom'],
          ':email' => $datas['email'],
     
        ]);
    }
      //insère infos devis dans table devis
     
        $sql2 = "INSERT INTO devis(surface, vitre)
              VALUES( :surface, :vitre)";
     
        $stmt2 = $dbh->prepare( $sql2 );
     
    	  $o = $_GET['surface'];
        $p = $_GET['vitre'];
     
        $datas2 = [
        'surface' => $o,
         'vitre' => $p
        ];
     
        $stmt2->execute([
          ':surface' => $datas2['surface'],
          ':vitre' => $datas2['vitre'],
        ]);
    }
    ?>
    désolé si mon code est un peu bordélique

    merci d'avance !

  2. #2
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 10
    Par défaut
    up

    du coup j'ai trouvé grâce à la fonction lastInsertId(); je peux récupérer l'id de mon client et l'insérer dans le champ numeroclient de ma table devis

    cependant ça ne fonctionne pas lorsque mon client veut simuler un second devis, puisque j'ai fait en sorte que si l'email est déjà présent dans la table client alors aucun nouveau tuple n'est crée dans la table client du coup le lastInsertId est de 0

  3. #3
    Membre chevronné
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2018
    Messages
    537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2018
    Messages : 537
    Par défaut
    Bonsoir

    Dans ce cas il faut faire une requête select qui récupere l'id
    puis une update qui la stocke dans ta 2eme table

    tu peux mettre directement les $_GET dans ton array $data si j''en suis ton code

  4. #4
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 10
    Par défaut
    Bonsoir,

    merci beaucoup pour la réponse

    j'ai déplacé les $_GET

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    if(isset($_GET) && !empty($_GET))
    { //verifie si l'email existe
        $n = $_GET['email'];
        $sql = "SELECT email FROM client WHERE email='".$n."'";
        $reponse = $dbh->query($sql);
        $donnees = $reponse->fetch();
     
    //si l'email n'existe pas
    if (empty($donnees['email']))
    {
      //insère infos client dans table client
     $sql = "INSERT INTO client(nom, prenom, email)
              VALUES( :nom, :prenom,:email )";
     
        $stmt = $dbh->prepare( $sql );
     
        $stmt->execute([
          ':nom' => $_GET['nom'],
          ':prenom' => $_GET['prenom'],
          ':email' => $_GET['email'],
     
        ]);
     
      //insère infos devis dans table devis
        $id=$dbh->lastInsertId(); 
     
     
        $sql2 = "INSERT INTO devis(surface, vitre, numeroclient)
              VALUES( :surface, :vitre, ".$id.")";
     
        $stmt2 = $dbh->prepare( $sql2 );
     
        $stmt2->execute([
          ':surface' => $_GET['surface'],
          ':vitre' => $_GET['vitre'],
        ]);
    }
     
    //si l'email existe déjà
    else
    {
      //insère infos devis dans table devis
      $sql2 = "INSERT INTO devis(surface, vitre)
              VALUES( :surface, :vitre)";
     
        $stmt2 = $dbh->prepare( $sql2 );
     
        $stmt2->execute([
          ':surface' => $_GET['surface'],
          ':vitre' => $_GET['vitre'],
        ]);
      //insère idclient dans table devis
        $requser = $dbh->prepare("SELECT idclient FROM client WHERE email='".$n."'");
        $requser->execute();
        $test;
        $test  = $requser->fetch();
        $sql3 = "UPDATE devis(numeroclient)
                VALUES("$test['idclient']")";
        $stmt3 = $dbh->prepare( $sql3 );
        $stmt3->execute();
    }
    }
    ?>
    J'ai essayé de sélectionner l'idclient et de l'insérer dans la table devis mais je pense que je m'y prends très mal :(

    J'ai mis tout ça à la fin dans un else, dans le cas où l'email existe déjà dans la table client

  5. #5
    Membre chevronné
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2018
    Messages
    537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2018
    Messages : 537
    Par défaut
    Pourquoi désfois une requête préparée désfois une normale?

    Sinon tu utilises PDO tu peux regarder le manuel

    Jette un coup d'oeil sur les requetes sql au passage


  6. #6
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 10
    Par défaut
    je pense que je me rapproche mais c'est toujours pas ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    //si l'email existe déjà
    else
    {//insère infos devis dans table devis
      $sql2 = "INSERT INTO devis(surface, vitre)
              VALUES( :surface, :vitre)";
     
        $stmt2 = $dbh->prepare( $sql2 );
     
        $stmt2->execute([
          ':surface' => $_GET['surface'],
          ':vitre' => $_GET['vitre'],
        ]);
        //recherche dernier iddevis inséré dans la table devis
        $id=$dbh->lastInsertId(); 
        //sélectionne idclient correspondant à l'email rentré dans le formulaire et l'insère dans une variable
        $requser = $dbh->query("SELECT idclient FROM client WHERE email='".$n."'");
        $requser->execute();
        $insert;
        $insert = $requser->fetch();
        //update numeroclient dans la table devis
        $sql3 = $dbh->prepare("UPDATE devis
                SET numeroclient='".$insert[0]."' WHERE iddevis = '".$id."'");
        $sql3->execute();
    }

  7. #7
    Membre chevronné
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2018
    Messages
    537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2018
    Messages : 537
    Par défaut
    Bonjour,

    ceci ne sert a rien tout seul

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE devis
                SET numeroclient='".$insert['idclient']."' WHERE email='".$n."'"

    Comme ca plus simple

  8. #8
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 10
    Par défaut
    du coup

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    //sélectionne idclient correspondant à l'email rentré dans le formulaire et l'insère dans une variable
        $requser = $dbh->query("SELECT idclient FROM client WHERE email='".$n."'");
        $requser->execute();
        $insert = $requser->fetch();
        //update numeroclient dans la table devis
        $sql3 = $dbh->prepare("UPDATE devis
                SET numeroclient='".$insert['idclient']."' WHERE email='".$n."'");
     
        $sql3->execute();
    il n'y aurait pas un problème de quote/guillemets ? sur sublime text le WHERE dans ma requete update n'est pas affiché dans la bonne couleur

  9. #9
    Membre chevronné
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2018
    Messages
    537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2018
    Messages : 537
    Par défaut
    sur lequel

  10. #10
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 10
    Par défaut
    le second where, celui de la requête update, au niveau du $insert['idclient']

    Nom : eeeeeeeeeeeeee.PNG
Affichages : 518
Taille : 46,0 Ko

  11. #11
    Membre chevronné
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2018
    Messages
    537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2018
    Messages : 537
    Par défaut
    J'aurais pas pensé au screen zoomé


    y a pas de probleme de quote
    par contre y a un probleme de code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $requser->execute();
    $sql3->execute();
    sur PDO tu fais execute apres une query?
    moi je vois bien les couleurs!

    Pièce jointe 385812Nom : eeeeeeeeeeeeeeee.PNG
Affichages : 514
Taille : 51,3 Ko

  12. #12
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 10
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    //sélectionne idclient correspondant à l'email rentré dans le formulaire et l'insère dans une variable
        $requser = $dbh->query("SELECT idclient FROM client WHERE email='".$n."'");
        $requser->execute();
        $insert = $requser->fetch();
        //update numeroclient dans la table devis
        $sql3 = $dbh->prepare("UPDATE devis
                SET numeroclient='".$insert['idclient']."' WHERE email='".$n."'");
        $dbh->execute();
    ça me parait étrange

    Fatal error: Uncaught Error: Call to undefined method PDO::execute() in appli.php:74 Stack trace: #0 {main} thrown in appli.php on line 74
    la ligne 74 étant

  13. #13
    Membre chevronné
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2018
    Messages
    537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2018
    Messages : 537
    Par défaut
    En effet je n'avais pas lu correctement
    Faut que tu revois le fonctionnement de PDO regarde le lien que je t'ai envoyé dans un post précédent
    edit : j'ai refais le screen

  14. #14
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Les requêtes ne sont pas correctement préparées : on ne met pas les paramètres directement dans la requête !
    Sinon, ça ne sert à rien !


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    //sélectionne idclient correspondant à l'email rentré dans le formulaire et l'insère dans une variable
        $requser = $dbh->prepare("SELECT idclient FROM client WHERE email = :email ;");
        $requser->execute( array(
            ':email' => $n
        ) );
        $insert = $requser->fetch();
     
        //update numeroclient dans la table devis
        $sql3 = $dbh->prepare("UPDATE devis
                SET numeroclient = :idclient 
                WHERE email = :email ;");
        $sql3->execute( array(
            ':idclient' => $insert['idclient'],
            ':email' => $n
        ) );
    @bonjourajax
    Fais attention à donner des VRAIES corrections... (= pertinentes)

    (et fournis le code au lieu de "bricoler" un screen...)
    Dernière modification par Invité ; 04/06/2018 à 21h00.

  15. #15
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 10
    Par défaut
    merci pour la réponse et pour le code

    j'ai cependant la même erreur
    Fatal error: Uncaught Error: Call to undefined method PDO::execute() in C:\xampp\htdocs\Greenbuild\appli.php:74 Stack trace: #0 {main} thrown in C:\xampp\htdocs\Greenbuild\appli.php on line 74
    la ligne 74 étant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     $dbh->execute(array(
            ':idclient' => $insert['idclient'],
            ':email' => $n
        ));

    je pense qu'il faudrait remplacer $dbh par $sql3 mais, si ça résous l'erreur, ça n'a pas l'air d'effectuer l'update du champ numeroclient

  16. #16
    Invité
    Invité(e)
    Par défaut
    1- Exact.

    2- affiche les variables
    Ajoute des try catch.

  17. #17
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 10
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    1- Exact.

    2- affiche les variables
    Ajoute des try catch.
    j'ai affiché les variables $n et $insert['idclient']
    ça me retourne le bon mail et le bon id

    pour les try catch, je ne sais pas si je m'en sers correctement j'ai essayé comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    //sélectionne idclient correspondant à l'email rentré dans le formulaire et l'insère dans une variable
     try{
     
        $requser = $dbh->prepare("SELECT idclient FROM client WHERE email = :email ;");
        $requser->execute( array(
            ':email' => $n
        ) );
        $insert = $requser->fetch();}
     
    catch (Exception $e)
    {
            die('Erreur : ' . $e->getMessage());
            echo $e;
    }
     //update numeroclient dans la table devis
        try {
        $sql3 = $dbh->prepare("UPDATE devis
                SET numeroclient = :idclient 
                WHERE email = :email ;");
        $sql3->execute(array(
            ':idclient' => $insert['idclient'],
            ':email' => $n
        ));
            echo $insert['idclient'];
            echo $n;
        }
    catch (Exception $f)
    {
            die('Erreur : ' . $f->getMessage());
            echo $f;
    }
    rien ne s'affiche

  18. #18
    Membre chevronné
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2018
    Messages
    537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2018
    Messages : 537
    Par défaut
    à jreaux62
    non pertinente il est pas bien mon screen

  19. #19
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 10
    Par défaut
    j'ai trouvé une solution ! encore un grand merci pour votre aide j'ai pu mieux comprendre le fonctionnement pdo !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    <?php
    if (isset($_GET) && !empty($_GET))
    {	//verifie si l'email du formulaire existe déjà dans la table client
    	$n = $_GET['email'];
    	$sql = "SELECT idclient FROM client WHERE email=:email";
    	$reponse = $dbh->prepare($sql);
    	$reponse->execute(['email'=> $n]);
    	$donnees = $reponse->fetch();
    	//si l'email existe déjà
    	if ( $donnees )
    	{
    		$id = $donnees['idclient'];
    	}
    	//si l'email n'existe pas
    	else
    	{ 	//insère infos client dans table client
    		$sql = "INSERT INTO client(nom, prenom, email)
    		VALUES ( :nom, :prenom, :email)";
     
    		$stmt = $dbh->prepare ($sql);
     
    		$stmt->execute([
          ':nom' => $_GET['nom'],
          ':prenom' => $_GET['prenom'],
          ':email' => $_GET['email'],
           ]);
    		//récupère l'id du client inséré
    		$id=$dbh->lastInsertId();
    	}
    	//insère infos devis dans table devis
    	$sql2 = "INSERT INTO devis(surface, vitre, materiau, chauffage, numeroclient)
              VALUES( :surface, :vitre, :materiau, :chauffage, :numeroclient)";
     
    	$stmt2 = $dbh->prepare( $sql2 );
    	$stmt2->execute([
    	  ':surface' => $_GET['surface'],
          ':vitre' => $_GET['vitre'],
          ':materiau' => $_GET['materiau'],
          ':chauffage' => $_GET['chauffage'],
          ':numeroclient' => $id,
    	]);
    }
    ?>
    voici le code pour ceux que ça intéresse

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Problème insertion de données dans table Mysql
    Par Malcolm78 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 24/10/2007, 17h25
  2. Problème chargement dans table externe
    Par finesse20 dans le forum SQL
    Réponses: 1
    Dernier message: 07/08/2007, 10h10
  3. Problème insertion nouveau champs dans table
    Par antoine1504 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 04/07/2007, 12h00
  4. Insertion en masse dans table de fait
    Par niiccoo dans le forum Oracle
    Réponses: 19
    Dernier message: 29/05/2006, 10h56
  5. [MySQL] Problème d'insertion de données dans table d'associations
    Par Yukhaa dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 07/02/2006, 17h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo