Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/11/2010, 12h51   #1
Invité régulier
 
Inscription : octobre 2010
Messages : 33
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 33
Points : 6
Points : 6
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
mfredok est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 13h55   #2
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 126
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 126
Points : 7 287
Points : 7 287
Bonsoir,

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

A+.
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 15h10   #3
Invité régulier
 
Inscription : octobre 2010
Messages : 33
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 33
Points : 6
Points : 6
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
mfredok est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 15h18   #4
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 126
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 126
Points : 7 287
Points : 7 287
Oui, tu peux insérer la valeur de la session dans les champs.
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 16h33   #5
Invité régulier
 
Inscription : octobre 2010
Messages : 33
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 33
Points : 6
Points : 6
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.
mfredok est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 16h43   #6
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 126
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 126
Points : 7 287
Points : 7 287
Ben, montre nous ce que tu as fait et on corrige .
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 17h04   #7
Invité régulier
 
Inscription : octobre 2010
Messages : 33
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 33
Points : 6
Points : 6
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 :
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());
 
 
?>
mfredok est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 17h22   #8
Membre actif
 
Tobbi Filteau
Inscription : mai 2010
Messages : 176
Détails du profil
Informations personnelles :
Nom : Tobbi Filteau

Informations forums :
Inscription : mai 2010
Messages : 176
Points : 177
Points : 177
Pour utiliser la variable de session, il faut d'abord avoir la ligne:

Code :
<?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 :
<?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
osuwariboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 17h33   #9
Membre actif
 
Tobbi Filteau
Inscription : mai 2010
Messages : 176
Détails du profil
Informations personnelles :
Nom : Tobbi Filteau

Informations forums :
Inscription : mai 2010
Messages : 176
Points : 177
Points : 177
Je dois avouer avoir un peu de difficulté à comprendre ce que tu cherches à faire, mais quand tu fais ça:

Code :
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 :
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 :
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());
osuwariboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2010, 09h44   #10
Invité régulier
 
Inscription : octobre 2010
Messages : 33
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 33
Points : 6
Points : 6
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 :
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();
mfredok est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2010, 09h48   #11
Invité régulier
 
Inscription : octobre 2010
Messages : 33
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 33
Points : 6
Points : 6
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.
mfredok est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2010, 14h41   #12
Membre actif
 
Tobbi Filteau
Inscription : mai 2010
Messages : 176
Détails du profil
Informations personnelles :
Nom : Tobbi Filteau

Informations forums :
Inscription : mai 2010
Messages : 176
Points : 177
Points : 177
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 :
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 :
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 :
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 :
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 :
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
osuwariboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2010, 14h56   #13
Membre actif
 
Tobbi Filteau
Inscription : mai 2010
Messages : 176
Détails du profil
Informations personnelles :
Nom : Tobbi Filteau

Informations forums :
Inscription : mai 2010
Messages : 176
Points : 177
Points : 177
Petite erreur de ma part, dans la toute dernière ligne de code que je t'ai donné,

Code :
$user_id = mysql_insert_id();
Devrait être

Code :
$_SESSION['user_id'] = mysql_insert_id();
Désolé pour cette petite faute d'inattention
osuwariboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 13h59   #14
Invité régulier
 
Inscription : octobre 2010
Messages : 33
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 33
Points : 6
Points : 6
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
mfredok est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h15.


 
 
 
 
Partenaires

Hébergement Web