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

cyse Messages postés 18 Date d'inscription mardi 19 octobre 2004 Statut Membre Dernière intervention 10 décembre 2008 - 10 déc. 2008 à 19:04
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 - 13 déc. 2008 à 18:53
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

kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
13 déc. 2008 à 18:53
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 -
0
Rejoignez-nous