这里有一个小问题,位置直接。 有一个页面,用户需要有正确的“代码”来访问该页面,这些链接由URL共享,如http://www.domain.com/index.php?c=65487549 如果用户在没有?c =或只是普通文件名index.php的情况下访问此页面 他们应该被送到另一个地方。
到目前为止我尝试了什么:
if (!isset($_GET['c']) == "") {
header ('Location: http://www.domain.com/another.php');
exit();
} else {
$result2 = $link->query('SELECT code FROM Codes WHERE code="'. (isset($_GET['c'])).'"');
$CodeisValid = mysqli_num_rows($result2);
if ($CodeisValid) {
return true;
} else {
header ('Location: http://www.domain.com/another.php');
exit();
}
}
如果用户拥有来自db的正确代码,则用户应该看到该页面。
有任何线索吗?
谢谢=)
答案 0 :(得分:1)
我会写这样的代码:
<?php
if ('string' == 0) {
echo 'you got me';
}
总是更好地清理用户输入。无论你如何得到它,从形式,从GET,POST等。始终消毒用户输入。
当您只需要一个来自数据库的结果限制您的查询时,这将会加速考虑事情。
始终在if语句中使用严格的比较。为什么?运行以下代码,您将看到原因:
===
如果您使用严格比较'SELECT code FROM Codes WHERE code="'. (isset($_GET['c'])).'"';
,则if将按预期工作。
稍后编辑:
这是错误的
isset
因为1
将返回一个布尔值(true或false),如果为真,则内部字符串将被翻译为''
,如果未设置为public class MyObject
{
public int ID {get; set;}
public string Topic {get; set;}
public string Subject {get; set;}
}
空字符串,则无论如何都是将是一个错误生成器
答案 1 :(得分:0)
我遇到过这种情况。我建议的是
if (empty($_GET['c'])) {
header ('Location: http://www.domain.com/another.php');
exit();
} else {
$result2 = $link->query('SELECT code FROM Codes WHERE code="'. (isset($_GET['c'])).'"');
$CodeisValid = mysqli_num_rows($result2);
if ($CodeisValid) {
return true;
} else {
header ('Location: http://www.domain.com/another.php');
exit();
}
}
我认为这可以胜任。如果没有请评论。希望它有所帮助
答案 2 :(得分:0)
只需删除代码第一行中的 ==“”即可。 在查询中,从那里删除“ isset ”。
isset正在检查变量“是否已设置” - 如果存在。它只返回TRUE或FALSE,因此在查询中您不会查找FALSE或TRUE。
答案 3 :(得分:0)
我猜不是最好的解决方案,但是这个解决方案就像我问的那样。 在.php重定向用户后没有任何内容。 没有或错误的代码后?c =重定向用户。 如果代码正确,请显示页面。
如果有人有更好的版本,我很乐意为所有人提供帮助: - )
if (empty($_GET['c'])) {
header ('Location: http://www.domain.com');
die();
}
if (isset($_GET['c'])) {
$GetCode = htmlspecialchars($_GET['c']);
$result = $link->query('SELECT code FROM FF_Products WHERE code = "'. $GetCode .'" LIMIT 1');
$CodeisValid = mysqli_num_rows($result);
if ($CodeisValid > 0) {
// is valid if set return true here, only shows white page!
} else {
header ('Location: http://www.domain.com');
die();
}
}
答案 4 :(得分:-1)
if (!isset($_GET['c']) == "") {
header ('Location: http://www.domain.com/another.php');
exit();
}
更改为
if (!isset($_GET['c']) && $_GET['c'] == "") {
header ('Location: http://www.domain.com/another.php');
exit();
}