Récupérer l'id d'une entrée avec INSERT sql

Résolu
Bonjour,
Je rencontre un petit soucis en ce moment et je ne sais pas comment procéder...
En fait j'ai 3 tables
Tables cdc_personnes
idpers|nom|prenom|
Table cdc_repet
idrepet|drepet|
Table cdc_assister
idpers|idrepet|

J'ai une requète qui selectionne tous les membre avec à côté de chaque nom j'ai une checkbox
je ne vous met pas cette requète uniquement la boucle pour éviter de surcharger.
while ($r=mysql_fetch_object($resultat)) {
	echo "<input type='checkbox' name='presents[]' value='$r->idpers'> $r->nom $r->prenom<br/>\n";
}

La table cdc_assister est la relation des 2 autres tables
J'ai bien mes 2 requètes INSERT, mais malheureusement je récupére bien idrepet mais je ne sais pas comment faire pour récupérer le idpers c'est à dire les personnes que j'aurai sélectionnées.
	switch($_POST['haction']) {
		case 'new':
			// Construction de la requete d'ajout
			$requete = "INSERT INTO ".TBREPET." (drepet)"
			         . "VALUES ('$drepet')";
			$typenr  = "enregistré"; // Type d'enregistrement : ajout ou modif (pour message CR)
			$reqaj   = $requete;     // sauver temporairement la requete dans $reqaj (requete ajout) pour debuggage
			$resultat = ExecRequete($requete,$connexion); // Ne pas exécuter pour l'instant
			
			$idrep 	= mysql_insert_id();
			
			$presents 	= $_POST['presents'];
			
			$requete = "INSERT INTO ".TBASS." (idpers,idrep)"
			         . "VALUES ('$idpers','$idrep')";
			$typenr  = "enregistré"; // Type d'enregistrement : ajout ou modif (pour message CR)
			$reqaj   = $requete;     // sauver temporairement la requete dans $reqaj (requete ajout) pour debuggage
			$resultat = ExecRequete($requete,$connexion); // Ne pas exécuter pour l'instant
			
			break;
	}

Je vous remercie par avance pour votre aide.
Cdt.

9 réponses

  1. Bonjour,
    Je suis un gros imbécile, lorsque j'ai fait un print_r rien ne s'affichais alors je me suis dit bizarre. En fait sur mon serveur j'exportais pas le bon fichier ça ne pouvais pas fonctionner. Conclusion j'ai ce problème de régler grace à toi pour cette fichu ligne
    $presents  = isset($_POST['presents']) ? $_POST['presents'] : NULL;
    

    je te remercie et bonne journée
    1. Bonjour
      Malheureusemant cela me retourne toujours pas les checkboxs cochés c'est à dire idpers toujours rien.
      Par contre en ce qui concerne l'extension MYSQL je préfére régler 2 ou 3 soucis avant de passer à PDO sinon cela va être compliqué pour moi.
      Avez-vous d'autres solutions à me proposer, de mon côté je suis démuni d'idée mais je continue à chercher.
      Je vous remercie.
      Bonne journée
      while ($r=mysql_fetch_object($resultat)) {
      	echo "<input type='checkbox' name='presents[]' value='$r->idpers'> $r->nom $r->prenom<br/>\n"; $nbp++;
      }
      
      1. Modérateur
        Tu peux faire un print_r ($_POST); et nous coller le résultat ?
    2. Avec la boucle foreach ça me retourne aucune erreur mais par contre je ne récupére toujours pas l'idpers.
       switch($_POST['haction']) {
        case 'new':
         // Construction de la requete d'ajout
         $requete = "INSERT INTO ".TBREPET." (drepet)"
                  . "VALUES ('$drepet')";
         $typenr  = "enregistré"; // Type d'enregistrement : ajout ou modif (pour message CR)
         $reqaj   = $requete;     // sauver temporairement la requete dans $reqaj (requete ajout) pour debuggage
         $resultat = ExecRequete($requete,$connexion); // Ne pas exécuter pour l'instant
         
         $idrep  = mysql_insert_id();
         $presents  = isset($_POST['presents']);
         
        foreach($presents as $idpers){
         
         $requete = "INSERT INTO ".TBASS." (idpers,idrep)"
                  . "VALUES ('$idpers','$idrep')";
         $typenr  = "enregistré"; // Type d'enregistrement : ajout ou modif (pour message CR)
         $reqaj   = $requete;     // sauver temporairement la requete dans $reqaj (requete ajout) pour debuggage
         $resultat = ExecRequete($requete,$connexion); // Ne pas exécuter pour l'instant
        }
         break;
       }
      

      je na sais comment procéder.
      Merci
      1. Modérateur
        Bonjour,

        Avec ce code :
        $presents  = isset($_POST['presents']);
        
        *
        tu ne fais que tester que la variable $_POST['presents']) existe.....
        Pour AFFECTER la valeur c'est comme ceci qu'il faut l'écrire :
        $presents  = isset($_POST['presents']) ? $_POST['presents'] : NULL;
        


        Au passage (aucun rapport direct avec ton souci.. mais bon...)...: Comme cela t'a déjà été dit ....Tu utilises l'ancienne extension MYSQL consiédérée comme OBSOLETE... je t'invite vivement à lire ceci :
        https://www.commentcamarche.net/faq/43261-php-l-extension-mysql-est-obsolete#top
        puis à passer à mysqli ou PDO
    3. en fait j'ai changé d'emplacement de ma balise de fermeture du formulaire je l'ai mise après la boucle while et maintenant cela me retourne true mais par contre j'ai toujours la même erreur
      bool(true)
      Warning: Invalid argument supplied for foreach() in
      
      1. oui je j'avais bien mis après la ligne 15 le var_dump me retourne bool(false)
        Alors pourquoi ça me retourne false?
        1. Bonjour
          J'ai essayé cela me retourne
          Warning: Invalid argument supplied for foreach() in .....
          

          j'ai bien regarder sur des forums et essayé plusieurs petites choses mais sans résultat.
          Avez-vous une idée.
          Merci
          1. Tu l'as bien mis après la ligne 15 (déclaration de
            $presents
            )? Ton formulaire est bien envoyé en POST?

            Si oui essai un
            var_dump($presents);
        2. Bonjour,

          $presents
          est un tableau, tu peux donc y accéder grâce à un foreach par exemple:

          foreach($presents as $p){
               // Construction de requête ici, $p étant un 'persid'
          }