0

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

我的意思是,我通过 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>
4

3 回答 3

1

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

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

另请注意,您不能在header语句之前向浏览器输出任何内容。

于 2013-08-13T04:13:58.913 回答
0

有两件事要检查

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

这里可以是伪代码

<?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>
于 2013-08-13T04:33:43.633 回答
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
于 2013-08-13T04:49:39.527 回答