2016-10-07 44 views
2

我有四个字段。两个名称字段和两个电子邮件字段。我必须通过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.

+0

这是动态创建的输入字段的示例代码。在上面的代码中,我使用了硬编码的输入字段两次。从字面上看,它不是这样的。主要是我在动态创建的输入字段期间遇到了问题。 –

+0

现在就做! http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php?s=1|25.2627 – AbraCadaver

+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']; 
} 
+0

感谢您的帮助。它运行良好。 –

+0

它会工作正常,直到[“小Bobby表”](https://xkcd.com/327/)出现。 – spencer7593

+0

我试过了,但它只保存了1个数据 –

1

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

它看起来像代码将通过循环次,一次为每个'submit''name''email'。 (这可能是通过循环中去五次,不知道?我只是echo $val在循环看到发生了什么事情。)

看起来你是通过两种$_POST['name']$_POST['email']试图循环,而不是只$_POST

只要你在每一个人中得到相同的数字,哪一个就不重要。


代码似乎很容易被SQL注入。

如果有一些(深不可测)的原因,你不能使用准备好的声明绑定占位,任何潜在的不安全值需要正确转义。 PHP有一个mysqli_real_escape_string功能,这是专门为此目的而设计的。

而且,似乎没有从mysqli_query被返回错误的任何检查。它看起来像是代码将其比喻性的小手指放在它的嘴角,魔鬼风格,并说:“我只是假设它将全部按计划进行,什么?”

+0

啊,很好。完全忘了'submit'输入类型。;-) –

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); 
} 
+0

非常感谢 –