php - 从表单循环向mysql插入多行

时间:2018-01-24 16:18:17

标签: php mysqli

所以我在页面上显示多个html表单 - 效果很好,因为我只是使用一个简单的循环来显示它80次,但我面临的问题是我想把所有80个表单都提交到多行在我的数据库中。它只提交最后一个表格(即80)

如果有人能帮我找到问题......我真的很感激!在提交这个问题之前我已经做了一些搜索,但我似乎无法找到答案。


这是我的表格的样子:

enter image description here

这是我的表单构建器

<?php 
// Counts the number of forms
$counter = 1;

echo '<form action="insert.php" method="post">';


// Loop through forms
for ($i = 1; $i < 81; $i++) {

$username = 'admin';
$title = 'test';
$name = 'a';
$image_src = '<img src="image/'.$i.'.jpg">';
$transition = 'fade';
$group_name  = '0';


echo '<hr>' . '('. $counter .')'. '<br>';

echo "
<label>Username:</label>
<input type='text' name='username' id=' required='required' value='".$username."'/>

<br /><br />

<label>Title:</label>
<input type='text' name='title' id=' required='required' value='".$title."'/>

<br/><br />

<label>Name:</label>
<input type='text' name='name' id=' required='required' value='".$name."'/>

<br/><br />

<label>Content:</label>
<input type='text' name='content' id=' required='required' value='".$image_src."'/>

<br/><br />

<label>Image:</label>
<input type='text' name='image' id=' required='required' value='images/".$i.".jpg'/>

<br/><br />

<label>CSS Animate:</label>
<input type='text' name='cssanimate' id=' required='required' value='".$transition."'/>

<br/><br />

<label>Group Name:</label>
<input type='text' name='group_name' id=' value='0'/>

<br/><br />
";

$counter++;

}

echo '<input type="submit" value="Submit" name="submit"/>';
echo '</form>';

?>

<小时/> 这是我的PHP代码:(insert.php)

<?php

$con=mysqli_connect("localhost","admin","password","database_name");
// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }


$sql="INSERT INTO table_name (username, title, name, content, image, cssanimate, group_name, group_sort) VALUES ('".$_POST["username"]."', '".$_POST["title"]."', '".$_POST["name"]."', '".$_POST["content"]."', '".$_POST["image"]."', '".$_POST["cssanimate"]."', '".$_POST["group_name"]."', '".$_POST["group_sort"]."') ";

if (!mysqli_query($con,$sql))
  {
  die('Error: ' . mysqli_error($con));
  } echo "Added!";

mysqli_close($con);


?>

1 个答案:

答案 0 :(得分:2)

如果您有80个具有此名称的元素:

name='username'

那么这段代码将如何知道使用哪一个?:

$_POST['username']

基本上,当您的浏览器构建表单提交时,相同名称的每个连续元素都会覆盖前一个元素。所以你最后只得到最后一条记录。

相反,给它们一个数组样式的名称:

name='username[]'

(对所有重复的表单元素重复。)

然后在PHP代码中,这本身就是一个数组:

$_POST['username']

你可以遍历那个数组:

for ($i = 0; $i < count($_POST['username']); $i++) {
    $username = $_POST['username'][$i];
    $title = $_POST['title'][$i];
    // etc.
}

这假设您的所有数组都是相同的长度。其中,鉴于此HTML,我认为应该。但是为了以防万一,您可以添加错误检查。无论哪种方式,循环的每次迭代都会构建等同于&#34;记录&#34;已提交。

从那里你应该能够用这些变量构建你的SQL查询。 ,请注意您的当前方式非常不安全且对 SQL注入持开放态度。要纠正错误,this is a good place to start

附注:您的HTML具有无效的id属性。此外,如果您想要在该循环中指定id属性,那么您需要确保它们在某种程度上不同。 HTML中重复的​​id无效。