[英]I'm using PHP and need to Insert into sql using a while loop
我得到了一些幫助。 我有一個頁面供用戶輸入多達10行不同的信息。 發貨細節。 我使用循環創建了一個包含表單的頁面..
<?php
session_start();
require("config.php");
require("header.php");
$db = mysql_connect($dbhost, $dbuser, $dbpassword);
mysql_select_db($dbdatabase, $db);
?>
<br><br><br></br>
<form action="insertdispatch.php" method="post">
<body>
<center>
<table>
<tr>
<td><center><b>Ref</td>
<td><b><center>Date</td>
<td><b><center>Service</td>
<td><b> <center>Tracking</td>
</tr>
<?php
$index = 1;
$name = 1;
while($index <= 10){
?>
<td><input type="text"
name="transno<?php echo $index;?>"
id="transno<?php echo $index;?>" />
</td>
<td><input type="text" name="date<?php echo $index;?>"
id="date<?php echo $index;?> "/>
</td>
<td><select name = "service<?php echo $index;?>"><?php
$viewsql = "SELECT * FROM dispatch_service ORDER BY service ASC";
$viewresult = mysql_query($viewsql);
while($row = mysql_fetch_assoc($viewresult)){
?> <option value=<?php echo $row['service'] ;?>>
<?php echo $row['service'] ;?></option>
<?php
}
echo "</select>";?>
<td><input type="text"
name="tracking<?php echo $index;?>"
id="tracking<?php echo $index;?>"/>
</td>
</tr>
<?php $index ++;
}?>
<center>
<td><input type="submit" value="Add Product" />
</form>
</center>
</td>
</tr>
</table>
</center>
<center><a href='javascript:history.back(1);'>Back</a>
</body>
</html>`
我有10個文本框,文本框的名稱將索引的值添加到結尾。 (憑借我有限的編碼經驗,我對自己非常滿意)所以我去了insertdispatch.php頁面,計划是將這些值中的每一個插入到我的表中......現在......我沒有任何線索......我似乎無法弄清楚我將如何做到這一點......
我想我將需要再次使用循環...但我似乎無法弄清楚我將如何調用每個$ _POST值。 我真的不想使用10個不同的插入語句,因為表單的大小可能會增加。 這是我到目前為止...
<?php
session_start();
require("config.php");
$db = mysql_connect("localhost","root","");
if (!$db)
{
do_error("Could not connect to the server");
}
mysql_select_db("hbt",$db)or do_error("Could not connect to the database");
$index = 1;
while($index <= 10){
$insertsql = "INSERT into dispatch (trans_no, date, service, tracking) values ()";
mysql_query($insertsql);
$index ++;
}
//header("Location: " . $config_basedir . "home.php");
?>
我不是在尋找任何人為我完成編碼,但任何提示都會感激不盡! :)
你可以構建一個插入多行的插入語句:
INSERT into dispatch (trans_no, date, service, tracking) values
(1, '2013-09-12', 'myService1', 'on'),
(1, '2013-09-12', 'myService2', 'on'),
(1, '2013-09-12', 'myService3', 'on'),
(1, '2013-09-12', 'myService4', 'on'),
(1, '2013-09-12', 'myService5', 'on');
只需在你的內部構建它,並在while完成后執行它。
要構建此查詢,您需要執行與生成HTML時完全相同的循環,但現在只需從$_POST
獲取值而不是為它們創建html字段...
請注意,在構建HTML時,您將在for循環中觸發靜態查詢。 由於此查詢是靜態的,因此結果也不會更改,最好在外部while循環之外執行該查詢。
(你真的應該閱讀更多關於基本的HTML - tehre甚至在考慮PHP代碼之前就有很多錯誤)。
name="transno<?php echo $index;?>"
這也非常麻煩 - 你為自己創造了額外的工作和復雜功能。 使用數組:
name="transno[]"
如果你確實想要再次引用該項,那么設置索引:
id="transno[<?php echo $index; ?>]"
並且在接收端....使用單個insert語句來添加行 - 而不是10個單獨的行(它會快得多)。
您已經使用$ index設置了while循環 - 您可以簡單地使用它來迭代POST值,因為您使用索引設置了其name屬性。 考慮:
$index = 1;
while($index <= 10){
$trans_no = $_POST["transno$index"];
$service = $_POST["service$index"];
$date = $_POST["date$index"];
$tracking = $_POST["tracking$index"];
$insertsql = "INSERT into dispatch (trans_no, date, service, tracking)
VALUES($trans_no, $date, $service, $tracking)";
mysql_query($insertsql);
$index++;}
雖然將表單輸入設置為數組會更加清晰,但其他人在此處指出。
另外,請閱讀SQL注入。 您需要在將任何用戶輸入插入數據庫之前對其進行清理 - 否則惡意用戶可能會擦除整個數據庫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.