PHP - 如果没有结果,重定向到其他页面

时间:2013-08-13 04:07:33

标签: php mysqli

如果没有结果,我想将用户重定向到其他页面。

我的意思是,我通过url传递变量并在第二页上使用,如果变量为空,我可以重定向到另一页。

但是当用户将url中的变量id更改为

index.php?product-tit/=how+to+deal+with%20&%20item-id-pr=15

index.php?product-tit/=how+to+%20&%20item-id-pr=

页面上没有显示任何内容,所以在上述情况下我是否可以重定向到其他页面?

$title = urldecode($_GET['product-tit/']);
$id = $_GET['item-id-pr'];
$mydb = new mysqli('localhost', 'root', '', 'database');

if(empty($title) && empty($_GET['item-id-pr'])){
header('Location: products.php');
}
else{
$stmt = $mydb->prepare("SELECT * FROM products where title = ? AND id = ? limit 1 ");
$stmt->bind_param('ss', $title, $id);
$stmt->execute();
?> 
<div>
<?php
$result = $stmt->get_result();
 while ($row = $result->fetch_assoc()) {
echo wordwrap($row['price'], 15, "<br />\n", true); 
}
$mydb->close ();}
?>
</div>

3 个答案:

答案 0 :(得分:1)

你的条件要求两个变量都是空的,如果要在任何空的时候重定向,你应该使用OR(||):

if(empty($title) || empty($_GET['item-id-pr'])){
  header('Location: products.php');
  // make sure nothing more gets executed
  exit();
}

另请注意,在header声明之前,您无法向浏览器输出任何内容。

答案 1 :(得分:0)

有两件事需要检查

  1. 检查传递的变量是否具有某种值。在这种情况下,您已经应用了重定向。
  2. 如果用户更改网址参数值,请参阅示例中的问题。您需要验证If数据库是否返回与标题和ID对应的任何行。如果没有将用户重定向到其他页面。
  3. 这里可以是伪代码

    <?php
    
    $id = $_GET['item-id-pr'];
    $mydb = new mysqli('localhost', 'root', '', 'database');
    
    // I am assuming variable name is "product-tit"
    $title = urldecode($_GET['product-tit']);
    
    if(trim($title) == "" || trim($_GET['item-id-pr']) == ""){
        header('Location: products.php');
        exit;
    }
    $stmt = $mydb->prepare("SELECT * FROM products where title = ? AND id = ? limit 1 ");
    $stmt->bind_param('ss', $title, $id);
    $stmt->execute();
    $result = $stmt->get_result();
    
     if( $result->num_rows == 0 )  {
        // redirect user
         header('Location: products.php');
         exit;
     }
    ?> 
    <div>
    <?php
     while ($row = $result->fetch_assoc()) {
        echo wordwrap($row['price'], 15, "<br />\n", true); 
    }
    $mydb->close ();
    ?>
    </div>
    

答案 2 :(得分:0)

测试$_GET参数是否已设置且之前 将其分配给其他变量并执行其他操作。

<?php
if (!isset($_GET['product-tit/'], $_GET['item-id-pr'])
    || empty($_GET['product-tit/'])
    || empty($_GET['item-id-pr']))
{
    header('Location: products.php');
    // although note that HTTP technically requires an absolute URI
    exit;
}
// now assign $title and $id, initialize the db, etc