2014-01-13 83 views
1

我有以下輸出: 「?ID = 12345」用PHP困惑While循環

12345: 1 
1234: 7 
1234: 7 
1234: 6 
1234: 4 

它是從其中結尾的URL產生。應該發生的事情是,id在數據庫中存在時會增加1,或者當數據庫不存在時添加。 1234年產生的最後結果是正確的,但我怎樣才能阻止1234年前的結果被製造出來?

while ($row = $database->row()->fetch()) { 
    $id = $row["id"]; 
    $count = $row["count"]; 

    if ($id != $_GET["id"]) { 
     $insert = new MySQLConnect(); 
     $insert->query("INSERT INTO links VALUES (:id, 1);"); 
     $insert->run(array("id" => $_GET["id"]); 
    } elseif ($id == $_GET["id"]) { 
     $update = new MySQLConnect(); 
     $update->query("UPDATE links SET count=count + 1 WHERE id=:id;"); 
     $update->run(array("id" => $_GET["id"]); 
    } 

} 

編輯:

function display_data() 
{ 
    $display = new MySQLConnect(); 
    $display->query("SELECT * FROM links;"); 
    $display->run(); 

    while ($row = $display->row()->fetch()) { 
     $id = $row["id"]; 
     $count = $row["count"]; 

     $GLOBALS["output"] .= $id . ": " . $count . "<br/>"; 
    } 

} 
+5

只是一個側面說明了ID:什麼如果我去'?id ='','')會發生? DROP TABLE鏈接; --'? –

+1

你知道什麼是循環嗎?差異foreach和while? – pregmatch

+0

[小心Bobby表格](http://xkcd.com/327/) – gtgaxiola

回答

0

你不需要的 「而」 如果你只是想創建/更新被作爲參數

$useId = (int)$_GET["id"]; 
$insert = new MySQLConnect(); 
$insert->query("INSERT INTO `links` (`id`, `count`) VALUES ('$useId', 1) ON DUPLICATE KEY UPDATE `count` = `count` + 1"); 
$insert->run(); 
+0

我試過你的解決方案,但我不斷收到數據庫中的新條目,並且沒有增加任何內容。我得到的輸出是:12345:250 12345:144 12345:1 – user1408643

+0

您應該在ID字段 – cornelb

+0

Cheers cornelb上創建一個主鍵。 – user1408643