2011-08-20 146 views
1

我有一小段代碼。當表格爲空時,此代碼正常工作,並進入表格。但是,如果我再試一次,那麼這個失敗與錯誤?只插入數據庫一次失敗

我在做什麼錯了?

感謝

// On my Function page 

    function admin(){ 
        connect(); 

        $query = mysql_query("INSERT INTO results 
        (t_id, pos1, pos2, pos3) 
        VALUES ('$_POST[t_id]','$_POST[pos1]','$_POST[pos2]','$_POST[pos3]')") 
        or die ("Error."); 

        $b = "Updated fine</b></a>."; 

        return $b; 
         exit(); 
      } 

    // Then on my main page 

<?php 
    include ('functions.php'); 
    if (isset($_POST['admin'])){ 
    $admin = admin(); 
    } 
?> 

      <div id="content"> 
        <div id="admin"> 
         <form action="" method="post"> 
          <table width="100%" border="0" align="center" cellpadding="3" cellspacing="1"> 
           <tr> 
            <td width="100%"><?php echo "$admin"; ?></td> 
           </tr> 
           <tr> 
            <td width="100%"><label>Track <input type="text" name="track" size="25" value="<? echo $_POST[t_id]; ?>"></label></td> 
       </tr> 
           <tr> 
            <td width="100%"><label>Position 1<input type="text" name="pos1" size="25" value="<? echo $_POST[pos1]; ?>"></label></td> 
           </tr> 
           <tr> 
            <td width="100%"><label>Position 2 <input type="text" name="pos2" size="25" value="<? echo $_POST[pos2]; ?>"></label></td> 
           </tr> 
           <tr> 
            <td width="100%"><label>Position 3 <input type="text" name="pos3" size="25" value="<? echo $_POST[pos3]; ?>"></label></td> 
           </tr> 
           <tr> 
            <td width="100%"><input class="save" type="submit" value="" name="admin"></td> 
           </tr> 
          </table> 
         </form> 
        </div> 
       </div> 
+0

歡迎MysqlInjection,來感覺像在家裏:)! – genesis

+0

你會得到什麼錯誤? –

+1

使用'mysql_error()'查看錯誤。輸出查詢以查看其中的問題。 (什麼@genesis說:http://php.net/manual/en/security.database.sql-injection.php) –

回答

1

沒有看到你的表模式,我只能認爲你有唯一的t_id,並且你想插入相同的ID。

幾種方法來調試:

  • 使用or die ("Error: " . mysql_error());,而不是僅僅or die ("Error.");
  • 檢查表模式:SHOW CREATE TABLE tablename並把它寫下來你的問題,所以我們可以看到,如果它是造成錯誤。
+0

完美的感謝,完美的工作。不知道爲什麼它失敗了,因爲我每次使用的UNIQUE t_id都不一樣。 – John

+0

投票並選擇正確的答案。另外,你能告訴我們是什麼原因造成了問題,以及如何修復它?把它寫在你的答案中,這樣未來的用戶也可以修復他們的代碼。 – ariefbayu

+1

我有t_id作爲一個唯一的id,當表中已經有多行時,會導致錯誤。 – John

0

這是很難猜測。也許你兩次輸入相同的值,並且它們碰巧違反了一些獨特的約束?

但是你犯了另一個錯誤:你忘記打電話mysql_real_escape()。那是bad

0

你能告訴我們錯誤嗎?這聽起來像是你正在碰到主鍵違例,可能是通過嘗試多次插入相同的ID。

除此之外,您的代碼充滿了安全漏洞。

您不應該直接從POST中將變量插入到查詢中。我所要做的就是提交'; DROP DATABASE,我可以徹底破壞你的系統。

此外,您直接從POST注入值到輸入字段,這意味着我可以在我的網站上設置一個按鈕,提交" <script type='text/javascript'>window.location='http://mysite.com'</script>或沿着這些線路並接管您的頁面。

這可能聽起來很簡潔,但你應該做一些Google搜索或者拿起一本關於網站教科書安全問題的書。

編輯:剛纔看到你的學習安全評論。我的建議是積極主動地處理這類事情,因爲被動反應通常太遲而無法解決問題。