我有一个update.php
页面,用于检查复选框值并更新数据库中的数据。
例如,sport_table
看起来像这样(主键是MemberID-Sport的组合):
MemberID | Sport
John | Football
John | Rugby
John | Cricket
Paul | Football
Paul | Rugby
Mike | Cricket
所以我想要做的是从我的webform上的复选框中获取值,并在db表中按需要更新它们。
我尝试过以下代码:
$sport = $_POST["sport"];
for ($i=0; $i < sizeof($sport); $i++) {
$sql = "UPDATE sport_table
SET sport='$sport[$i]', MemberID='$username'";
$result = mysqli_query($conn, $sql);
但在选中/取消选中复选框然后点击更新时,会收到错误重复的错误。
答案 0 :(得分:0)
做出一些假设,这是您可能需要查看的地方:
首先,如果使用复选框,您需要在提交中允许多个答案,其中HTML看起来像这样:
<input type="checkbox" name="sport[]" value="Football">Football</input>
注意字段名称中的[]。这可以确保PHP将字段解析为可以具有多个值的数组。
其次,PHP需要处理数组(如果存在)并始终验证用户输入。了解SQL注入,不要直接从请求中获取内容并在SQL查询中使用。它有一天会为你节省一大堆麻烦。
$validSports=array('Football','Rugby','Cricket','Football');
// $_POST['sport'] will not be set if no boxes are checked
if(isset($_POST['sport']) &&
is_array($_POST['sport'])) {
// Remove previous entries from the table for this member.
$sql = "DELETE FROM sport_table WHERE MemberID='$username'";
$result = mysqli_query($conn, $sql);
foreach($_POST['sport'] as $sport) {
// See how we validate the user input here, there are other ways
if(in_array($sport, $validSports)) {
$sql = "INSERT INTO sport_table
SET sport='$sport[$i]', MemberID='$username'";
$result = mysqli_query($conn, $sql);
}
}
}
第三,我错过了示例代码以保持简单,但在实践中,总是检查mysqli_query的$ result值,如果$ result === false,那么你需要处理错误 - 可能是通过写入某处的日志。
最后,检查sport_table上的索引以使其快速。对于上述用例,MemberID的索引就足够了,尽管(MemberId,sport)上的唯一索引可能更适合于减轻数据重复。