Page 1 sur 1

checkbox --> database

Posté : 09 déc. 2013, 16:15
par gwendonline
Bonjours à tout le monde
J'aimerai à mettre à jour le base de donnée avec un array de checkbox. Mais ça ne joue pas. Est-ce qu'il y a quelque un qui pourrai m'aider?
Merci beaucoup!!
<?php require_once('../../Connections/tool.php'); ?>
<?php 
if (!isset($_SESSION)) {
	session_start();
}

mysql_select_db($database_tool, $tool); 
$query_master = "SELECT * FROM table";
$master = mysql_query($query_master, $tool) or die(mysql_error());
$row_master = mysql_fetch_assoc($master);
$totalRows_master = mysql_num_rows($master);

if (isset($_POST['fee'])) {
$fee[] = $_POST['fee'];} 

if (isset($_POST['ID'])) {
  $id[]= $_POST['ID']; }

if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) {

    foreach ($_POST["fee"] as $id => $fee) {
    $updateSQL = "UPDATE table SET fee = ". ($fee ? 1 : 0) . " WHERE ID = " .$id;

mysql_select_db($database_tool, $tool);
 $Result1 = mysql_query($updateSQL, $tool) or die(mysql_error());
 
    }
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
</head>

<body>
<?php
include('../include/menu_admin.html');
?>
<p>

<table width="1000" border="0" valign="left">
    <tr>
       <td width="30">ID</td>
         <td width="100">nom</td>
        <td width="50">payé</td>
  </tr>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name="form1" id="form1">
<input type="hidden" name="sent" value="yes">  
  <?php do { ?>
  	    
   <tr>    <td><?php echo $row_master['ID']; ?>&nbsp; </td>
         <td><?php echo $row_master['adminname']; ?>&nbsp; </td>
    <td><input type="checkbox" name="fee[<?php echo $row_master['ID']; ?>]" value='1' <?php if ($row_master['fee'] == 1) echo 'checked="checked"';?> /> 

    <?php } while ($row_master = mysql_fetch_assoc($master));?>

 </table>
 <input type="submit" value="update" />
       </td>

          <input type="hidden" name="MM_update" value="form1" />
  <input type="hidden" name="ID" value="<?php echo $row_loginabfrage['ID']; ?>" />
</form>

</div>
</body>
</html>

<?php
mysql_free_result($master);
?>

Re: checkbox --> database

Posté : 09 déc. 2013, 17:29
par xTG
$fee[] = $_POST['fee'];
Tu fais un array d'array que tu traites comme un array.
Suis-je clair ? :priere:
Enlèves les crochets de la fée c'est pas un pirate !

Re: checkbox --> database

Posté : 09 déc. 2013, 18:51
par Invité
Non, je ne comprends pas. Qu'est que tu proposes? Que dois-je faire? Merci pour une clarification!
Si je fait:
$fee = $_POST['fee'];
$id= $_POST['ID'];
ça ne marche non plus...

Re: checkbox --> database

Posté : 09 déc. 2013, 19:25
par xTG
Cela ne marche pas car ce n'est pas le seul problème.
Actuellement tu n'es pas capable de faire un update 0.

Tu as un problème avec ta boucle :
foreach ($_POST["fee"] as $id => $fee) {
    $updateSQL = "UPDATE table SET fee = ". ($fee ? 1 : 0) . " WHERE ID = " .$id;
Le fait est que si un checkbox n'est pas cochée elle n'est pas soumise dans $_POST et donc jamais tu ne pourras mettre de 0 dans ton update.
Tu récupères toute la liste avec ta requête $query_master, il faut donc faire une boucle dessus et pour chaque enregistrement vérifier s'il y a une checkbox correspondante.
S'il n'y en a pas c'est qu'il faut faire un update à 0.
S'il y en a une c'est qu'il faut faire un update à 1.

Re: checkbox --> database

Posté : 09 déc. 2013, 22:04
par gwendoline
Merci bien pour la réponse précis!
Mais: Car je suis newbie je ne suis pas capable de comprendre tout clairement. Est-ce que tu pourrai me dire le code pour la boucle? Ce serai super sympa!
Merci bien pour ton aide!

Re: checkbox --> database

Posté : 11 déc. 2013, 00:33
par moogli
salut,

le code tout cuit c'est pas le genre de la maison ;)

par contre le coup de pouce ça oui.

donc tu as une requête pour récupérer en base pour récupérer la liste des id de la table.
Tu parcours le résultat et pour chaque id tu vérifie s'il existe une entrée dans le table $_POST['fee'].
si l'entrée existe tu peux mettre a jour la base avec 1, dans le cas contraire avec zéro.

pour cela il faut :
- savoir faire une requête SQL select
- utiliser la fonction isset
- savoir faire une requête SQL update

perso, au vu de ton code je ferais plus simple (et un poil plus bourrin, mais plus rapide ;) );
- update à zéro de la colonne pour toute la table
- update à un de la colonne pour les id sélectionnée. (pour cela une utilise la clause in SQL ainsi que les fonctions php array_keys et implode)

@+

Re: checkbox --> database

Posté : 11 déc. 2013, 17:22
par gwendoline
Merci bien pour le coup de pouce! Je peux mettre à jour la base de donner avec 1. Mais pas avec 0. Le code pour dire dans $updateSQL 'else SET fee = 0' je ne trouve pas.
Alors, je fais:
if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) {

if (isset($_POST['fee'])) {
$keys = implode(',', array_keys($_POST['fee']));

$updateSQL = "UPDATE table SET fee = 1 WHERE ID IN ({$keys})"; 
mysql_select_db($database_tool, $tool);
$Result1 = mysql_query($updateSQL, $tool) or die(mysql_error()); 
}
}