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 :

Formulaire multiples et INSERT sur plusieures tables avec même ID


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 42
    Points : 21
    Points
    21
    Par défaut Formulaire multiples et INSERT sur plusieures tables avec même ID
    Bonjour à tous,

    Donc voici mon soucis:

    j'ai fais un questionnaire contenant 20 tables qui sont alimentées par 6 formulaires distincts (pour sauvegarder les reponses tous les 3-4 questions).

    je cherche à lier toutes ces tables entre-elles avec un id grace à une premiere table "user" qui a un ID AUTO (et donc ttes les autres tables ont un champ "user_id")

    facile de faire un INSERT cet ID AUTO à chaque table d'une meme page avec mysql_insert_id ...

    ..mais comment faire quand je passe à une autre page (et donc un nouveau formulaire en methode POST) pour inserer cet id aux prochaines tables..et ainsi de suite ???

    Merci bcp pour votre aide

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonsoir,

    Stocker l'id en session , ou le crypter et le passer un variable URL.

    A+.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 42
    Points : 21
    Points
    21
    Par défaut
    Merci pour ta réponse,

    D'accord, donc je peux insérer la variable $_SESSION['user_id'] dans tous les champs 'user_id de ma table? Merci

  4. #4
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Oui, tu peux insérer la valeur de la session dans les champs.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 42
    Points : 21
    Points
    21
    Par défaut
    Ok, merci, mais je me perds techniquement parlant pour que ma variable "user_id" soit identique sur toutes mes tables..j'ai beau regarder les tutos sur les sessions mais je m'y perds. ..Besoin d'aide, svp.

  6. #6
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Ben, montre nous ce que tu as fait et on corrige .

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 42
    Points : 21
    Points
    21
    Par défaut
    Bon, voici un extrait du code sans les sessions
    ici aucune erreur..et avec la fonction mysql_insert_id() je recupere bien les id
    dans les tables question1 et question2 mais sur les pages suivantes.;je sais pas faire ?!.
    Je souhaite donc INSERER user_id de la table enquete_user dans les autres tables qui sont construites pareilles(id, champ1, champ2, user_id)
    En tout cas, vraiment merci si vous pouvez m'aider, 2 jours que je cherche.

    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
     
    <?php
     
    include ('connect.php');
     
    $ip  = $_POST['ip'] ;
    $q1_reponse1 = $_POST['q1_reponse1'];
    $q1_reponse2 = $_POST['q1_reponse2'];
    $q1_reponse3 = $_POST['q1_reponse3'];
    $q1_reponse4 = $_POST['q1_reponse4'];
    $q2_reponse1 = $_POST['q2_reponse1'];
     
     
     
    $conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Erreur de connection à Mysql');
    mysql_select_db($dbname);
     
     
     
    $sql1 = "INSERT INTO enquete_user (user_id, date, ip)" 
    	  ."VALUES ('', NOW(), '$ip')"; 
    	mysql_query($sql1) or die('Erreur SQL !'.$sql1.'<br>'.mysql_error()); 
     
    $user_id = mysql_insert_id(); 
     
    $sql2 = "INSERT INTO question1 (q1_id, q1_reponse1, q1_reponse2, q1_reponse3, q1_reponse4, user_id)"
    ."VALUES ('', '$q1_reponse1', '$q1_reponse2', '$q1_reponse3', '$q1_reponse4',  '$user_id')";
    	mysql_query($sql2) or die('Erreur SQL !'.$sql2.'<br>'.mysql_error()); 
     
    $user_id = mysql_insert_id(); 
     
    $sql3 = "INSERT INTO question2 (q2_id, q2_reponse1, user_id)"
    	   ."VALUES ('', '$q2_reponse1', '$user_id')"; 
    	   mysql_query($sql3) or die('Erreur SQL !'.$sql3.'<br>'.mysql_error());
     
     
    ?>

  8. #8
    Membre actif
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Points : 210
    Points
    210
    Par défaut
    Pour utiliser la variable de session, il faut d'abord avoir la ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php session_start(); ?>
    Quelque part en haut de ta page. C'est ce qui rend la variable $_SESSION accessible au niveau PHP.

    Ensuite, tu peux créer effectivement la variable $_SESSION['user_id'] et y stocker la valeur que tu veux.

    Maintenant, il est TRÈS IMPORTANT et je dis bien IMPORTANT... ais-je mentionné que c'est IMPORTANT lol...

    la fameuse ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php session_start(); ?>
    Doit être répétée sur CHAQUE page où tu veux accéder à la variable $_SESSION. Elle doit également être située vraiment en haut (genre au début du <head> ou de tout autre traitement que tu fais) sinon tu risques d'avoir des erreurs bizarres.

    Donc j'espère que ça peut t'aider à résoudre ton problème .

    Osu

  9. #9
    Membre actif
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Points : 210
    Points
    210
    Par défaut
    Je dois avouer avoir un peu de difficulté à comprendre ce que tu cherches à faire, mais quand tu fais ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $sql1 = "INSERT INTO enquete_user (user_id, date, ip)" 
    	  ."VALUES ('', NOW(), '$ip')"; 
    	mysql_query($sql1) or die('Erreur SQL !'.$sql1.'<br>'.mysql_error()); 
     
    $user_id = mysql_insert_id();
    À ce moment, est-ce que tu n'as pas déjà le $user_id de la table enquete_user? Alors pourquoi ne pas le stocker dans une variable de session et l'utiliser après dans tes requêtes d'insertion, genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    session_start();
    $sql1 = "INSERT INTO enquete_user (user_id, date, ip)" 
    	  ."VALUES ('', NOW(), '$ip')"; 
    	mysql_query($sql1) or die('Erreur SQL !'.$sql1.'<br>'.mysql_error()); 
     
    $_SESSION['user_id'] = mysql_insert_id();
    Et plus loin ou sur une autre page

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    session_start();
     
    $sql1 = "INSERT INTO tableQuelconque (id, champ1, champ2, user_id) VALUES ('', 'valeur1', 'valeur2', " . $_SESSION['user_id'] . ")";
    mysql_query($sql1) or die('Erreur SQL !'.$sql1.'<br>'.mysql_error());

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 42
    Points : 21
    Points
    21
    Par défaut
    Merci..c'est bien ça..sauf que la premiere requete INSERT ('$sql3') sur la page2 me remonte des ids qui ne correspondent pas aux ids de enquete_user ...je pense que c'est normal puisque la table de reference enquete_user n'est pas appelée ?,!!

    j'ai essayé de faire un SELECT juste avant pour bien récupérer l' ID de session mais cela ne fonctionne pas(aucunes erreurs mais rien ds la table 'question3')
    En tout cas merci, la piste des sessions es la bonne..vraiment super !
    page 2.php
    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
     
     
    session_start();
     
    include ('connect.php');
     
    $q3_reponse1 = $_POST['q3_reponse1'];
    $q4_reponse1 = $_POST['q4_reponse1'];
    $q4_reponse2 = $_POST['q4_reponse2'];
    $q4_reponse3 = $_POST['q4_reponse3'];
    $q4_reponse4 = $_POST['q4_reponse4'];
    $q5_reponse1 = $_POST['q5_reponse1'];
    $q5_reponse2 = $_POST['q5_reponse2'];
    $q5_reponse3 = $_POST['q5_reponse3'];
    $q5_reponse4 = $_POST['q5_reponse4'];
    $q5_reponse5 = $_POST['q5_reponse5'];
    $q5_reponse6 = $_POST['q5_reponse6'];
    $q6_reponse1 = $_POST['q6_reponse1'];
     
    $conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Erreur de connection à Mysql');
    mysql_select_db($dbname);
     
    $sql33="SELECT user_id FROM enquete_user WHERE user_id= '".$_SESSION['user_id']."'";
    mysql_query($sql33) or die('Erreur SQL !'.$sql33.'<br>'.mysql_error());
     
    $sql3 = "INSERT INTO question3 (q3_id, q3_reponse1, user_id)"
    	   ."VALUES ('', '$q3_reponse1', '".$_SESSION['user_id']."')";
    	  	mysql_query($sql3) or die('Erreur SQL !'.$sql3.'<br>'.mysql_error()); 
    }
    $_SESSION['user_id'] = mysql_insert_id();
     
    $sql4 = "INSERT INTO question4 (q4_id, q4_reponse1, q4_reponse2, q4_reponse3, q4_reponse4, user_id)"
    	   ."VALUES ('', '$q4_reponse1', '$q4_reponse2', '$q4_reponse3', '$q4_reponse4', '".$_SESSION['user_id']."')"; 
    	   mysql_query($sql4) or die('Erreur SQL !'.$sql4.'<br>'.mysql_error()); 
     
    $_SESSION['user_id'] = mysql_insert_id();

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 42
    Points : 21
    Points
    21
    Par défaut
    PS : en bref j'essaye de faire exactement comme on peut le faire avec un moteur INNODB : des clés étrangères qui pointent vers une clé primaire.

  12. #12
    Membre actif
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Points : 210
    Points
    210
    Par défaut
    Rebonjour ,

    Premièrement, le fait de stocker une valeur dans la variable $_SESSION la rend accessible sans faire de requête select (d'où son utilité). Ensuite, quand tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $sql33="SELECT user_id FROM enquete_user WHERE user_id= '".$_SESSION['user_id']."'";
    mysql_query($sql33) or die('Erreur SQL !'.$sql33.'<br>'.mysql_error());
    Tu ne récupère même pas le résultat de ta requête. Normalement, il faut faire un truc du genre avec une requête SELECT en général:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $sql33="SELECT user_id FROM enquete_user WHERE user_id= '".$_SESSION['user_id']."'";
     
    $resultat = mysql_query($sql33) or die('Erreur SQL !'.$sql33.'<br>'.mysql_error());
     
    $ligne = mysql_fetch_array($resultat);
    Et après, tu accèdes à user_id gràce à la ligne:

    Également, si tu espère plusieurs résultats dans ton SELECT, tu devrais faire une boucle pour passer à travers chacun:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while ($ligne = mysql_fetch_array($resultat))
    {
    //traitement quelconque
    }
    Cependant, dans ce cas particulier, je dois avouer que je ne comprends pas l'utilité d'avoir cette requête, puisque la valeur recherchée est déjà stockée dans la variable de session.

    Il est également très important de comprendre que la variable de session CONSERVE sa valeur, même si tu changes de page. Donc, même si tu avances dans ton formulaire, l'ID devrait demeurer dans la variable.

    Aussi, je crois que la raison pourquoi ta variable $_SESSION['user_id'] ne contient pas les bonnes valeurs est que tu affectes plusieurs fois une valeur à cette variable (regarde les commentaires que j'ai rajouté à ton code):

    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
     
     
    $sql33="SELECT user_id FROM enquete_user WHERE user_id= '".$_SESSION['user_id']."'";
    mysql_query($sql33) or die('Erreur SQL !'.$sql33.'<br>'.mysql_error());
     
    $sql3 = "INSERT INTO question3 (q3_id, q3_reponse1, user_id)"
    	   ."VALUES ('', '$q3_reponse1', '".$_SESSION['user_id']."')";
    	  	mysql_query($sql3) or die('Erreur SQL !'.$sql3.'<br>'.mysql_error()); 
    }
    $_SESSION['user_id'] = mysql_insert_id(); //En affectant ici, on a la valeur de l'ID de la table question3
     
    $sql4 = "INSERT INTO question4 (q4_id, q4_reponse1, q4_reponse2, q4_reponse3, q4_reponse4, user_id)"
    	   ."VALUES ('', '$q4_reponse1', '$q4_reponse2', '$q4_reponse3', '$q4_reponse4', '".$_SESSION['user_id']."')"; 
    	   mysql_query($sql4) or die('Erreur SQL !'.$sql4.'<br>'.mysql_error()); 
     
    $_SESSION['user_id'] = mysql_insert_id(); //En affectant ici, on a la valeur de la table question4
    Donc, si tu veux conserver la valeur de la table enquete, tu dois n'avoir UNIQUEMENT qu'une seule affectation dans cette variable $_SESSION, soit après la requête $sql1, comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $sql1 = "INSERT INTO enquete_user (user_id, date, ip)" 
    	  ."VALUES ('', NOW(), '$ip')"; 
    	mysql_query($sql1) or die('Erreur SQL !'.$sql1.'<br>'.mysql_error()); 
     
    $user_id = mysql_insert_id();
    Pas d'autre après, car sinon tu vas perdre l'ID que tu cherches justement à conserver.

    Donc voilà, j'espère que ça va pouvoir te débloquer, bonne chance

  13. #13
    Membre actif
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Points : 210
    Points
    210
    Par défaut
    Petite erreur de ma part, dans la toute dernière ligne de code que je t'ai donné,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $user_id = mysql_insert_id();
    Devrait être

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['user_id'] = mysql_insert_id();
    Désolé pour cette petite faute d'inattention

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 42
    Points : 21
    Points
    21
    Par défaut
    Bonjour osuwariboy,

    Je réponds un peu tard pour te dire un grand merci..ta solution est hyper simple et fonctionne parfaitement.(merci aussi à tous les autres qui m'onrépondu ..quand même )

    Bonne journée et encore merci

Discussions similaires

  1. [1.x] formulaire d'insertion sur plusieurs tables à fois
    Par belgacem.tlili dans le forum Symfony
    Réponses: 4
    Dernier message: 24/02/2010, 20h42
  2. Insertion dans plusieurs table avec un index commun
    Par irongomme dans le forum Requêtes
    Réponses: 3
    Dernier message: 12/10/2007, 11h41
  3. Réponses: 6
    Dernier message: 18/03/2007, 16h22
  4. INSERT sur plusieurs tables.
    Par Nethervoid21 dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 18/11/2006, 11h22
  5. INSERT sur plusieurs tables
    Par juniorAl dans le forum Langage SQL
    Réponses: 4
    Dernier message: 30/03/2005, 18h59

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