Insertion des données dans 2tables !!

Résolu/Fermé
goldray Messages postés 82 Date d'inscription mercredi 24 septembre 2008 Statut Membre Dernière intervention 1 juin 2014 - 26 avril 2011 à 01:31
goldray Messages postés 82 Date d'inscription mercredi 24 septembre 2008 Statut Membre Dernière intervention 1 juin 2014 - 27 avril 2011 à 17:17
Salut à tous ,
j'ai une table nommé : Client d'attributs : Id_Client,Nom_Client,Adresse_Client,Tel_Client,Gsm,Client .
la 2éme table ,qui est une table fille de la 1ére ...elle nommé Personne_Physique ,d'attributs:CIN_Client,Prenom_Client,Id_Client(clé étrangére)

je veux insérer un tuple qui est : le nom ,prenom,Cin,tel,adresse,gsm .
mais le probléme je veux décomposer l'insertion de ce tuple c.a.d des champs auront inseré dans la table 1 ét les autres dans la table 2 ...
je crois c simple mais je connais pas l'astuce ...
j'attende vos réponses avec impatience ...:)



5 réponses

peluchextoutou Messages postés 197 Date d'inscription dimanche 14 février 2010 Statut Membre Dernière intervention 10 octobre 2011 11
26 avril 2011 à 03:27
fais deux fois insert
0
goldray Messages postés 82 Date d'inscription mercredi 24 septembre 2008 Statut Membre Dernière intervention 1 juin 2014 8
26 avril 2011 à 03:52
Salut mon ami , j'ai 2fois insert , tout va bien , mais le probléme est lorsque je teste les 2 requetes !! il ya un erreur !!
je crois cette écriture est fausse :
if ($req) and ($req2) // je crois la faute est là avec $req c'est la 1ére requete et $req2 c'est la 2éme
{
echo " Ajout est fait";
}
else
{
echo "pas d'ajout";
}


et merciiii
0
peluchextoutou Messages postés 197 Date d'inscription dimanche 14 février 2010 Statut Membre Dernière intervention 10 octobre 2011 11
26 avril 2011 à 13:18
ce n'est pas un erreur, tu as juste une mauvaise syntaxe ;)
sql ne va pas retourner true ou false donc un if ne fonctionnera pas

essaie quelquechose du genre :
$req1 = "INSERT INTO (...)"; mysql_query($req1) or die(mysql_error());
puis
$req2 = "INSERT INTO (...)"; mysql_query($req2) or die(mysql_error());


si tout se fait sans erreur, marque résolu, si tu as un erreur, copie-colle ici :)

et je te conseille de protéger ton script contre l'injection sql car n'importe qui pourrait vider tes tables en 1 seconde.. copie-colle moi ton code complet svp.
0
goldray Messages postés 82 Date d'inscription mercredi 24 septembre 2008 Statut Membre Dernière intervention 1 juin 2014 8
26 avril 2011 à 18:57
Salut à tous ,
voici mon nouveau problème :
je veux insérer 3 requetes en méme temps dans deux tables ....
mais 2requetes se réalisent avec succés mais une ne se réalise pas (c'est la requete $req1) , avec cette requete 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 ..... :voici les requetes :

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']));
}

et merci
0
peluchextoutou Messages postés 197 Date d'inscription dimanche 14 février 2010 Statut Membre Dernière intervention 10 octobre 2011 11
27 avril 2011 à 03:09
if ($_POST['cin_client'] AND $_POST['prenom_client']) 
{ foreach($_POST AS $k => $v) // PROTECTION CONTRE INJECTION SQL
{
eval('$'. $k. ' = '. $bdd->real_escape_string($v). ";\n");
} // FIN PROTECTION
$req = 'INSERT INTO clients SET Nom_Client="'.$nom_client.'",Tel_Client="'.$tel_client.'",GSM_Client="'.$gsm_client.'",Adresse_Client="'.$adresse_client.'"'; $bdd->query($req); unset($req);
$req = 'INSERT INTO personne_physique SELECT Id_Client FROM clients'; $bdd->query($req); unset($req);
$req = 'INSERT INTO personne_physique SET CIN_Client="'.$cin_client.'",Prenom_Client="'.$prenom_client.'"';
} 
0
peluchextoutou Messages postés 197 Date d'inscription dimanche 14 février 2010 Statut Membre Dernière intervention 10 octobre 2011 11
27 avril 2011 à 03:13
et avec correction du Id_Client:

if ($_POST['cin_client'] AND $_POST['prenom_client']) 
{ foreach($_POST AS $k => $v) // PROTECTION CONTRE INJECTION SQL
{
eval('$'. $k. ' = '. $bdd->real_escape_string($v). ";\n");
} // FIN PROTECTION
$idcli = time(); $req = 'INSERT INTO clients SET Id_Client="'.$idcli.'",Nom_Client="'.$nom_client.'",Tel_Client="'.$tel_client.'",GSM_Client="'.$gsm_client.'",Adresse_Client="'.$adresse_client.'"'; $bdd->query($req); unset($req);
$req = 'INSERT INTO personne_physique SET Id_Client="'.$idcli.'",CIN_Client="'.$cin_client.'",Prenom_Client="'.$prenom_client.'"';
} 
0
peluchextoutou Messages postés 197 Date d'inscription dimanche 14 février 2010 Statut Membre Dernière intervention 10 octobre 2011 11
27 avril 2011 à 03:14
et pourquoi faire deux tables quand tu pourrait mettre ces infos dans une seule..
0
goldray Messages postés 82 Date d'inscription mercredi 24 septembre 2008 Statut Membre Dernière intervention 1 juin 2014 8
27 avril 2011 à 03:35
Salut mon amii ,merci beaucoup pour tes propositions ,je vais les vérifier ...pour l'injection ,je crois on l'utilise lorsque on créé un site_web or je vais faire cette Base de données pour une application_Web ..dans tout les cas merci bien ....
Mon ami , j'ai une table nommé clients ,qui posséde 2 tables filles (par géneralisation) , ces 2 tables ont des attributs communs qui j'ai les mis au niveau de la table clients , et chacune d'elle posséde ses attributs spécifiques ....Donc moi j'ai un formulaire nommé Ajout client , je vais ajouter les données soit à les tables client et personne_physique soit aux tables clients et personne_morale ...et j'ai mit les vérification des champs vides ou non pour que je fait la distinction entre les 2tables(personne_phy et celle morale ) ..
j'espére que tu m'as compris ....
et merci
0
goldray Messages postés 82 Date d'inscription mercredi 24 septembre 2008 Statut Membre Dernière intervention 1 juin 2014 8
27 avril 2011 à 04:01
salut mon ami , d'aprés MYSQL il s'agit d'un erreur au niveau de la ligne 6 c.a.d au niveau de "contre injection" ...voici :
<?php
include("cnx.php");
if ($_POST['cin_client'] AND $_POST['prenom_client'])
{ foreach($_POST AS $k => $v) // PROTECTION CONTRE INJECTION SQL
{
eval('$'. $k. ' = '. $bdd->real_escape_string($v). ";\n");
} // FIN PROTECTION
$idcli = time(); $req = 'INSERT INTO clients SET Id_Client="'.$idcli.'",Nom_Client="'.$nom_client.'",Tel_Client="'.$tel_client.'",GSM_Client="'.$gsm_client.'",Adresse_Client="'.$adresse_client.'"'; $bdd->query($req); unset($req);
$req = 'INSERT INTO personne_physique SET Id_Client="'.$idcli.'",CIN_Client="'.$cin_client.'",Prenom_Client="'.$prenom_client.'"';

if ($req)
{
echo "ajout fait";
}
else
{
echo "pas d'ajout";
}
}


l'erreur géneré par MYSQL est :( ! ) Fatal error: Call to undefined method PDO::real_escape_string() in C:\wamp\www\menu_pr\cible.php on line 6

et merci :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
goldray Messages postés 82 Date d'inscription mercredi 24 septembre 2008 Statut Membre Dernière intervention 1 juin 2014 8
27 avril 2011 à 17:17
salut merci à tous , j'ai trouvé la solution pour l'insertion du dernier Identifient d'une table vers une autre ....
voici le code , je veux l'améliorer et éliminer les ambiguës...
<?php
include("cnx.php");
 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']));unset($req);
$idclt=0;
$idclt=$bdd->lastInsertId();
$req2= $bdd->prepare('INSERT INTO personne_physique(CIN_Client,Prenom_Client,Id_Client) values(?,?,?)');
$req2->execute(array($_POST['cin_client'],$_POST['prenom_client'],$idclt));
if ($req2)
{
echo "ajout fait";
}
else {
echo "Ajout non effectué";}
}
elseif  ((!empty($_POST['matricule_fiscale']))  AND (!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']));
	$idclt2=0;
	$idclt2=$bdd->lastInsertId();
	$req3= $bdd->prepare('INSERT INTO personne_morale(Matricule_Fiscale,Raison_Sociale,Id_Client) values(?,?,?)');
	$req3->execute(array($_POST['matricule_fiscale'],$_POST['raison_sociale'],$idclt2));
	if (($req) and ($req3)) {
	echo "Ajout fait";}
	else {
	echo "ajout non effectué";
	}
}
else
{
echo "SVP saisir les données";
}

?>



mais j'ai des petites problémes , concernant la vérification des champs par exemple :
je veux que le champ Nom Client contient seulement des lettres(A-Za-z) si non un message d'erreur s'affiche ...

et merci
0