Transferer des données d’une table vers une autre table via checkbox - PHP - Programmation
Marsh Posté le 11-07-2017 à 18:21:28
Ta "modélisation" paraît bizarre (déjà ce serait plutôt l'id de l'élève qu'il faudrait insérer dans absents plutôt que de reprendre ses infos).
Pour commencer, ne mets pas tout ça dans ta boucle : inutile d'établir une nouvelle connexion MySQL pour chaque case cochée. Même chose pour une requête préparée, elle ne se prépare qu'une fois avant l'itération puis exécutée autant de fois que nécessaire, c'est un de leurs buts.
Pour revenir à la question, je pense que le plus simple, si j'ai compris, c'est de générer cette (unique) requête :
Code :
|
(et pour le coup, on ne peut plus vraiment préparer la requête mais ce n'est qu'un détail)
En modifiant (encore que, avec la cast en int faite ci-dessous, ce n'est même pas nécessaire - à condition de virer l'espace devant l'id) :
Code :
|
En :
Code : |
Parce qu'un explode là-dessus pour retrouver tes infos, ça pourrait fonctionner mais il y a bien quand même mieux (plus viable) comme approche (quid d'un Jean Charles au CM2 : prénom = Jean, classe = Charles ?)
Soit, tout ton if devient (si je ne me suis pas planté) :
Code :
|
Et de 30 lignes on passe à 3.
PS : si vraiment tu veux ou as besoin d'un réaffichage des élèves sélectionnés, tu peux utiliser le même principe pour faire un SELECT (tout court).
Marsh Posté le 13-07-2017 à 05:23:25
Merci pluj j'ai exactement suivi tes conseils et ca marche nickel merci milles foi .
Je mets le code pour ceux qui aurons a l'avenir le meme probleme
code=php]
<html >
<body>
<form method='POST' action='checkbox_tabinsert_bdd.php'>
<table border="1">
<tr>
<td width=''>Prénom</td>
<td width=''>classe</td>
<td width=''>Choix</td>
</tr>
<?php
try
{
// On se connecte à MySQL
$bdd = new PDO('mysql:host=localhost;dbname=comptes;charset=utf8',
'root','');
}
catch(Exception $e)
{
// En cas d'erreur, on affiche un message et on arrête tout
die('Erreur : '.$e->getMessage());
}
$reponse = $bdd->query('SELECT * FROM eleves');
// On affiche chaque entrée une à une
while ($donnees = $reponse->fetch())
{
echo"<tr><td>".$donnees['prenom']."</td>";
echo"<td>".$donnees['classe']."</td>";
echo"<td><input type='checkbox' name='choix[]' value=' ".$donnees['id']." '></td>";
echo"</tr>";
}
$reponse->closeCursor();
?>
</table>
<p>
<input type="submit" value="enregistrer" name="enregistrer">
</form>
<?php
if (isset($_POST['enregistrer'], $_POST['choix']) && is_array($_POST['choix']))
{
$bdd->exec('INSERT INTO absents(prenom, classe) SELECT prenom, classe
FROM eleves WHERE id IN(' . implode(', ', array_map('intval', $_POST['choix'])) . ')');
// $bdd->closeCursor();
}
echo 'eleves reportes sur la liste des absents '.'<br><br />';
?>
</body>
</html>
[/code]
Marsh Posté le 11-07-2017 à 18:00:40
Bonjour,
J’ai une table qui s’appelle ‘’eleves’’ et qui est composée de 3 colonnes : « id » , « prenom » et « classe » je veux lister tous les enregistrements contenus dans cette table dans un tableau qui aura 4 colonnes : :« id » , « prenom » , « classe » et une dernière colonne qui contiendra pour chaque enregistrement une case à cacher .
Jusque-là tout se passe bien, mon tableau s’affiche correctement. Maintenant je souhaiterais une fois le tableau affiché effectuer des sélections parmi les enregistrements du tableau via les cases à cocher, ensuite insérer toutes ces sélections dans une nouvelle table dénommé ‘’absents’’ et qui comporte les mêmes champs que la table élèves , c’est à ce niveau que ça devient corsé pour moi , voilà des jours que je cherche une solutions dans Google mais je ne trouve rien , voulez-vous m’aider SVP ça me pourri l’existence pour le moment.
Voici mon code