为什么我得到“未定义的索引”?

Why do I get “undefined index”?

我的网页出现以下 5 个错误:

Notice: Undefined index: town in C:\xampp\htdocs\dispatch1.php on line 51

Notice: Undefined index: location in C:\xampp\htdocs\dispatch1.php on line 52

Notice: Undefined index: incident_type in C:\xampp\htdocs\dispatch1.php on line 53

Notice: Undefined index: time_date in C:\xampp\htdocs\dispatch1.php on line 54

Notice: Undefined index: admin in C:\xampp\htdocs\dispatch1.php on line 55

这是我的输出 table 的代码,它从数据库中获取数据(它确实显示了数据库中的数据):

<?php include("manage_post.php"); ?>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta http-equiv="refresh" content="2" >
</head>

<body>
<div align="center" class="CSSTableGenerator" height="100%">
  <form action="dispatch1.php" method="get" id="dispatch">
 <table width="968" height="248" border="1" align="center" cellpadding="10" cellspacing="0"  rules="rows" id="incidents" style="color:#333333;border-collapse:collapse;text-align:left;">
  <tr style="color:White;background-color:#5D7B9D;font-weight:bold;font-style:italic;">
  <th scope="col">TOWN</th>
  <th scope="col">LOCATION</th>
  <th scope="col">INCIDENT TYPE</th>
  <th scope="col">TIME/DATE</th>
  <th scope="col">ADMIN</th>
  </tr>
  <tr style="color:#333333;background-color:#F7F6F3;font-weight:bold;">
    <?php
    $town = $_POST['town'];
    $location = $_POST['location'];
    $incident_type= $_POST['incident_type'];
    $time_date= $_POST['time_date'];
    $admin = $_POST['admin'];

    $db = mysqli_connect('localhost','root','') or die("Database error"); 
    mysqli_select_db($db, 'mydatabase');  
    $result= mysqli_query($db, "select * from cad"); 
    while($row = mysqli_fetch_array($result))
    {
        echo "<td>" .$row['town'] ."</td>"; 
        echo "<td>" .$row['location'] ."</td>"; 
        echo "<td>" .$row['incident_type'] ."</td>"; 
        echo "<td>" .$row['time_date'] ."</td>"; 
        echo "<td>" .$row['admin'] ."</td>"; 
    }
    ?>
  </tr>
    </table>
  </form>
  </body>
  </html>

然后,这是我的 "manage_post.php" 页面,它将数据从表单发布到数据库:

<?php

if( $_POST )
{

  $con = mysql_connect("localhost","root","");

  if (!$con)
  {
    die('Could not connect: ' . mysql_error());
  }

  mysql_select_db("mydatabase", $con);


  $town = $_POST['town'];
  $location = $_POST['location'];
  $incident_type = $_POST['incident_type'];
  $time_date = $_POST['time_date'];
  $admin = $_POST['admin'];


  $town = mysql_real_escape_string($town);
  $location = mysql_real_escape_string($location);
  $incident_type = mysql_real_escape_string($incident_type);
  $time_date = mysql_real_escape_string($time_date);
  $admin = mysql_real_escape_string($admin);


  $query = "
    INSERT INTO `mydatabase`.`cad` (`town`, `location`, `incident_type`, `time_date`, `admin`) VALUES ('$town', '$location', '$incident_type', '$time_date', '$admin');";

  mysql_query($query);

  mysql_close($con);
}

?>

我试图仔细检查它并弄清楚它有什么问题,但就是找不到。如果您需要表格代码,请告诉我。我的 PHP 代码的另一个奇怪问题是 table 不是垂直的,而是水平的,并且一直越过屏幕。 Here is a picture of it. 然后我必须水平滚动才能查看所有内容。

检查变量

if(isset($_POST['town'])) {
$town = $_POST['town'];
}
if(isset($_POST['location'])) {
$location = $_POST['location'];
}

在您显示的第一个文件中,您试图访问 POST 个值:

$town = $_POST['town'];
$location = $_POST['location'];
$incident_type= $_POST['incident_type'];
$time_date= $_POST['time_date'];
$admin = $_POST['admin'];

但是还没有 POSTed。您仍在显示将要 发布的表单。显示表单如何依赖于已提交的相同表单?

为了有条件地检查值是否已 POSTed,您可以在第二个文件中执行相同的操作:

if( $_POST )
{
    // use the POST values
}

您可以选择有条件地检查每个单独的值:

if( isset($_POST['town']) )
{
    // use the town value
}

if( isset($_POST['location']) )
{
    // use the location value
}

// etc.

至于没有值时显示什么,由你决定。

$ _POST$ _GET 是 PHP 的两个特殊函数,用于从用户填写的表单中获取变量。在使用这些功能时,用户可能会遇到错误

  • Notice: Undefined index.

可以在 PHP isset () 的帮助下避免此错误。将通知此错误,但这取决于服务器的配置。注意:未定义的索引是一个小错误,因此默认不通知。借助 error_reporting 函数,可以更改报告的错误类型。

这部分代码有问题

$town = $_POST['town'];
$location = $_POST['location'];
$incident_type= $_POST['incident_type'];
$time_date= $_POST['time_date'];
$admin = $_POST['admin'];

数组 $_POST 中没有索引 'town'、'location'、...。您可以使用 isset 轻松修复通知,以便检查索引是否存在。如果是,则将值赋给变量 $town ...

if(isset($_POST['town'])) { ... }

您可以避免所有的 if...isset 并只将 POST 中的内容转储到与发布的索引同名的变量中。您实际上只需要 if/isset 查看特定已发布变量中的内容,但如果这无关紧要,这是避免您遇到的错误的最简单方法。

foreach($_POST as $k=>$v){
${$k}=mysql_real_escape_string($v);
}