[英]php - insert multiple rows into mysql from form loop
所以我要在一個頁面上顯示多個html表單-效果很好,因為我只是使用一個簡單的循環將其顯示80次,但是我面臨的問題是我想采用所有80個表單並將它們提交到數據庫的多行中。 它只提交最后一張表格(80)
如果有人可以幫助我發現問題,我將不勝感激! 在提交此問題之前,我已經進行了一些搜索,但似乎找不到答案。
這是我的表單生成器
<?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 $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); ?>
如果您有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,我認為應該如此。 但是您可以為此添加錯誤檢查,以防萬一。 無論哪種方式,循環的每次迭代都會構建與提交的“記錄”相同的變量。
從那里,您應該能夠使用這些變量構建SQL查詢。 但是 ,請注意,您當前執行此操作的方法極其不安全,並且可以使用SQL注入 。 要糾正這一點, 這是一個不錯的起點 。
旁注:您的HTML具有無效的id
屬性。 另外,如果要在該循環中指定id
屬性,則需要確保它們有所不同。 HTML中重復的id
無效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.