为什么我无法将浏览器重定向到index.php页面,如果' id'不存在?

时间:2014-07-25 20:09:59

标签: php

我尝试将没有现有ID的查询重定向到主页,但总是会收到由

等条目引起的错误
"<?php echo $row['script']; ?>" 

如果我确实检查了&#39; $ result&#39;: &#34;未定义的变量:第37行的C:\ www \ sts3 \ page.php中的行...&#34;

require_once("php/db_connect.php"); 
if(isset($_GET['id'])) {
  if( $_GET['id'] == '' || !is_numeric($_GET['id']) )  {
    $id = 1;
  }
  else {
    $id = mysqli_real_escape_string($connection, $_GET['id']);
    $query = "SELECT * FROM content WHERE ID = '" . $id . "'";
    $result = mysqli_query($connection, $query);
    if (empty($result)) {
      header("Location:index.php"); // NOT WORKING HERE
      die();
    }
    $row = mysqli_fetch_assoc($result);
  }
}

3 个答案:

答案 0 :(得分:0)

我认为,当empty($result))不应为空时,即使查询未返回任何内容,您的问题也可能是$result。相反,请尝试使用mysqli_num_rows

require_once("php/db_connect.php"); 
if(isset($_GET['id'])) {
  if( $_GET['id'] == '' || !is_numeric($_GET['id']) )  {
    $id = 1;
  }
  else {
    $id = mysqli_real_escape_string($connection, $_GET['id']);
    $query = "SELECT * FROM content WHERE ID = '" . $id . "'";
    $result = mysqli_query($connection, $query);
    if (mysqli_num_rows($result) > 0) {
      header("Location:index.php"); // NOT WORKING HERE
      die();
    }
    $row = mysqli_fetch_assoc($result);
  }
}

答案 1 :(得分:0)

$result如果成功执行则不是empty,您需要从$ result中获取行数以确定您是否找到了结果:

if (mysqli_num_result($result) > 0) {
    header('Location: index.php');
    exit;
}

您还应该验证/过滤您的输入。

PHP提供了一组最小的验证/过滤功能:PHP Filter functions

在您的情况下,您应该过滤INT

$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
if (!$id) { // Validation fails. It is recommended you return an error to your user, but in this case I'm going to follow your logic.
    $id = 1;
}
// Do your database queries from here...

答案 2 :(得分:0)

$ row定义在&#34; if(isset($ _ GET [&#39; id&#39;]))&#34; -block我想你离开这个if-block时就会这样将被取消,因为它之前没有定义。

在其中一个较新版本的php中,您无法使用isset()检查数组索引,最好使用数组array_key_exists()。