Insertion des données dans 2tables !! [Résolu/Fermé]

Signaler
Messages postés
82
Date d'inscription
mercredi 24 septembre 2008
Statut
Membre
Dernière intervention
1 juin 2014
-
Messages postés
82
Date d'inscription
mercredi 24 septembre 2008
Statut
Membre
Dernière intervention
1 juin 2014
-
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

Messages postés
197
Date d'inscription
dimanche 14 février 2010
Statut
Membre
Dernière intervention
10 octobre 2011
11
fais deux fois insert
Messages postés
82
Date d'inscription
mercredi 24 septembre 2008
Statut
Membre
Dernière intervention
1 juin 2014
8
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
Messages postés
197
Date d'inscription
dimanche 14 février 2010
Statut
Membre
Dernière intervention
10 octobre 2011
11
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.
Messages postés
82
Date d'inscription
mercredi 24 septembre 2008
Statut
Membre
Dernière intervention
1 juin 2014
8
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
Messages postés
197
Date d'inscription
dimanche 14 février 2010
Statut
Membre
Dernière intervention
10 octobre 2011
11
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.'"';
} 
Messages postés
197
Date d'inscription
dimanche 14 février 2010
Statut
Membre
Dernière intervention
10 octobre 2011
11
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.'"';
} 
Messages postés
197
Date d'inscription
dimanche 14 février 2010
Statut
Membre
Dernière intervention
10 octobre 2011
11
et pourquoi faire deux tables quand tu pourrait mettre ces infos dans une seule..
Messages postés
82
Date d'inscription
mercredi 24 septembre 2008
Statut
Membre
Dernière intervention
1 juin 2014
8
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
Messages postés
82
Date d'inscription
mercredi 24 septembre 2008
Statut
Membre
Dernière intervention
1 juin 2014
8
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 :)
Messages postés
82
Date d'inscription
mercredi 24 septembre 2008
Statut
Membre
Dernière intervention
1 juin 2014
8
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