【问题标题】:Undefined Index PHP, MySQL, PhpMyAdmin未定义索引 PHP、MySQL、PhpMyAdmin
【发布时间】:2017-03-25 04:15:23
【问题描述】:

错误:

( ! ) 注意:未定义索引:第 10 行 C:\wamp\www\php\myJoyofPHP\viewcar.php 中的 VIN

09 <?php include 'db.php';  
10 $vin = $_GET['VIN'];
11 $query = "SELECT * FROM INVENTORY";
12 /* Try to query the database */
13 if($result = $mysqli->query($query)){
14 //Don't do anything if successful.
15 }
16 else
17 {
18 echo "Sorry, a vehicle with VIN of $vin cannot be found ".mysql_error()."<br>";
19 }
20  
21 //Loop through all the rows returned by the query, creating a table row for each
22 while ($result_ar = mysqli_fetch_assoc($result)){
23  $year = $result_ar['YEAR'];
24  $make = $result_ar['Make'];
25  $model = $result_ar['Model'];
26  $trim = $result_ar['TRIM'];
27  $color = $result_ar['EXT_COLOR'];
28  $interior = $result_ar['INT_COLOR'];
29  $mileage = $result_ar['MILEAGE'];
30  $transmission = $result_ar['TRANSMISSION'];
31  $price = $result_ar['ASKING_PRICE'];
32 }
33 echo "$year $make $model </p>";
34 echo "<p>Asking Price: $price </p>";
35 echo "<p>Exterior Color: $color </p>";
36 echo "<p>Interior Color: $interior </p>";
37
38 $mysqli->close();
39 ?>

目前我并不关心安全性,因为我现在只是在学习基础知识。所以请不要回复说这是易受攻击的代码,我知道。

我在 PhpMyAdmin 的“汽车”数据库中有一个名为“VIN”的列,其中包含多个值,但由于某种原因,出现了此错误。此外,在错误下方,会出现一个数据集。

为什么会出现此错误? 为什么我会收到错误,尤其是如果存在具有相同列名“VIN”的数据库? 当我在上面输入以下代码时,也会出现变量错误。

$value = isset($array['VIN']) ? $array['VIN'] : '';
$value = array_key_exists('VIN', $array) ? $array['VIN'] : '';

另外,这是包含的 db.php 文件:

<?php 
//localhost, root, password, database
$mysqli = new mysqli('localhost','root','','cars');
/*check connection */
if (mysqli_connect_errno()){
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
//select a database to work with
$mysqli->select_db("cars");

?>

正如我所提到的,我知道这是一个易受攻击的数据库。没有密码。请不要发布任何关于此的内容,因为我需要完全了解基础知识。谢谢。

【问题讨论】:

  • vin 未定义然后定义它....
  • mysql_error 在这里使用不正确,它来自错误的函数系列。尝试并坚持使用mysqli 面向对象的界面,以避免这样的失误。

标签: php mysql indexing phpmyadmin undefined


【解决方案1】:

首先,不是“错误”,而是“通知”。你几乎可以一直忽略它。 它的平均“VIN”索引未在 $_GET 全局变量/数组中定义。 那就是'VIN'不要出现在url参数中。 PHP 假定它是一个空字符串。

也许最好的解决方案是这样的:

if( isset($_GET['VIN']) && $_GET['VIN'] != "" ){ // you can add others validations like string lenght or regex
  $vin = $_GET['VIN'];
  $query = "SELECT * FROM INVENTORY";
  //...all your code...
}else{
  // Do something when no VIN comes in the url
}

显然您需要使用带有 de VIN 参数的脚本: .....viewcar.php?VIN=ABC123

【讨论】:

    【解决方案2】:

    您可以使用以下代码,通知消息将消失,它只是一个通知说 $vin 没有定义,因为有时 $vin 是空的,它没有从 $_GET 中获取任何值

    if (isset($_GET['VIN']))
    {
       $vin = $_GET['VIN'];
    }
    

    【讨论】:

    • 这似乎有效,但是当我在它下面的行输入$query = "SELECT * FROM INVENTORY WHERE VIN='$vin'"; 时,会出现另一个通知说 ( ! ) 注意:未定义的变量:C:\wamp\www 中的 vin \php\myJoyofPHP\viewcar.php 在第 14 行 如果 vin 变量直接写在这一行上方,为什么会说它丢失了?
    • 如果 $vin 没有定义你不能使用 select * from inventory where VIN='$vin',要么你必须改变查询或者你可以给 $vin 分配空白
    • 请在url中检查Vin变量是否可用
    【解决方案3】:

    此行导致您收到警告$vin = $_GET['VIN'];,这意味着您没有在请求中收到VIN,您需要将其检查为

    if (isset($_GET['VIN'])) {
     //rest of the code
    }
    

    【讨论】:

      【解决方案4】:

      简短:

      $vin = @$_GET['VIN'];
      

      如果VIN 没有被输入

      • 不会有错误信息;
      • $vin 将是 NULL
      • 稍后,您可以使用if (isset($vin)) ...,轻松阅读。

      【讨论】:

        猜你喜欢
        • 2015-03-27
        • 1970-01-01
        • 2015-06-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多