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 26/04/2011, 06h15   #1
Invité de passage
 
Inscription : avril 2011
Messages : 28
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 28
Points : 2
Points : 2
Par défaut problème d'insertion de données dans 3 tables

Bonjour,

Salut à tous les membres, j'ai un problème au niveau de l'insertion de données dans 3 tables avec MYSQL ...un petit résumé de mes 3 tables : un client soit il est une personne physique soit personne morale ... pour cela au niveau de la table client j'ai mis les attributs en commun autre les tables personne physique et celle morale , et à chacune de ces 2 tables j'ai mis les attributs spécifiques à chacune de deux ....

sachant que la 1re table nommée Client :d'attributs :Id_Client(incrémentation automatique de cet attribut),Nom_Client,Tel_Client,GSM_Client,Adresse_Client . Cette table est une table mère possédant des attributs communs chez les 2 tables filles ...

la 1re table fille nommée personne physique d'attributs : CIN_Client,Prenom_Client,Id_client(clé_étrangère) ...

la 2éme table fille nommé personne morale(c.a.d Entreprise) d'attributs :
Matricule_Fiscale,Raison_Sociale,Id_Client(Clé étrangère) ...

Donc après que je clique sur le bouton du formulaire qui permet d'ajouter des champs à soit la table mère et à la table fille 1 ou soit à la table mère et à la table fille 2 ...
voici le code : cible.php
Code php :
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
<?php
include("cnx.php");
if ((!empty($cin_client)) AND (!empty($prenom_client)))
{
$req= $bdd->prepare('INSERT INTO clients(Nom_Client,Tel_Client,GSM_Client,Adresse_Client) values(?,?,?,?)');
$req->execute(array($_POST['nom_client'],$_POST['tel_client'],$_POST['gsm_client'],$_POST['adresse_client']));
$req2= $bdd->prepare('INSERT INTO personne_physique(CIN_Client,Prenom_Client,Id_Client) values(?,?,clients.Id_Client)');
$req2->execute(array($_POST['cin_client'],$_POST['prenom_client']));
}
elseif ((!empty($matricule_fiscale)) AND (!empty($raison_sociale)))
{
$req= $bdd->prepare('INSERT INTO clients(Nom_Client,Tel_Client,GSM_Client,Adresse_Client) values(?,?,?,?)');
$req->execute(array($_POST['nom_client'],$_POST['tel_client'],$_POST['gsm_client'],$_POST['adresse_client']));
$req3= $bdd->prepare('INSERT INTO personne_morale(Matricule_Fiscale,Raison_Sociale,Id_Client) values(?,?,clients.Id_Client)');
$req3->execute(array($_POST['matricule_fiscale'],$_POST['raison_sociale']));
}
if ( ( ($req) and ($req2) ) or ( ($req) and ($req3) ) )
{
echo "Ajout est fait";
}
else
{
echo "pas d'ajout";
}
 
?>


MYSQL ma répondu par un erreur au niveau de la dernière condition avec if(qui est en gras) avec ce message :
Notice: Undefined variable: req in C:\wamp\www\menu_pr\cible.php on line 17

et merci , j'attends vos réponses avec impatience ..
goldray est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2011, 09h56   #2
Membre Expert
 
Inscription : avril 2006
Messages : 1 338
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : avril 2006
Messages : 1 338
Points : 1 315
Points : 1 315
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
<?php
include("cnx.php");
 
if (isset($_POST['cin_client']) && !empty($_POST['cin_client']) && isset($_POST['prenom_client']) && !empty($_POST['prenom_client']))
{
	$req= $bdd->prepare('INSERT INTO clients(Nom_Client,Tel_Client,GSM_Client,Adresse_Client) values(?,?,?,?)');
	$req->execute(array($_POST['nom_client'],$_POST['tel_client'],$_POST['gsm_client'],$_POST['adresse_client']));
	$req2= $bdd->prepare('INSERT INTO personne_physique(CIN_Client,Prenom_Client,Id_Client) values(?,?,clients.Id_Client)');
	$req2->execute(array($_POST['cin_client'],$_POST['prenom_client']));
	echo "Ajout fait";
}
elseif (isset($_POST['matricule_fiscale']) && !empty($_POST['matricule_fiscale']) && isset($_POST['raison_sociale']) && !empty($_POST['raison_sociale']))
{
	$req= $bdd->prepare('INSERT INTO clients(Nom_Client,Tel_Client,GSM_Client,Adresse_Client) values(?,?,?,?)');
	$req->execute(array($_POST['nom_client'],$_POST['tel_client'],$_POST['gsm_client'],$_POST['adresse_client']));
	$req3= $bdd->prepare('INSERT INTO personne_morale(Matricule_Fiscale,Raison_Sociale,Id_Client) values(?,?,clients.Id_Client)');
	$req3->execute(array($_POST['matricule_fiscale'],$_POST['raison_sociale']));
	echo "Ajout fait";
}
else
{
echo "pas d'ajout";
}
?>
comme ça?

tu initialise req req2 et req3 dans un if et tu le test en dehors..

j'ai rajouté au passage un isset pour tester si ta variable post existe avant de tester si elle est vide sinon tu peux avoir des null pointer..
__________________
Stay in Bed .. Save Energy
boo64 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/04/2011, 11h14   #3
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
include("cnx.php");
if ((!empty($cin_client)) AND (!empty($prenom_client)))
{
    $req= ....
}
elseif ((!empty($matricule_fiscale)) AND (!empty($raison_sociale)))
{
    $req= ...
}
if ( ( ($req) and ($req2) ) or ( ($req) and ($req3) ) )
{
    ...
}
Si "$cin_client" et "$raison_sociale" sont vides, il se passe quoi ? $req n'existe pas !

A toi de modifier ton script en conséquence.
Par ailleurs, les $_POST directement dans la requête ? Sérieux ?
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery.
Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2011, 20h07   #4
Invité de passage
 
Inscription : avril 2011
Messages : 28
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 28
Points : 2
Points : 2
salut ,
@boo64
chez ta proposition ,toujours il ya un message qui affiche "ajout fait" mais pas d'ajout réelement !! .....

j'ai modifié mon code comme tu m'a dit mais le probléme que l'insertion se fait juste pour la requete $req mais ni $req2 ni $req3 est réalisé
je crois le probléme c'est au niveau de l'insertion du Id_Client dans soit la table personne_physique soit la table personne_morale ..puisque cet attribut :
par exemple pour la requete $req2 voici son code ...:
Code :
1
2
3
4
5
6
7
8
9
10
if ((!empty($_POST['cin_client'])) AND (!empty($_POST['prenom_client'])))
{
$req= $bdd->prepare('INSERT INTO clients(Nom_Client,Tel_Client,GSM_Client,Adresse_Client) values(?,?,?,?)');
$req->execute(array($_POST['nom_client'],$_POST['tel_client'],$_POST['gsm_client'],$_POST['adresse_client']));
 
 
$req1= $bdd->query('Insert into personne_physique select Id_Client from Clients');
$req2= $bdd->prepare('INSERT INTO personne_physique(CIN_Client,Prenom_Client) values(?,?)');
$req2->execute(array($_POST['cin_client'],$_POST['prenom_client']));
}





je veux que la valeur de Id_Client de la table Clients soit insérer au niveau de la table personne_physique , mais ce n'est pas le cas puisque j'aurai comme valeur chez id_Client de la table clients la valeur 1 ...et chez l'autre table j'aurai la valeur 0 !!! or je dois avoir le méme valeur chez les 2 c.a.d la valeur 1 .....

et merci
goldray 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 06h57.


 
 
 
 
Partenaires

Hébergement Web