如何在PHP中解决未定义的错误

时间:2018-01-05 05:38:48

标签: php

<?php

   $conn = new mysqli("localhost", "root", "", "hcis") or die(mysqli_error());
   $q = $conn->query("SELECT * FROM `vaccine` NATURAL JOIN `itr` WHERE `itr_no` = '$_GET[itr_no]' && `epi_id` = '$_GET[epi_id]'") or die(mysqli_error());
   $f = $q->fetch_array();

?>

这是我的代码。我收到此错误

  

注意:未定义的索引:第25行的C:\ xampp \ htdocs \ thesis \ admin \ epi_print.php中的itr_no

     

注意:未定义的索引:第25行的C:\ xampp \ htdocs \ thesis \ admin \ epi_print.php中的epi_id

我尝试使用Google搜索,发现我必须使用 isset ,但我不知道在哪里放置 isset

5 个答案:

答案 0 :(得分:2)

当您将url变量(用户输入直接)传递给数据库查询时,您的查询很容易受到攻击。

使用isset()检查我们正在使用的变量是否已定义。

更正后的代码应为:

$itr_no = isset($_GET['itr_no']) ? $_GET['itr_no'] : '';
$epi_id = isset($_GET['epi_id']) ? $_GET['epi_id'] : '';

$itr_no = $conn->real_escape_string($itr_no);
$epi_id = $conn->real_escape_string($epi_id);

$conn = new mysqli("localhost", "root", "", "hcis") or die(mysqli_error());
$q = $conn->query("SELECT * FROM `vaccine` NATURAL JOIN `itr` WHERE `itr_no` = '$itr_no' && `epi_id` = '$epi_id'") or die(mysqli_error());
$f = $q->fetch_array();

答案 1 :(得分:1)

  

一次又一次地出现这个未定义的错误

因为,您正在尝试访问未定义的数组的索引。在您的情况下,您尝试从数组itr_no访问索引epi_id$_GET

  1. 验证您的请求的URL查询字符串,如果它包含或可能是您的表单。
    1. 在访问之前检查值isset

      if(isset($_GET['itr_no']) && isset($_GET['epi_id'])){
      

答案 2 :(得分:1)

使用isset()检查您的$ _GET请求值

<?php

   $conn = new mysqli("localhost", "root", "", "hcis") or die(mysqli_error());

   //Checkes Whether itr_no And epi_id is available or not
   //runs when all are available
   if(isset($_GET['itr_no']) && isset($_GET['epi_id'])){
     $q = $conn->query("SELECT * FROM `vaccine` NATURAL JOIN `itr` WHERE `itr_no` = '$_GET[itr_no]' && `epi_id` = '$_GET[epi_id]'") or die(mysqli_error());
     $f = $q->fetch_array();
   }

?>

使用empty()检查$ _GET请求值

<?php

   $conn = new mysqli("localhost", "root", "", "hcis") or die(mysqli_error());

   //Checkes Whether itr_no And epi_id is available or not
   //runs when all are available
   if(!empty($_GET['itr_no']) && !empty($_GET['epi_id'])){
     $q = $conn->query("SELECT * FROM `vaccine` NATURAL JOIN `itr` WHERE `itr_no` = '$_GET[itr_no]' && `epi_id` = '$_GET[epi_id]'") or die(mysqli_error());
     $f = $q->fetch_array();
   }

?>

如果您不想使用,那么在启动时您应该使用检查您的$ _GET请求值,例如

$itr_no = isset($_GET['itr_no']) ? $_GET['itr_no'] : '';
$epi_id = isset($_GET['epi_id']) ? $_GET['epi_id'] : '';

答案 3 :(得分:0)

isset()用于检查变量是否已设置且不是null。详情:https://php.net/manual/en/function.isset.php

因此,在访问isset()之前,您应该使用$variable。例如:

if (isset($example['id']) {
    echo $example['id'];
}

上面的示例确保如果设置了$example['id'],您就可以访问它。如果您没有设置isset,即使echo$example['id']或未定义,null也会运行 - 这会引发错误。

@techiemickey:但是,您错误的原因是您以错误的方式访问var。你喊着用 $ _ GET [&#39; itr_no&#39;] 而不是 $ _ GET [itr_no]

答案 4 :(得分:0)

您需要围绕形成数据,$GET['id'] 您编辑的代码

<?php

    $conn = new mysqli("localhost", "root", "", "hcis") or die(mysqli_error());
    $q = $conn->query("SELECT * FROM `vaccine` NATURAL JOIN `itr` WHERE `itr_no` = '$_GET['itr_no']' && `epi_id` = '$_GET['epi_id']'");
    $f = $q->fetch_array();

  ?>