如何在PHP中获取URL ID? (对于mysql_query UPDATE)

时间:2011-11-15 14:24:06

标签: php mysql

我想为名为spiral url的脚本添加一个编辑按钮,但问题是我无法获取URL ID。这就是我尝试过的:

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

我做错了什么?

我也通过电子邮件发送了作者和他的回复:

  

“我建议您在Stackoverflow上发帖 - https://stackoverflow.com/。   我很乐意帮助你,但我不知道你做错了什么。我还在学习PHP。“

4 个答案:

答案 0 :(得分:6)

  1. 您对SQL注入攻击持开放态度。
  2. 您正在使用@运算符来解决错误。 从不抑制错误
  3. 你没有检查mysql_query()的返回值,它在失败时返回一个布尔值为FALSE。
  4. 废弃该代码并使用此代码:

    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()内容。

答案 1 :(得分: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");

答案 2 :(得分:0)

如果网址如下:domain.com/something.php?id=65

$_GET['id']应该等于65

如果没有id,那么当您尝试访问$_GET['id']时,您将收到错误。

还尝试删除@符号(禁止PHP警告)。

你可以向bobby-tables

开放

另外(旁注),让一个知道他们在做什么的新开发人员; - )

答案 3 :(得分:0)

你检查了网址

http://www.somewebsite.com?id=56&other_car=test

专门针对“?”在url结束之后还检查所有部件是否被&符号分解。

无法通过

查看所有可用的get数组变量
print_r($_GET);