質問編集履歴

1 文の修正

KM46

KM46 score 17

2019/05/07 12:16  投稿

PHPの「Notice: Undefined index」エラーについて
### PHPの一行掲示板で名前が表示できない
「最初に読むPHP」(クジラ飛行机)でサンプルコードを写したところ、
以下のようなエラーメッセージが表示され、名前を表示することができません。
### 発生している問題・エラーメッセージ
```
Notice: Undefined index: nama in C:\xampp\htdocs\simple-bbs.php on line 20
```
### 該当のソースコード
```php
<?php
$save_file = dirname(__FILE__)."/bbslog.txt";
$mode = isset($_GET["mode"]) ? $_GET["mode"] : "show";
switch($mode) {
   case "show" : mode_show(); break;
   case "write" : mode_write(); break;
   default     : mode_show(); break;
}
function mode_show() {
   show_form();
   $log = load_data();
   print_r($log);
   echo "<ul>";
   foreach ($log as $i) {
       // $name = isset($_POST["name"]) ? htmlspecialchars($i["nama"]) : '';
       $name = htmlspecialchars($i["nama"]);
       $body = htmlspecialchars($i["body"]);
       echo "<li><b style='coler:red;'>$name</b>: $body</li>\n";
   }
   echo "</ul>";
}
function show_form() {
   echo <<< __FORM__
<form>
■名前:<input type="text" name="name" size="8" />
本文:<input type="text" name="body" size="30" />
<input type="submit" value="書く" />
<input type="hidden" name="mode" value="write" />
</form><hr/>
__FORM__;
}
function mode_write() {
   if ($_GET["name"]== "" || $_GET["body"] == "") {
       echo "名前か本文が空です。入力してください";
       exit;
   }
   $log = load_data();
   array_unshift($log, $_GET);
   save_data($log);
   $self = $_SERVER['SCRIPT_NAME'];
   echo "<a href='$self'>書き込みました‼</a>";
}
function load_data() {
   global $save_file;
   $log = array();
   if (file_exists($save_file)) {
       $txt = file_get_contents($save_file);
       $log = unserialize($txt);
   }
   return $log;
}
function save_data($log) {
   global $save_file;
   $txt = serialize($log);
   file_put_contents($save_file, $txt);
}
```
### 試したこと
コメントアウトしている部分(line 19)を有効化にするとエラーメッセージ自体は消えるのですが、名前は相変わらず表示されません。
line 20を、コメントアウトしている部分(line 19)に変更するとエラーメッセージ自体は消えるのですが、名前は相変わらず表示されません。
### 補足情報(FW/ツールのバージョンなど)
・windows10
・XAMPP
PHPのバージョンは5.2.0です。
  • PHP

    33686 questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る