Reputation: 1748
Following on from a previous post, I'm trying to update a database field with a 1 or 0, depending on whether a checkbox is checked or not.
It seems to work when the checkbox is checked but not when empty.
Any ideas how to solve this? Code below. Many Thanks, S.
Here's the code within my form:
$query = "SELECT * FROM istable WHERE assocProp = '".$_POST['id']."'";
$result = mysql_query($query);
while($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
echo '<li>
<label for="changePP'.$row['id'].'"><input id="changePP'.$row['id'].'" type="checkbox" name="showPP_ids[]" value="'.$row['id'].'"'.($row['showPP']=='1' ? ' checked="checked"':NULL).' /> Display</label>
</li>'. PHP_EOL;
}
And the php process code (updated):
$newQuery=mysql_query("select * from istable where assocProp = '".$_POST['id']."'");
$newResult=mysql_fetch_array($newQuery);
foreach ($newResult as $showPP_ids) {
$val = (int) isset($_POST['showPP_ids']);
mysql_query("UPDATE istable SET showPP = $val WHERE id = ".mysql_real_escape_string($showPP_ids));
}
Upvotes: 0
Views: 1648
Reputation: 870
$val = (int) isset($_POST['showPP_ids']);
Is an Array. It should be
foreach ($newResult as $showPP_ids) {
$val = (int) isset($_POST['showPP_ids'][$showPP_ids]);
I guess
Upvotes: 3
Reputation: 4331
I don't think the code can work this way for you... the thing is that if you don't tick a checkbox on page, its value is not being submitted with the form data and therefore you are unable to set showPP to 0 in your database
I have 2 possible solutions in mind:
if all records other than the ones ticked on page should be set to 0, you can do it this way:
$values = mysql_real_escape_string(implode(',', $showPP_ids));
mysql_query("UPDATE istable SET showPP = 1 WHERE id IN('$values')");
mysql_query("UPDATE istable SET showPP = 0 WHERE id NOT IN('$values')");
another solution would be to store all the IDs in hidden field(s) on HTML page with that form and check which of them you're getting in $showPP_ids array - those will be set to 1 - and which of them are missing from that variable - those will be set to 0
$query = "SELECT * FROM istable WHERE assocProp = '".$_POST['id']."'";
$result = mysql_query($query);
while($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
echo '<li>
<label for="changePP'.$row['id'].'">
<input id="changePP'.$row['id'].'" type="checkbox" name="showPP_ids[]" value="'.$row['id'].'"'.($row['showPP']=='1' ? ' checked="checked"':NULL).' /> Display
</label>
<input type="hidden" name="original_ids[]" value="'.$row['id'].'" />
</li>'. PHP_EOL;
}
... and in the PHP file (no MySQL SELECT is neccessary here at all):
foreach ($_POST['original_ids'] as $id) {
if (isset($_POST['showPP_ids']) && in_array($id, $_POST['showPP_ids'])) {
$val = 1;
} else {
$val = 0;
}
mysql_query("UPDATE istable SET showPP = $val WHERE id = ".mysql_real_escape_string($id));
}
Upvotes: 1
Reputation: 11556
You are testing whether the array $_POST['showPP_ids'] is set, which it always will be.
I think your test should be:
$val = (int) isset($_POST['showPP_ids'][$showPP_ids]);
Upvotes: 0
Reputation: 9174
When a checkBox is not checked, the value isn't submitted to the server.Pls
Please use isset($_POST['id'])
to check if the value exists.
http://php.net/manual/en/function.isset.php
Upvotes: 0