我正在尝试插入4个相同的表单。但使用PHP的mysql具有不同的值。
当我提交数据时,数据库仅获取最后一个表单中的值并将其插入4次。我试图从提交的所有4中获取值。
int *const
答案 0 :(得分:1)
输入控件的名称,使它们作为数组发布
<input type="text" name="teamname[G1]">
<input type="text" name="teamname[G2]">
这就是为什么当您使用$varTname = $_POST['teamname'];
$varTname
时,数组teamname
的4个值中的每一个都设置为$varTname['G#']
,其中#匹配您为此设置的数字输入字段组。
然后使用for循环来获取数据并执行查询,类似于下面的内容。当你在它时,你也可以修复你的SQL注入漏洞。您可能还希望对数据进行更多卫生以确保
$varTname = $_POST['teamname'];
$varCity = $_POST['city'];
$varBplayer = $_POST['bestplayer'];
$varYearformed = $_POST['yearformed'];
$varWebsite = $_POST['website'];
$stmt = $mysqli->prepare('INSERT INTO Teams (teamname, city, bestplayer, yearformed, website) VALUES (?,?,?,?,?,?)');
$varTname1Bind = "";
$varTnameBind = "";
$varCityBind = "";
$varBplayerBind = "";
$varWebsiteBind = "";
// assuming they are all strings, adjust where needed
$stmt->bind_param('sssssss',
$varTname1Bind,
$varTnameBind,
$varCityBind,
$varBplayerBind,
$varYearformedBind,
$varWebsiteBind);
for($i = 1; i < 5; $i++)
{
$varTname1Bind = $varTname['G'.$i];
$varTnameBind = $varTname['G'.$i];
$varCityBind = $varCity['G'.$i];
$varBplayerBind = $varBplayer['G'.$i];
$varYearformedBind = $varYearformed['G'.$i];
$varWebsiteBind = $varWebsite['G'.$i];
$stmt->execute();
}
可以节省您需要执行的代码
答案 1 :(得分:1)
您可以将input
name
转换为数组,然后在[]
的PHP循环中添加$_POST[]
并构建您的$sql
通过连接值,直到完成所有值的循环,并将INSERT
作为多个值。
<强> HTML:强>
<label>Team Name:</label> <input type="text" name="teamname[]"><br>
<label>City:</label> <input type="text" name="city[]"><br>
<label>Best Player:</label> <input type="text" name="bestplayer[]"><br>
<label>Year Formed:</label> <input type="text" name="yearformed[]"><br>
<label>Website:</label> <input type="text" name="website[]"><br>
<强> PHP:强>
<?php
$sql = "INSERT INTO Teams (teamname, city, bestplayer, yearformed, website) VALUES ";
for($i = 0 ; $i < count($_POST['teamname']) ; $i++){
$varTname = $_POST['teamname'][$i];
$varCity = $_POST['city'][$i];
$varBplayer = $_POST['bestplayer'][$i];
$varYearformed = $_POST['yearformed'][$i];
$varWebsite = $_POST['website'][$i];
$sql .= "(" .$varTname. " , " .$varCity. " , " .$varBplayer. " , " .$varYearformed. " , " .$varWebsite. "),";
}
$sql = rtrim($sql, ','); // omit the last comma
// Then Excute your query
?>
这样您就不需要为它们提供唯一的名称name="test1"
,name="test2"
等等,要查看它的实际效果,请检查结果页底部的PHP Fiddle,已经设置了输入字段的值,只需点击提交,然后转到结果页面的底部,查看撰写的INSERT
语句。
注意以上SQL
只是一个关于如何构建它的演示,不要在没有验证和消毒的情况下使用它。也停止查询这种方式而是使用使用PDO或MySQLi准备语句以避免SQL注入。
因此,对于MySQLi准备好的语句,程序风格 - 我使用PDO - 正如您在PHP Fiddle 2中看到的那样,代码是:
<?php
// you validation goes here
if (isset($_POST['insert'])) {
insertTable();
} else {
$conn->close();
}
function insertTable() {
// enter your credentials below and uncomment it to connect
//$link = mysqli_connect('localhost', 'my_user', 'my_password', 'world');
$sql = "INSERT INTO Teams (teamname, city, bestplayer, yearformed, website) VALUES";
$s = '';
$bind = '';
for($i = 0 ; $i < count($_POST['teamname']) ; $i++){
$sql .= " (?, ?, ?, ?, ?)";
$s .= 's';
$varTname = $_POST['teamname'][$i];
$varCity = $_POST['city'][$i];
$varBplayer = $_POST['bestplayer'][$i];
$varYearformed = $_POST['yearformed'][$i];
$varWebsite = $_POST['website'][$i];
$bind .= " , " . $varTname. " , " .$varCity. " , " .$varBplayer. " , " .$varYearformed. " , " .$varWebsite;
}
$sql = rtrim($sql, ','); // omit the last comma
$s = "'" .$s. "'";
$stmt = mysqli_prepare($link, $sql);
mysqli_stmt_bind_param($stmt, $s , $bind);
mysqli_stmt_execute($stmt);
}
?>
答案 2 :(得分:0)
使用其他名称,例如teamname1
,teamname2
,teamname3
,teamname4
<input type="text" name="teamname1">
<input type="text" name="teamname2">
<input type="text" name="teamname3">
<input type="text" name="teamname4">
获取值: -
$varTname1 = $_POST['teamname1'];
$varTname2 = $_POST['teamname2'];
$varTname3 = $_POST['teamname3'];
$varTname4 = $_POST['teamname4'];
对于插入值: - 。
$sql = "INSERT INTO Teams (teamname)
VALUES ('$varTname1'),
('$varTname2'),
('$varTname3'),
('$varTname4')
或者你可以试试这个: -
<input type="text" name="teamname[]">
获得如下价值: -
$_POST['teamname'][0]
答案 3 :(得分:0)
通常,这是通过创建表单控制器数组来完成的。
<input type="text" name="teamname[]">
<input type="text" name="city[]">
然后你可以在帖子请求中获得一个数组。
希望这有帮助!
答案 4 :(得分:0)
尝试这种方法
$sql = "INSERT INTO Teams (teamname, city, bestplayer,yearformed,website)
VALUES ('$varTname', '$varCity', '$varBplayer', '$varYearformed', '$varWebsite'),
";
$sql.= query same as abov
$sql.= query same as abov
$sql.= query same as abov
if (!$mysqli->multi_query($sql)) {
echo "Multi query failed: (" . $mysqli->errno . ") " . $mysqli->error;
}
在第一次查询后注意.
点。
我认为你也应该使用自动增量键。这应该可行。