db表中的PHP SQL更新复选框

时间:2015-12-11 13:03:32

标签: php mysql

我有一个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);

但在选中/取消选中复选框然后点击更新时,会收到错误重复的错误。

1 个答案:

答案 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)上的唯一索引可能更适合于减轻数据重复。