我尝试使用复选框更新数据。但是,如果未选中一个或多个复选框,则会返回通知:
注意:第12行的E:\ wamp \ www \ HOSPITAL \ update.php中的未定义索引:stats2
注意:第12行的E:\ wamp \ www \ HOSPITAL \ update.php中的未定义索引:stats3
注意:第12行的E:\ wamp \ www \ HOSPITAL \ update.php中的未定义索引:stats5
<?php
$con = mysql_connect("localhost","root","");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("Hospital", $con);
mysql_query("UPDATE t2 SET HOSPNUM ='$_POST[hnum]', ROOMNUM='$_POST[rnum]', ADDATE= '$_POST[ad8]', ADTIME='$_POST[adtym]', LASTNAME='$_POST[lname]', FIRSTNAME='$_POST[fname]', MIDNAME='$_POST[mname]', CSTAT='$_POST[cs]', AGE='$_POST[age]', BDAY='$_POST[bday]', ADDRESS='$_POST[ad]', SEX='$_POST[sex]',
STAT='$_POST[stats1]', STAT2='$_POST[stats2]', STAT3='$_POST[stats3]', STAT4='$_POST[stats4]', STAT5='$_POST[stats5]', STAT6='$_POST[stats6]', STAT7='$_POST[stats8]', STAT8='$_POST[stats8]', NURSE='$_POST[nurse]'
WHERE TELNUM ='$_POST[telnum]'");
mysql_close($con)
?>
你可以帮助我,以便通知不会出现吗?
答案 0 :(得分:1)
这是复选框的定义行为 - 只有当它们包含在表单数据中时才会被设置。
您应该使用isset()来确定是否选中了复选框。
将其更改为
STAT='".isset($_POST['stats1']).",
STAT2='".isset($_POST['stats2']).",
STAT3='".isset($_POST['stats3']).",
STAT4='".isset($_POST['stats4']).",
STAT5='".isset($_POST['stats5']).",
STAT6='".isset($_POST['stats6']).",
STAT7='".isset($_POST['stats8']).",
STAT8='".isset($_POST['stats8'])."
另一种解决方法是在复选框之前添加一个名称相同的隐藏变量:例如
<form action='t1.php' method='post'>
<input type='hidden' name="cb1" value="0">
<input type='checkbox' name="cb1" title='test'>
<input type='submit' >
</form>
<?php
print_r($_POST);
?>
答案 1 :(得分:1)
$_POST
数组不包含stats2
索引。这是因为当未选中复选框时,它将不会包含在帖子请求中。
如果表单元素是静态的,那么您可以检查它们是否已设置:
将STAT6='$_POST[stats6]'
替换为STAT6=(array_key_exists('stats6', $_POST))
。
如果表单元素是动态生成的,例如:
foreach($students as $student)
{
echo "<input element='checkbox' name='student-is-present-{$value}'>";
}
然后在表单中包含一个隐藏元素,以便您可以确定已检查的内容以及未检查的内容:
foreach($students as $student)
{
echo "<input element='hidden' name='student-{$value}' value='student-is-present-{$value}'>";
echo "<input element='checkbox' name='student-is-present-{$value}'>";
}
您应该引用数组键。例如,使用$_POST['stats5']
代替$_POST[stats5]
。您的SQL也向SQL injection开放。为避免这种情况,您应该使用mysql_real_escape_string()
等函数来转义数据。
答案 2 :(得分:0)
当您在表单上有一个复选框时,如果勾选该框,则仅将其值发送到服务器。如果没有勾选,则该键不会存在于$ _POST数组中,因此会出现错误。
答案 3 :(得分:0)
您还应该使用mysql_real_escape_string清理输入以防止mysql注入。
答案 4 :(得分:0)
您不应该直接在数组中使用POST和GET变量。你应该清理它们,搜索mysql注入以了解更多信息:
$hnum = isset($_POST['hnum']) ? mysql_real_escape_string($_POST['hnum']) : '';
然后使用这些变量。这样就可以避免使用mysql注入并解决这些注意事项