php-なぜ「未定義のインデックス」を取得するのですか?
ウェブページで次の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
データベースからデータを取得している出力テーブルのコードは次のとおりです(データベースからのデータは正常に表示されます):
<?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コードのもう1つの奇妙な問題は、テーブルが垂直ではなく水平であり、画面全体に表示されることです。 これがその写真です。そして、すべてを表示するには、水平方向にスクロールする必要があります。
答え :
解決策:
最初に表示するファイルでは、POST値にアクセスしようとしています:
$town = $_POST['town'];
$location = $_POST['location'];
$incident_type= $_POST['incident_type'];
$time_date= $_POST['time_date'];
$admin = $_POST['admin'];
しかし、まだ何も投稿されていません。投稿されるフォームはまだ表示されています。フォームの表示は、すでに送信されている同じフォームにどのように依存できますか?
値がPOSTされているかどうかを条件付きで確認するために、2番目のファイルで行っているのと同じことを行うことができます。
if( $_POST )
{
// use the POST values
}
オプションで、個々の値を条件付きで確認できます:
if( isset($_POST['town']) )
{
// use the town value
}
if( isset($_POST['location']) )
{
// use the location value
}
// etc.
値がないときに表示したいものは、あなた次第です。
答え :
解決策:
変数のチェック
if(isset($_POST['town'])) {
$town = $_POST['town'];
}
if(isset($_POST['location'])) {
$location = $_POST['location'];
}
答え :
解決策:
$ _POST
または$ _GET
は、取得に使用されるPHPの2つの特殊関数です。ユーザー入力フォームからの変数。これらの関数を使用しているときに、ユーザーがエラーに遭遇する可能性があります
- 注意:未定義のインデックス。
このエラーは、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);
}
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。