2011-11-15 45 views
1

我要添加編輯按鈕一個叫螺旋URL腳本,但問題是,我不能得到的URL ID。這是我試過的:如何在PHP中獲取URL ID? (爲的mysql_query UPDATE)

/** get url id **/ 
$id = isset($_GET['id']) ? $_GET['id'] : ''; 
@mysql_query("UPDATE short_urls SET long_url = 'test' WHERE url_id = '".$id."' LIMIT 1"); 

我在做什麼錯?

而且我通過電子郵件的作者和他的迴應:您發佈#2

「我推薦 - https://stackoverflow.com/ 我很願意幫助你,但我沒有看到你在做什麼錯了我。米仍然學習PHP。「

+5

你是放入一個查詢字符串之前沒有逃避用戶輸入自己打開SQL注入攻擊。 – Crontab

+0

你打電話來啓動這個腳本的網址是什麼?作爲一個便箋,你在這裏對SQL注入開放。也許你可以使用PDO準備好的聲明嗎? – Molochdaa

+0

另外,不要在mysql_query()之前使用錯誤抑制器@ –

回答

6
  1. 你是SQL注入攻擊敞開查看所有可用的GET數組變量。
  2. 你supressing錯誤與@運營商。 NEVER抑制錯誤
  3. 你不檢查的mysql_query)的返回值(,它失敗時返回布爾值FALSE。

廢料的代碼,並使用此:

if (!isset($_GET['id'])) { 
    die("missing query parameter"); 
} 
$id = intval($_GET['id']); 
if ($id === '') { 
    die("Invalid query parameter"); 
} 
$sql = "UPDATE short_urls SET long_url = 'test' WHERE url_id=$id LIMIT 1"; 
$result = mysql_query($sql); 
if ($result === FALSE) { 
    die("Mysql error: " . mysql_error() . $sql); 
} 

請注意,我假設id參數是數字。如果不是,那麼刪除intval()的東西。

0

如果URL是這樣的:domain.com/something.php?id=65

$_GET['id']應該等於65

如果沒有id有那麼當您嘗試訪問$_GET['id'],你會得到一個錯誤。

也可以嘗試刪除該@符號(抑制PHP警告)。

。你bobby-tables

而且(旁註)waaaay開放,得到一個新的開發誰知道你檢查URL他們在做什麼;-)

2

確保的$_GET['id']值實際上有一個值。您的網址看起來像http://myurl.com/index.phtml?id=yourvalue。你可以做一個這樣做:

print "id=".$_GET['id']; 

而且,只要做一個查詢時,請務必逃脫可以由用戶進行操作的任何和所有的變量。如果沒有這樣做,你會打開自己的SQL注入攻擊。

mysql_real_escape_string - http://php.net/manual/en/function.mysql-real-escape-string.php

@mysql_query("UPDATE short_urls SET long_url = 'test' WHERE url_id = '".mysql_real_escape_string($id)."' LIMIT 1");