我想为一个名为螺旋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。"
- 你很容易受到SQL注入攻击。
- 您正在抑制
@
操作符的错误。永远不要抑制错误 - 你没有检查mysql_query()的返回值,它在失败时返回布尔值FALSE。
去掉这些代码,使用下面的代码:
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
参数是数字。如果不是,则删除interval()。
确保$_GET['id']
的值实际上有一个值。您的URL看起来类似于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");
如果url是这样:domain.com/something.php?id=65
$_GET['id']
应该等于65
如果没有id
,那么当你试图访问$_GET['id']
时,你会得到一个错误。
也尝试删除@
符号(抑制PHP警告)。
And you are waaway to bobby-tables
另外(旁注),找一个知道自己在做什么的新开发人员;-)
你检查过网址了吗
http://www.somewebsite.com?id=56& other_car =测试
特别针对url结束后的"?",并检查所有部分是否被"&"分隔。
如果不能通过
查看所有可用的get数组变量print_r($_GET);