Insertion des données dans 2tables !!

Résolu
goldray Messages postés 113 Statut Membre -  
goldray Messages postés 113 Statut Membre -
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

  1. peluchextoutou Messages postés 197 Date d'inscription   Statut Membre Dernière intervention   11
     
    fais deux fois insert
    0
  2. goldray Messages postés 113 Statut Membre 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
    0
  3. peluchextoutou Messages postés 197 Date d'inscription   Statut Membre Dernière intervention   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.
    0
  4. goldray Messages postés 113 Statut Membre 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
    0
    1. peluchextoutou Messages postés 197 Date d'inscription   Statut Membre Dernière intervention   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.'"';
      } 
      0
    2. peluchextoutou Messages postés 197 Date d'inscription   Statut Membre Dernière intervention   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.'"';
      } 
      0
    3. peluchextoutou Messages postés 197 Date d'inscription   Statut Membre Dernière intervention   11
       
      et pourquoi faire deux tables quand tu pourrait mettre ces infos dans une seule..
      0
    4. goldray Messages postés 113 Statut Membre 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
      0
    5. goldray Messages postés 113 Statut Membre 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 :)
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. goldray Messages postés 113 Statut Membre 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
    0