2012-09-24 118 views
0

我有一個表單,用戶可以在其中添加更多字段,因爲他想...如何在數據庫中存儲動態添加行的值

他可以添加1,2,3行....田..

字段被成功添加,我用的是這裏的代碼,

<?php 
echo ' 
<form method="post" action=""> 
    <input type="hidden" name="mod" value="'.$mod.'" /> 
    <table style="width: 700px"> 
    <tr> 
     <th>Description</th> 
     <th>Quantity</th> 
     <th>Price</th> 
    </tr>'; 

// Loop to prepare the display of 100 product lines 
for ($i=0; $i<100; $i++) { 

    if ($text['quantity'][$i] == "") $text['quantity'][$i] = 1; 
    if ($text['unit'][$i] == "") $text['unit'][$i] = "0.00"; 
    // Display only the first line 
    if ($nbr_ligne == 0) $nbr_ligne = 1; 
    if ($i >= $nbr_ligne) $display = 'style="display:none"'; 
    echo ' 
    <tr id="cell'.$i.'" '.$display.'> 
     <td> 
      <textarea name="text[detail]['.$i.']">'.stripslashes($text['detail'][$i]).'</textarea> 
      <br /> 
      <a href="javascript:void(0)" onclick="javascript:document.getElementById(\'cell'.($i+1).'\').style.display=\'table-row\'; this.style.display=\'none\'">[+]</a> 
     </td> 
     <td> 
      <input name="text[quantity]['.$i.']" id="q'.$i.'" value="" size="4" /> 
     </td> 
     <td> 
      <input name="text[unit]['.$i.']" id="u'.$i.'" value="" size="7" /> USD 
     </td> 
    </tr>'; 
} 

echo ' 
    </table> 
    <input type="submit" name="save" value="Save" /> 
</form> 
'; 
?> 

現在我想將這些字段的值存儲在數據庫中。

我用這個代碼:

if(isset($_POST['save'])) 
{ 
    echo mysql_error($db); 


     extract($_POST); 
     $insert=mysql_query(" insert into add (description, quantity, price) values ('{$text['detail'][$i]}','{$text['quantity'][$i]}','{$text['unit'][$i]}')") or die("unable to insert"); 
} 

,但它不工作。 PLZ幫助我的傢伙。我非常需要它。

+0

你得到什麼錯誤? – Gapchoos

+0

沒有錯誤,但值不存儲在數據庫中。 –

+0

@Gapchoos:屏幕上顯示的輸出是「無法插入」 –

回答

0

這裏的問題是,$我沒有在你的腳本初始化用於保存到數據庫。您需要循環播放0到100,如果沒有數字,則需要BREAK。您也正在使用reserved keyword添加。在保留的關鍵字上使用反引號。

extract($_POST); 

foreach(range(0,100) as $i){ 
    if(isset($text['detail'][$i]) && isset(isset($text['quantity'][$i]) && isset(isset($text['unit'][$i])){ 
     $insert= mysql_query(" INSERT INTO `add` (`description`, `quantity`, `price`) VALUES ('".$text['detail'][$i]."','".$text['quantity'][$i]."','".$text['unit'][$i]."')") or die(mysql_error()); 
    } 
    else{ 
     break; 
    } 
} 

不太喜歡循環插入的方式,但上面的代碼應該可以工作,即使它顯然不是最好的解決方案。一個更好的方法是創建一個單一的INSERT查詢插入多行:

INSERT INTO example (name, age) 
VALUES ('John', 24), ('Katrina', 21), ('Michael', 22), ('Hui Ling', 25), ('Catherine', 29) 

如果必須循環在不同的查詢,您應該使用性能方面的原因準備好的語句。

其他問題:

  1. 你打開SQL injection
  2. 您正在使用不再推薦的mysql函數。改用PDO或mysqli。
+0

沒有好友。它也有相同的輸出,「無法插入」...但thanx來幫助我。嘗試不同的東西來解決這個問題我認爲問題是別的。 –

+0

代替或死(「無法插入」)使用或死(mysql_error()) –

+0

這是錯誤。你的SQL語法有錯誤;檢查與您的MySQL服務器版本相對應的手冊,在第1行的'add(description,quantity,price)values('','1','0.00')'附近使用正確的語法 –

0

你需要把MySQL查詢在一個循環中,如果$ i等於行的NR補充說:

if(isset($_POST['save'])) 
{ 
for ($e = 1; $e <= $i; $e++) { 
$insert=mysql_query(" insert into add (description, quantity, price) values ('".$text['detail'][$e]."','".$text['quantity'][$e]."','".$text['unit'][$e]."')") or die("unable to insert"); 
} 
} 
+0

這將導致大量的錯誤通知被拋出。 –

+0

@faq:沒有好友。它也有相同的輸出,「無法插入」...但thanx來幫助我。嘗試不同的東西來解決這個問題 –

+0

沒問題的老兄 – faq

相關問題