2011-09-06 85 views
0

我试图从URL中获取一个变量,但由于某种原因,我无法让它工作。这一切都来自另一个网站的形式,这就是为什么我需要从URL中获取它。这就是我现在所拥有的:PHP中的URL变量MySQL查询

if (isset($_GET['PTS'])) { 
    $sPTS = htmlentities($_GET['PTS']); 

if(isset($_GET['submit'])) 
    { mysql_query("UPDATE table1 SET $sPTS=1, ENTRY=5") or die (mysql_error()); }} 

感谢您的帮助......我还是新来此学习。

+0

所以列名在查询字符串中的'PTS'值?即'foo.php?CustomerID = abcd' ...并且您希望将您的SQL字符串构建为拥有'CustomerID = 1'? –

+0

'$ sPTS'应该是字段/列而不是查询中的值?你是否从'htmlentities($ _ GET ['PTS']);'?处理URL时,使用'urldecode'。 – Josh

+0

您是否收到错误消息?哪里和什么? – Kevin

回答

0

尝试

if(isset($_GET['submit'])) 
{ mysql_query("UPDATE table1 SET `".$sPTS."`=1, `ENTRY`=5") or die (mysql_error()); }} 

你也应该使用那些$ _GET值

$sPTS = mysql_real_escape_string(htmlentities($_GET['PTS'])); 
+0

它可能与GET值没有任何关系,但是它与所有数据库都没有被黑客攻击有关。 – 2011-09-06 22:41:12

+0

@jordan这个答案是**不**安全的SQL注入,即使使用mysql_real_escape_string。 -1 –

+0

@Pekka不是为了确切的目的而设计的,为了使输入值安全地用于数据库? – 2011-09-07 16:07:29

3

大约有,我想指出的代码的一些担忧mysql_real_escape字符串,它们可能会或可能不会解决这个问题。

  • 您最终会使用htmlentities()将是一个字段名称。也许一小部分数据检查会更好。
  • 您允许GET语句指定没有限制的字段名称。这非常危险
  • UPDATE语句中没有where子句。表中的所有记录都将被更新。
  • 如果通过POST提交,它不会在这里打。我只是在很可能忽略这一点的时候向你提及这一点。 $_REQUEST更适合您的使用(比$_GET)?
+0

你的回答比我的好:) – thelastshadow