checkbox --> database

gwendonline
Invité n'ayant pas de compte PHPfrance

09 déc. 2013, 16:15

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);
?>

ViPHP
xTG
ViPHP | 7331 Messages

09 déc. 2013, 17:29

$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 !

Invité
Invité n'ayant pas de compte PHPfrance

09 déc. 2013, 18:51

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...

ViPHP
xTG
ViPHP | 7331 Messages

09 déc. 2013, 19:25

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.

gwendoline
Invité n'ayant pas de compte PHPfrance

09 déc. 2013, 22:04

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!

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

11 déc. 2013, 00:33

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)

@+
Il en faut peu pour être heureux ......

gwendoline
Invité n'ayant pas de compte PHPfrance

11 déc. 2013, 17:22

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()); 
}
}