Enregistrer plusieurs résultats d'un foreach dans une table

Signaler
Messages postés
18
Date d'inscription
mardi 19 octobre 2004
Statut
Membre
Dernière intervention
10 décembre 2008
-
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
-
Bonjour,

J'ai réussis à mettre en place des checkbox avec plusieurs choix possibles, et à récupérer les id de chacun des résultats séparés par un espace à l'aide de foreach();

La ou je bloque complétement, c'est pour séparer ces valeurs et les inserer chacune dans une table intermediaire que j'ai créées.
Avez vous une idée de comment je dois proceder pour inserer les resultats retournés ?

Voici la partie du formulaire concernée :
<?php
$sql5 = 'SELECT * FROM genres';
$req5 = mysql_query($sql5) or die('Erreur SQL !
'.$sql5.'
'.mysql_error());
 
while($data5 = mysql_fetch_assoc($req5))
{
echo '.$data5['id_genre'].'">'.$data5['genre'].'';
}?>

et la partie resultat :
<?php
// On commence par récupérer les champs
if(isset($_POST['genres']))

foreach($_POST['genres'] as $value) {
  echo $value.' ';}

echo ''.$genres.'';

   // on se connecte à MySQL

   require '../../connect.inc.php';

    mysql_close();  // on ferme la connexion
  
?>

Je n'ai pas mis le INSERT INTO car je ne vois pas comment le formuler pour qu'il boucle suivant le nombre de resultat.

Ma table intermediaire a deux colonnes : ID_LIVRES et ID_GENRES donc pour 3 resultats (3 checkbox cochées) j'aurais donc 3 lignes d'insérer ...

Pouvez-vous m'aiguiller ?

Bien cordialement,

1 réponse

Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
Salut Cyse,

$sql5 = 'SELECT * FROM genres';
$req5 = mysql_query($sql5) or die('Erreur SQL !
'.$sql5.'
'.mysql_error());

=> A ne pas faire !!!
Si erreur, tu peux livrer des informations importantes sur ta base de données qui permettent très facilement de faire de l'injection par la suite.
Préfère :
$sql5 = 'SELECT * FROM genres';

$req5 mysql_query($sql5) or die([j'informe l'utilisateur qu'il y a un pb sur le site et je le redirige efficacement, et j'écris qqchose dans un fichier log, j'envoie un mail à l'admin, etc ...]);>

"mysql_close();  // on ferme la connexion"
=> ne sert à rien, la connexion est fermée automatiquement à la fin du script

Le code ci dessous n'est pas terrible et mérite d'être amélioré en fonction de ton contexte, il te propose juste quelques pistes :

<?php
require '../../connect.inc.php';
if (false $req5 mysql_query ("SELECT * FROM genres")) {
  file_put_contents("erreur lors de la requête : ".mysql_error()."\r\n", 'FILE_APPEND'); // écrit l'erreur dans un fichier
  // rediriger vers la page d'erreur => l'utilisateur ne s'aperçoit que d'une erreur, mais n'a pas la structure de ta table
}

echo '<form id="test" name="test" method="post">';

while ($data5 = mysql_fetch_array ($req5,MYSQL_NUM)) {
  foreach ($data5 as $k => $v) {
    echo ''.$v.'
';
  }
}
echo '
</form>';

if (isset($_POST['genres'])) {
  // On commence par récupérer les champs => non, on met à jour la DB directement
  foreach($_POST['genres'] as $id_livres => $id_genres) {
    // il manque un traitement de la valeur envoyée pour sécuriser l'insertion dans la DB !!!
    $genre = [traitement de la valeur de $id_genres];
   
    if (false === mysql_query("INSERT INTO [ma table] ('ID_LIVRES', 'ID_GENRES') VALUES ('$id_livres', '$genre'")) {
      //traitement de l'erreur
    }
   
  }
} else {
  // gestion de l'erreur
}
?>

Cordialement,

Kohntark -