$squery = $cbdbc->prepare("SELECT * from sitedata");
$squery->execute();
while ($srow = $squery->fetch(PDO::FETCH_ASSOC)) {
if ($rresult[$srow['siteName']] !== $srow['siteID']) {
echo "<tr><td><input type='checkbox' id='" . $srow['siteID'] . "' name='" . $srow['siteID'] . "' value='" . $srow['siteID'] . "'><label for='".$srow['siteID']."'>" . str_replace('_',' ',$srow['siteName']) . "</label></td></tr>";
} else {
echo "<tr><td><input type='checkbox' id='" . $srow['siteID'] . "' name='" . $srow['siteID'] . "' value='" . $srow['siteID'] . "' checked='checked'><label for='".$srow['siteID']."'>" . str_replace('_',' ',$srow['siteName']) . "</label></td></tr>";
}
}
echo "<tr><td><input type='submit' value='Submit'></td></tr></table></form>";} elseif (null !== filter_input(INPUT_GET, 'setromstores')) {
$rid = filter_input(INPUT_GET, 'setromstores');
$squery = $cbdbc->prepare("SELECT * FROM sitedata");
$squery->execute();
while ($srow = $squery->fetch(PDO::FETCH_ASSOC)) {
$sid = filter_input(INPUT_POST, (string)$srow['siteID']);
if ($sid !== null) {
$uquery = $cbdbc->prepare("UPDATE roms SET " . $srow['siteName'] . "=:sid WHERE romID = :rid");
$uquery->bindParam(':sid', $sid);
$uquery->bindParam(':rid', $rid);
$uquery->execute();
} else {
$uquery = $cbdbc->prepare("UPDATE roms SET " . $srow['siteName'] . "= '0' WHERE romID = :rid");
$uquery->bindParam(':rid', $rid);
$uquery->execute();
}
}
所以我试图建立一个系统,在这个系统中可以分配一个名为ROM的用户&#39; sites&#39;使用复选框。
除了&#39; siteID&#39;的纯数字之外的每种类型的值(在MySQL表上是VARCHAR(5)
),例如abc, abc12, 0001
,siteID
的值正确传递,价值在表格中正确更新。
如果我将纯数字作为siteID
的值,例如1, 15, 2339,
它不会通过POST
传递任何值,并且始终会在{rom&#39}中设置0
。表
我已经尝试确保在每一步传递的值都转换为字符串,但这似乎没有帮助。
虽然网站ID的格式通常为AXXXX
,但我希望看看这是否可以修复,然后强制用户放入AXXXX
的siteID,特别是因为这可能会在将来改为纯号。
答案 0 :(得分:2)
值不是与name或id相同。您不能发送仅包含数字名称或ID的表单。将您的行更改为以下内容:
<input type='checkbox' id='yourUniqueId" . $srow['siteID'] . "' name='checkboxes[" . $srow['siteID'] . "]' value='" . $srow['siteID'] . "' checked='checked'>
嗯,正如您所看到的,您的复选框现在被命名为checkboxes
,它是一组数据!!你可以用PHP接收
$_POST['checkboxes']; // array(value1, value2, value3)
你解决了问题。
答案 1 :(得分:1)
表单字段名称必须是字符串。您可以使用此方法:
echo "<tr><td><input type='hidden' name='siteID[" . $srow['siteID'] . "]' value='0'><input type='checkbox' id='" . $srow['siteID'] . "' name='siteID[" . $srow['siteID'] . "]' value='" . $srow['siteID'] . "'><label for='".$srow['siteID']."'>" . str_replace('_',' ',$srow['siteName']) . "</label></td></tr>";
我更改了name="siteId[12]"
这样的复选框名称,并添加了隐藏字段(没有必要)。
之后,siteID是一个关联的已检查站点数组,其中key为siteId,值为1(如果选中),如果不是则为0。
$sids = filter_input(INPUT_POST, 'siteID', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY);
while ($srow = $squery->fetch(PDO::FETCH_ASSOC)) {
$sid = $sids[$srow['siteID']];
// ...
}