2016-08-19 48 views
0

我希望有人可以幫助我。我在這裏找到了一篇文章,允許用戶在文本框中鍵入單詞,並用逗號分隔,它將每個單詞分別添加到MySQL數據庫中。我試圖編輯它以匹配我有的表格,但它不起作用。從用戶輸入添加行列到mysql數據庫

這裏是PHP/HTML:

<?php 
    //Connect safely to your database 
    try { 
     $db = new PDO("mysql:host=localhost;dbname=DBNAME", 'USER', 'PASSWORD'); 
     $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
     $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_ASSOC); 
    } catch (PDOException $e) { 
     die('Cannot connect to mySQL server. Details:'.$e->getMessage()); 
    } 

    $i=1; 
    if ($_SERVER['REQUEST_METHOD']=='POST' && !empty($_POST['words'])) { 
     $sql = "INSERT INTO rank (id, rank, position) VALUES ('$i', ':word', '$i')"; 
     $stmt = $db->prepare($sql); 
     $stmt->bindParam(':word', $word); 

     foreach (explode(',', $_POST['words']) as $word) { 
      $word = trim($word); 
      if (empty($word)) { 
       continue; 
      } 
      $stmt->execute(); 
      $i++; 
     } 
    } 
    //Your form 
?> 
<h1>Words</h1> 
<form method="POST" action=""> 
    <input type="text" name="words"/> 
    <input type="submit" name="submit" value="Submit"/> 
</form> 

秩表具有ID是一個自動增量INT(10),秩是VARCHAR(50),和位置,其爲int(10)。身份和位置應增加每個等級1,等級2,等級3等等。排名第1,是[1,等級1,1,2級是[2,排名2,2],等等

我不斷收到:

[19-Aug-2016 10:49:14 America/Chicago] PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1' for key 'PRIMARY'' in /home/wiredtutorial/public_html/ranks.php:26 
Stack trace: 
#0 /home/wiredtutorial/public_html/ranks.php(26): PDOStatement->execute() 
#1 {main} 
    thrown in /home/wiredtutorial/public_html/ranks.php on line 26 
+1

確保您的'等級'表中的ID字段設置爲自動遞增。然後你可以從你的'UPDATE'語句中刪除'id'。 – pmahomme

+0

爲什麼不顯示等級,因爲你需要他們?不要保存電子郵件 – Drew

+0

我試圖讓管理員第一次設置它,通過表單添加他們自己的等級。 所以,舉例來說,如果我的名單看起來像:1級,2級,酷派排名,中超排名,那就加入到行列表所示: 1,等級1,1 2,等級2, 2 3,酷排名,3 4,超級排名,4 –

回答

0

出現你的錯誤,因爲你正在嘗試輸入已存在的id。您在查詢中輸入的$i不是像:word這樣的綁定參數。這是一個硬編碼的值。因此,在循環中使用$i++增加它對下一個查詢沒有影響。

如果您的id字段設置爲自動遞增,請不要在查詢中提供該字段。數據庫將爲您設置。

至於位置,它應該綁定到變化的參數爲:word是。

$sql = "INSERT INTO rank (rank, position) VALUES (:word, :pos)" 
$stmt = $db->prepare($sql); 
$stmt->bindParam(':word', $word); 
$stmt->bindParam(':pos', $pos); 
$pos = 0; 

foreach (explode(',', $_POST['words']) as $w){ 
    $word = trim($w); 
    if(empty($word)) continue; 
    $pos++; 
    $stmt->execute(); 
} 
+0

這完美解決。謝謝。 –