2012-10-19 67 views
0

那麼我是一個絕對的初學者考慮PHP/HMTL編程,我現在堅持這些問題幾天。

首先,我創建了包含以下列(id,名稱,姓氏,電話號碼,電子郵件)的Mysql表。然後,我成功創建了閱讀表的表單。現在,我想讀,然後再使用下面的代碼編輯特定行:

41 <?php 
42 $con = mysql_connect("localhost","username","password"); 
43 mysql_select_db("database", $con); 
44 $id=$_GET["id"]; 
45 $result = mysql_query("SELECT * FROM Table where id='$id'"); 
46 $row = mysql_fetch_array($result); 
47 ?> 

但我得到的是以下錯誤: 注意:未定義指數:ID在C:\ XAMPP \ htdocs中\ contacts_edit.php上44行

任何幫助將不勝感激!

+2

錯誤說你你必須從你的html頁面用GET方法發送id參數 –

+1

你是否最後用'?id = 123'來調用你的腳本? – Sirko

+0

您正在使用[過時的數據庫API](http://stackoverflow.com/q/12859942/19068),並且正在將自己暴露給[SQL注入攻擊](http://bobby-tables.com/) API會讓你更容易[防守](http://stackoverflow.com/questions/60174/best-way-to-prevent-sql-injection-in-php)。 – Quentin

回答

-1

你應該有這樣的事情

http://site.com/contacts_edit.php?id=1 

而且在contacts_edit.php那麼你可以使用$_GET['id']

再見

+0

由於輸入處於用戶的控制之下,因此更改輸入到程序並不是解決方案。該程序需要足夠健壯以處理錯誤的輸入。 – Quentin

+0

嗨,並不是要求最佳實踐,他是在問一個具體的錯誤。顯然他應該保護他的應用程序,但我們不在這裏回答,否則,你應該在這裏使用$ _POST和$ _GET幾乎每個問題都寫同樣的技巧。我的答案告訴我如何使用他所擁有的 – PatomaS

6

您沒有設置得到您的網址參數。這就是爲什麼ID沒有在您的全球定義。

爲了防止在此之前問題檢查變量:

$id = isset($_GET['id']) ? (int)$_GET['id']: 0; 

或者

if (!isset($_GET['id']) { 
    $_GET['id'] = 0; 
} 

短提示你...

你真的應該看看SQL-注射你已經構建了一個非常大的安全漏洞。

請勿直接在您的SQL查詢中使用$ _GET$ _POST。您應該更喜歡使用PDO或MySQLi準備的語句。如果你想用你的解決方案,然後投你的ID,以這樣一個整數值:

$id = (int)$_GET['id']; 

那麼你有一個默認值0時,其未設置。

+0

@ user1758545是你的問題回答了?那麼你應該標記一個答案是正確的。 – Stony

2

你必須先檢查該ID設置

<?php 

$con = mysql_connect("localhost","username","password"); 
mysql_select_db("database", $con); 

if(isset($_GET['id'])) { 

    $id=$_GET["id"]; 
    $result = mysql_query("SELECT * FROM Table where id='$id'"); 
    $row=mysql_fetch_array($result); 
} 
?> 

更好的方法是使用PDO或mysqli的。

How can I prevent SQL injection in PHP?

+0

我也會逃避價值。但是這將解決這個問題。 – CharliePrynn

+0

這對SQL注入很脆弱(就像原始問題中的代碼一樣),不應該按原樣使用。 – Quentin

+0

該ID未設置。我想要程序自動檢測id,取決於我想要讀取/編輯哪一行。 – user1758545

-1

你應該做這樣的事情:

$con = mysql_connect("localhost","username","password"); 
mysql_select_db("database", $con); 
if(isset($_GET['id'])) { 
    $id=$_GET["id"]; 
    $result = mysql_query("SELECT * FROM Table where id='$id'"); 
    $row = mysql_fetch_array($result); 
} 
+0

這是一個不同點的遊戲,它沒有解釋任何東西,並且(像原始問題中的代碼一樣)容易受到SQL注入的影響。 – Quentin

1

我這樣做,併爲我工作

<?php 
$con = mysql_connect("localhost","***","***"); 
mysql_select_db("***", $con); 
if(isset($_GET["id"]) && !empty($_GET["id"])){ 
    $id= $_GET['id']; 
    $result = mysql_query("SELECT * FROM core_usuarios where id=".$id); 
    $row = mysql_fetch_array($result); 
    print_r($row); 
} 
?> 

順便說一句,如果你想連接到一個數據庫,並你使用的是「純PHP」,如果你使用PDO PHP http://www.php.net/manual/en/pdo.construct.php