为了账号安全,请及时绑定邮箱和手机立即绑定

Foreach 循环仅将数组中的最后一个值添加到表

Foreach 循环仅将数组中的最后一个值添加到表

PHP
慕妹3146593 2022-09-17 21:38:33
原谅我对PHP和MYSQL比较陌生,我相信这可能是一个很容易回答的问题(或者也许不是,我不确定)。这是我的复选框的HTML形式<form method="post" action="process.php"><input type="checkbox" name="athlete[]" value="1">athlete 1<br><input type="checkbox" name="athlete[]" value="2">athlete 2<br><input type="checkbox" name="athlete[]" value="3">athlete 3<br><br><input type="submit" value="Submit"></form>相当简单。然后我正在处理这个PHP.php:$checkboxes = isset($_POST['athlete']) ? $_POST['athlete'] : array();foreach($checkboxes as $value) {    $sql = "INSERT INTO draftPick(user_id, athlete_id)VALUES('77', '$value' )";}if(mysqli_query($conn,$sql)) {    echo 'Data added sucessfully';}else {    echo "Error: " . $sql . "<br>" . mysqli_error($conn);}mysqli_close($conn);我正在尝试使用我的复选框创建一个foreach循环,然后将每个复选框值插入MYSQL表中的新行中。但是,当我运行此PHP时,它仅将最后选中的复选框值插入MYSQLtable中,而不会全部插入。如何循环它,以便它将所有选中的值插入到我的表中。感谢您的帮助!
查看完整描述

3 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

您也可以借此机会纠正 SQL 注入漏洞。


$stmt = $conn->prepare('INSERT INTO draftPick (user_id, athlete_id) VALUES ('77', ? )');

$stmt->bind_param('i', $value);

foreach($checkboxes as $value) {

    $stmt->execute();

}


查看完整回答
反对 回复 2022-09-17
?
开心每一天1111

TA贡献1836条经验 获得超13个赞

你所做的只是替换字符串,但你实际插入数据库的执行是在循环之后写入的,这就是为什么它只插入最后一个复选框。$sql


试试这个:


$checkboxes = isset($_POST['athlete']) ? $_POST['athlete'] : array();

foreach($checkboxes as $value) {

    $sql = "INSERT INTO draftPick(user_id, athlete_id)VALUES('77', '$value' )";


    if(mysqli_query($conn,$sql)) {

        echo 'Data added sucessfully';

    } else {

        echo "Error: " . $sql . "<br>" . mysqli_error($conn);

    }


}


mysqli_close($conn);

另外,请注意,您插入(循环)的方式非常慢,因为它正在执行相当多的查询。应改用批量插入。


警告:正如达尔曼在评论中提到的


您对 SQL 注入持开放态度,应使用参数化的预准备语句,而不是手动构建查询。它们由美通或麦氏清科提供。永远不要相信任何类型的输入!即使您的查询仅由受信任的用户执行,您仍然面临损坏数据的风险。逃避是不够的!


查看完整回答
反对 回复 2022-09-17
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

当您设置 :


 $sql = "INSERT INTO draftPick(user_id, athlete_id)VALUES('77', '$value' )";

它只是一个字符串 bieng 设置为$sql可瓦拉,其中


mysqli_query($conn,$sql)

是执行 SQL 查询以将数据插入到表中,因此移动


foreach($checkboxes as $value) {

  $sql = "INSERT INTO draftPick(user_id, athlete_id)VALUES('77', '$value' )";

  mysqli_query($conn,$sql);

}


查看完整回答
反对 回复 2022-09-17
  • 3 回答
  • 0 关注
  • 134 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信