2010-10-25 67 views
1

我試圖執行 我有這種頁面的HTML表單:的mysql_query在while循環

Name: <input type="text" id="namebox" value="" name="fields[]" /> <br /> 
Position: <input type="text" id="positionbox" value="" name="fields[]" /> <br /> 

<input type="hidden" name="createcard">  
<input type="submit" value="Create"> 

..和3等領域。我通過POST將這5個表單域傳遞給一個文件process.php,該文件具有以下函數將數組元素插入到mysql數據庫中。

if(isset($_POST['createcard'])){ 
    $this->procCreateCardtheme1(); 
.. 
.. 

    function procCreateCardtheme1(){ 
    global $session; 

      $cardData = $_POST['fields']; 
      $username=$session->username; 
      $sno=1; 
      echo count($cardData); 
      while($sno < count($cardData)) 
      { 
      $v=$cardData[$sno]; 
      echo $v; 
      mysql_query("INSERT INTO carddata VALUES ('$username', $sno, '$v', 1)"); 
      $sno++; 
      } 

現在,上面的echo語句返回預期的輸出,即五個左右的字段。但是mysql_query只執行一次。它只是將第一個條目存儲在數據庫中,而沒有其他內容。即使重新提交表單也不會做任何事情。這只是存儲在數據庫中的一個條目。 任何想法?

+1

在循環中執行查詢不是一個好主意。在循環中形成查詢並在外部執行。 – zerodin 2010-10-25 20:28:45

+1

更改爲'mysql_query(「INSERT INTO carddata VALUES('$ username',$ sno,'$ v',1)」)或die(mysql_error())'告訴我們輸出是什麼。另外,爲了安全起見,一定要逃避用戶輸入數據! – Jason 2010-10-25 20:30:17

+0

感謝您的提示。會這樣做.. – 0xff0000 2010-10-25 20:32:57

回答

2

您是否對carddata表中的username有獨特約束?這將導致第二次插入失敗。

要調試這個你應該增加一些錯誤檢查程序:

mysql_query("INSERT INTO carddata VALUES ('$username', $sno, '$v', 1)") 
    or trigger_error(mysql_error()); 

您可能還需要使用mysql_real_escape_string避免語法錯誤或可能的SQL注入漏洞,如果字符串數據可以包含引號。

+0

我希望它是相同的用戶名。我只需要數組值正在改變。即$ cardData [0],$ cardData [1]等等。 – 0xff0000 2010-10-25 20:27:50

+0

@Hardik Ruparel:你可以在你的問題中發佈'SHOW CREATE TABLE carddata'的輸出嗎? – 2010-10-25 20:29:55

+0

@Hardik Ruparel:你用'1'初始化'$ sno'。我想你應該用'0'來初始化它。 – 2010-10-25 20:31:58