在php中将表单输入为数组

问题描述 投票:-1回答:1

我是一个自学者,但我被困在这里。我希望你们能帮我解决这个问题。部门值每次都不同,我想将值插入mysql数据库。我不知道怎么做。但我做了以下工作来完成这项工作。

<tr>
    <td> 

        <?php echo $result['dep']; ?><input type="hidden" name="department" value="<?php echo $result['dep']; ?>">

    </td>
    <td>

        <input type="radio" name="attendance[<?php echo $result['roll'] ?>]" required="1" value="present"> Present

        <input type="radio" name="attendance[<?php echo $result['roll'] ?>]" required="1" value="absent"> Absent

    </td>
</tr>

这是我的迭代代码,将表单数据插入mysql数据库:

如果(isset($ _ POST [ '提交'])){

$attendance = $_POST['attendance'];

$dep = $_POST['department'];

$current_date = date('Y-m-d');

$getAttendance = $user->insertAttendance($dep, $attendance, $current_date);

}

这是insert函数:public function insertAttendance($ dep,$ attendance = array(),$ date){foreach($ attendance as $ att_key => $ att_value){

    $sql = "INSERT INTO tcr_attendance (roll, department, attendance, attendance_date) VALUES ('$att_key', '$dep', '$att_value', '$date')";

    $insert_row = $this->db->insert($sql);

}

但我得到的只是部门的第一价值。请有人帮助我在foreach循环中获取部门值的迭代以获得关注。

php arrays
1个回答
1
投票

您可能希望查看PDO准备好的查询,因为目前您很容易受到SQL注入攻击。

$pdo = new PDO($dsn, $user, $password);

foreach ($attendance as $roll => $present) {
    $statement = $pdo->prepare('
        INSERT INTO tcr_attendance (roll, department, attendance, attendance_date) 
        VALUES (:roll, :department, :attendance, :attendance_date)
    ');

    $statement->bindParam(':roll', $roll);
    $statement->bindParam(':department', $department);
    $statement->bindParam(':attendance', $present);
    $statement->bindParam(':attendance_date', $date);

    $statement->execute();
}

以上内容可以更好地防止恶意值直接传递到您的查询中。

至于你的问题:

如果没有其余的代码,以及你的表单是如何工作的,我很难准确地说出来,所以我只能给出粗略的指导,一个基本的方法就是。

  • 提交您的表格
  • 循环显示表单数据的$_POST值。
  • 对每次迭代执行Insert查询

一种更优化的方式(取决于插入量)可能是进行单个插入查询(这意味着您不必为每个查询连接),因此您需要循环遍历数据,构建插入,然后执行它。

© www.soinside.com 2019 - 2024. All rights reserved.