2014-04-03 58 views
1

試圖插入到數據庫中,但不必插入到數據庫中的困難:獲取URL參數,並通過鍵入URL中的值插入到數據庫

這裏是網址:

http://student.cs.hioa.no/~s180343/updatedb.php?verdi=22 

這裏驗證碼:

<?php 

$dbhost = "MYSQL-SERVER"; 
$dbuser = "USERNAME"; 
$dbpass = ""; 
$verdi = $_GET['verdi']; 

$conn = mysql_connect($dbhost, $dbuser, $dbpass); 
if(! $conn) 
{ 
    die('Could not connect: ' . mysql_error()); 
} 
$sql = "INSERT INTO test ('id') VALUES (`$verdi`)"; 

mysql_select_db('s180350'); 
$retval = mysql_query($sql, $conn); 
if(! $retval) 
{ 
    die('Could not enter data: ' . mysql_error()); 
} 
echo "Entered data successfully\n"; 
mysql_close($conn); 
?> 
+0

你得到的錯誤是什麼?哪種類型的ID是ID?它看起來像你試圖發送一個字符串,但值是一個整數。 – durbnpoisn

回答

1

你正在做相反的,即對列名添加''和``的價值

$sql = "INSERT INTO test ('id') VALUES (`$verdi`)"; 

應該使用準備語句或至少低於康恩被定義後

$sql = "INSERT INTO test (`id`) VALUES ('$verdi')"; 

開始。

$verdi = mysql_real_escape_string($verdi); 
4

圍繞您的字符串值使用引號。在列名周圍使用刻度。你有它向後:

$sql = "INSERT INTO test ('id') VALUES (`$verdi`)"; 

shjould是

$sql = "INSERT INTO test (`id`) VALUES ('$verdi')"; 

僅供參考,你是大開SQL injections

+0

更不用說mysql_ *函數的棄用了:D – thpl

0

請不要忘記所有的用戶輸入固定到SQL querys。請參閱SQL injection wiki

您的代碼存在問題,在引號中使用有誤。請參閱編輯代碼:

$conn = mysql_connect("MYSQL-SERVER", "USERNAME", $dbpass); 
if(! $conn) 
{ 
    die('Could not connect: ' . mysql_error()); 
} 
mysql_select_db('s180350'); 

$retval = mysql_query("INSERT INTO test ('id') VALUES ('".mysql_real_escape_string($_GET['verdi'])"')", $conn); 

if(! $retval) 
{ 
    die('Could not enter data: ' . mysql_error()); 
} 

echo "Entered data successfully\n"; 

PS:不要通過設置不需要的變量來佔用資源。