2014-04-03 60 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:不要通过设置不需要的变量来占用资源。