我有四个字段。两个名称字段和两个电子邮件字段。我必须通过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++;
}
}
?>
有人能帮助我吗?
答案 0 :(得分:3)
首先,请参阅此处How can I prevent SQL injection in PHP?以不同方式查询您的查询,或者您已经搞砸了。
由于name
和email
的索引相同,只需循环一个并按键引用另一个:
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风格,并说“我只是假设它将全部去计划。什么?”