通过foreach循环插入多个表单字段的数据

时间:2016-10-07 21:15:21

标签: php mysql mysqli foreach

我有四个字段。两个名称字段和两个电子邮件字段。我必须通过foreach循环插入所有字段数据,但是当我通过foreach循环插入数据时,空白条目也会插入数据库中。

示例代码

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <form method="post">
            Name : <input type="text" name="name[]"><br>
            Email : <input type="text" name="email[]"><br>
            Name : <input type="text" name="name[]"><br>
            Email : <input type="text" name="email[]"><br>
            <input type="submit" name="submit">
        </form>
    </body>
</html>

[![<?php
if(isset($_POST['submit']))
{
    $conn = mysqli_connect("localhost", "root", "", "practice");
    $i=0;

    foreach($_POST as $val)
    {
        $name=$_POST['name'][$i];
        $email=$_POST['email'][$i];

        $sql = "insert into interview (Name, Email) values ('$name', '$email')";
        $result = mysqli_query($conn, $sql);
        $i++;

    }

}
?>

有人能帮助我吗?

This is my database table screen shot.

3 个答案:

答案 0 :(得分:3)

首先,请参阅此处How can I prevent SQL injection in PHP?以不同方式查询您的查询,或者您已经搞砸了。

由于nameemail的索引相同,只需循环一个并按键引用另一个:

foreach($_POST['name'] as $key => $val) {
    $name  = $val;
    $email = $_POST['email'][$key];

   // prepared statement query
}

或者您可以像这样输入以使数组更像数据库行:

Name  : <input type="text" name="data[0][name]"><br>
Email : <input type="text" name="data[0][email]"><br>

然后轻松循环:

foreach($_POST['data'] as $val) {
    $name  = $val['name'];
    $email = $val['email'];
}

答案 1 :(得分:3)

#Simple Answer!
foreach($_POST['name'] as $index => $val) {
    $name  = $val;
    $email = $_POST['email'][$index];

    $sql = "insert into interview (Name, Email) values ('$name', '$email')";
    $result = mysqli_query($DB_Connection, $sql);
}

答案 2 :(得分:1)

我们注意到'submit'也是$_POST中的值。

看起来代码将循环三次次,每次'submit''name''email'都会有一次。 (它可能会循环五次,不确定?我只是在循环中echo $val看看发生了什么。)

您似乎试图遍历$_POST['name']$_POST['email'],而不仅仅是$_POST

只要你在每一个中获得相同的数字,那么无关紧要。

代码似乎容易受到SQL注入攻击。

如果存在某些(深不可测)原因,则无法将预备语句绑定占位符一起使用,则需要正确转义任何可能不安全的值。 PHP具有mysqli_real_escape_string功能,专门为此目的而设计。

此外,似乎没有检查mysqli_query返回的错误。看起来代码正在把它的比喻小拇指放在它的嘴角,Dr.Evil风格,并说“我只是假设它将全部去计划。什么?”