簡體   English   中英

我正在使用PHP,需要使用while循環插入到sql中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM