[英]Insert data of multiple form fields by foreach loop
我有四个领域。 两个名称字段和两个电子邮件字段。 我必须通过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++;
}
}
?>
有谁能够帮助我 ?
首先,请参阅此处如何在PHP中阻止SQL注入? 你的查询方式不同,或者你搞砸了。
由于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'];
}
#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);
}
我们注意到'submit'
也是$_POST
的值。
它看起来像代码将三次 ,一次为每个经过循环'submit'
, 'name'
和'email'
。 (它可能会循环五次,不确定?我只是在循环中echo $val
以查看发生了什么。)
看起来你试图遍历$_POST['name']
或$_POST['email']
,而不仅仅是$_POST
。
只要你在每一个中获得相同的数字,那么它应该无关紧要。
代码似乎容易受到SQL注入攻击。
如果存在某些(不可理解的)原因,则无法使用带有绑定占位符的预 准备语句 ,则需要正确转义任何可能不安全的值。 PHP有一个mysqli_real_escape_string
函数,专门为此目的而设计。
此外,似乎没有检查mysqli_query返回的错误。 看起来代码正在将其比喻的小指放在嘴角,Dr.Evil风格,并说“我只是假设它将全部计划。什么?”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.