2011-10-27 39 views
0

我传递变量,以我的page?title=fred页面,但我想重定向到另一个页面,如果它是错误的值(未在数据库中)例如:fredd麻烦与传递有效变量来查询


第一部分检查变量是否为空。这似乎在工作。

//get variable from title 
if(!isset($_GET['title']) || empty($_GET['title'])) { 
    echo "no variable"; 
} 
else { 
    $get_title = mysqli_real_escape_string($db, $_GET['title']); 
    $title = str_replace("-"," ", $get_title); 
} 


我无法检查,如果我传递变量是在数据库中,如果它不重定向到主页。

$query = mysqli_query($db, "SELECT title FROM persons WHERE title = '$title'"); 
//check that variable is in the database 
if(!isset($query)){ 
    while($row = mysqli_fetch_assoc($query)){ 

    echo $row['title']; 

    } 
// mysqli_free_result($query); 
} 
else {echo "variable does not exist";} ?> 


有人可以告诉我什么,我做错了,如何解决呢?谢谢你,

回答

2
if(!isset($query)){ 

$query始终设置(您只需设置它),所以你想要的代码永远不会执行。

希望此相反:

if (!$query) { 
    echo "Query returned error"; 
} else if (mysqli_num_rows($query) < 1) { 
    echo "Variable does not exist"; 
} else { 
    while ($row = mysqli_fetch_assoc($query)){ 
    echo $row['title']; 
    } 
} 
+0

你让它看起来很简单。谢谢! – checkenginelight

1

isset($查询)将永远是真实的 - mysqli_query()总是返回一些东西,哪怕它只是一个布尔值false值。

$result = mysqli_query(..); 
if ($result === false) { 
    die(mysqli_error()); 
} 
if (mysqli_num_rows($result) == 0) { 
    echo "variable does not exist"; 
} else { 
    while(...) { 
     ... 
    } 
} 
+0

真正的问题,而不是sarky评论:你需要为返回资源或布尔值的函数执行'$ result === false'吗?我的理解是,任何资源,无论状态如何,如果直接作为布尔值进行测试,将始终评估为“真”。 – DaveRandom

+0

这是一个很好的习惯。虽然在这种情况下,是的,这在其他地方是过分的(strpos是一个特别讨厌的),这是非常重要的。 –

+0

够公平,不能与此争论。无论如何,我倾向于这样做,因为我已经被JSLint殴打成习惯了,并且已经进入我的PHP,但我只是想知道除了可读性/最佳实践之外是否有其他原因 - 这是是仍然只是'($ result)'的地方。 – DaveRandom