質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
PHP

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

解決済

Undefined variableとUndefined array key 0 inのエラーの直し方がわかりません。

zake914
zake914

総合スコア4

PHP

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

2回答

0評価

0クリップ

4665閲覧

投稿2021/08/25 06:53

編集2021/08/25 07:02

前提・実現したいこと

たびたび質問失礼します。
掲示板を作っており、投稿内容の保存をテキストファイルにし、返信機能もつけたいと思っています。

発生している問題・エラーメッセージ

PHP Warning: Undefined variable $line in /workspace/Main.php on line 158 PHP Warning: Undefined array key 0 in /workspace/Main.php on line 205 PHP Warning: Undefined array key 1 in /workspace/Main.php on line 207

該当のソースコード

pHp

<?php //変数の初期化 $fname = "data.txt";//ファイル名 $id = 0;//選択されているデータのID $thread = 0;//スレットを示す番号 $page = 0;//現在のページ番号 $page_max = 0;//最後のページ番号 $page_items = 20;//ページあたりの項目数 $items_max = 0;//最大項目数 $last_name = "";//ユーザーの名前 $last_email = "";//ユーザーのメールアドレス $last_url = "";//ユーザーのURL $new_title = "";//タイトル //メイン処理の開始 //idのチェック if (isset($_GET['id'])){ $id = (int)$_GET['page']; } //pageのチェック if (isset($_GET['page'])){ $page = (int)$_GET['page']; } //データ読み込み、クッキー情報を読み込む load(); readFormCookie(); //フォーム送信時の処理 if (isset($_POST['name'])){ addData(); save(); load(); } //ここまで //関数の定義 //クッキーから値を読み込む function readFormCookie(){ global $last_name,$last_email,$last_url; //$last_name = $_COOKIE['last_name']; $last_name = @$_COOKIE['last_name']?:null; //$last_email = $_COOKIE['last_email']; $last_name = @$_COOKIE['last_email']?:null; //$last_url = $_COOKIE['last_url']; $last_name = @$_COOKIE['last_url']?:null; } //クッキーに保存する function writeToCookie(){ global $last_name,$last_email,$last_url; setcookie('last_name',$last_name,time() + 60 * 60 * 24 * 7); setcookie('last_url',$last_url,time() + 60 * 60 * 24 * 7); setcookie('last_email',$last_email,time() + 60 * 60 * 24 * 7); } //データを読み込む function load(){ global $data,$fname; $data = array(); $f = @fopen($fname,'r') or error('ファイルの読み込みに失敗しました。'); while(!feof($f)){ $line = fgets($f); $line = trim($line); if($line != ""){ array_push($data,$line); } } fclose($f); setPageNum(); } //最大ページ数の設定 function setPageNum(){ global $data,$page_max,$page_items; $page_max = (int)((count($data)-2)/$page_items); } //データを保存する function save(){ global $data,$fname; $f = fopen($fname,'w') or error('ファイルの読み込みに失敗しました。'); foreach($data as $line){ $line2 = trim($line); if ($line2 != ""){ fputs($f,$line2 . "¥r¥n"); } } fclose($f); } //送信されたフォームをデータに追加する function addData(){ global $data,$last_email,$last_name,$last_url; $set_thread = (int)$_POST['thread']; $title = htmlspecialchars($_POST['title']); $name = htmlspecialchars($_POST['name']); $email = htmlspecialchars($_POST['email']); $url = htmlspecialchars($_POST['url']); $comment = htmlspecialchars($_POST['comment']); $comment = mb_ereg_replace("¥r¥n","<br>".$comment); $comment = mb_ereg_replace("¥r","<br>".$comment); $comment = mb_ereg_replace("¥n","<br>".$comment); $time = time(); $line = $title . "¥t". $name . "¥t" . $email . "¥t" . $url . "¥t". $comment . "¥t" . $time; $num = 0; $n = count($data); $flg = false; for($i = 1;$i < $n;$i++){ $arr = explode("¥t",$data[$i]); if ($sel_thread == (int)$arr[0]){ $line = arr[0] . "¥t" .$line; array_splice($data,$i,0,$line); $flg = ture; break; } } if(!$flg){ $arr = explode("¥t",$data[$n -1]); $line = ($arr[0] + 1) . "¥t" . $line; array_push($data,$line); } delOldItem(); //クッキーに保存 $last_name = $name; $last_email = $email; $last_url = $url; writeToCookie(); } //最初の項目を削除する function delOldItem(){ global $data,$items_max; if(count($data)>($items_max + 1)){ $line = $data[0]; array_shift($data); array_shift($data); array_unshift($data,$line); } } //指定のidデータを返す function getData($n){ global $data; $str = ""; foreach($data as $line){ $arr = explode("¥t",$line); if($arr[6] == $n){ $str = $line; break; } } return $line; } //タイトルの表示 function writeFromTitle(){ global $id; if ($id <= 0){ echo"<h3>新たなスレッドで投稿する</h3>"; } else { echo"<h3>このスレッドに投稿する</h3>"; } } //idの値のデータを書き出す function writeData(){ global $id,$page,$thread,$new_title; $line = getData($id); if($id <= 0){ echo "<h3>*選択されたデータはありません。</h3>"; return; } $arr = explode("¥t",$line); $thread = $arr[0]; $new_title = "RE: ".$arr[1]; $date_text = date('Y/n/j H:i:s' ,$arr[6]); echo "<table width='600'>"; echo "<tr><th class='sel_title¥'colspan='2'>" . $arr[1] . "(" .$date_text .") </th></tr>"; echo "<tr><td width='100'>投稿者:</td><td>" . $arr[2] . " [" . $arr[3] . "]</td></tr>"; echo "<tr><td>WEBサイト:</td><td>" . $arr[4] . "</td><tr>"; echo "<tr><td>内容:</td><td>" .$arr[5] . "</td></tr>"; echo "</table>¥r¥n"; echo "<form method='POST' action='index.php?page=" . $page ."'>¥r¥n"; echo "<input type='submit' value='戻る'>¥r¥n"; echo "</form>¥r¥n"; } //データをテーブルに書き出す function writeTable(){ global $data,$page,$page_items; $num = count($data) - 1; $start = $num - $page * $page_items; $end = $start - $page_items; if ($end < 0){ $end = 0;} echo "<table border='1' width='300'>¥r¥n"; $line = $data[0]; $arr = explode("¥t",$line); echo "<tr class='header'><th>" . $arr[1] . "</th>¥r¥n"; $n = count($data); $last_thread = 0; for($i = $start; $i > $end; $i--){ $line = $data[$i]; if ($line == "") next; $arr = explode("¥t",$line); echo "<tr><td>"; if ($last_thread == $arr[0]){ echo "¬"; } echo "<a href='index.php?=id=" .$arr[6] . "&page=" . $page . "'>" .($arr[1] == "" ? "(無題);" : $arr[1]). "</a></td></tr>¥r¥n"; $last_thread = $arr[0]; } echo "</table>¥r¥n"; } //ページ番号の表示 function writePageNum(){ global $page,$page_max; for ($i = 0;$i <= $page_max;$i++){ if ($page == $i){ echo ($i + 1) . " "; }else { echo "<a href='index.php?page=".$i."'>".($i + 1)."</a>"; } } } //エラー時の処理 function error($msg){ ?> <html> <head> <meta http-equiv="content-type" content="test/html; charset=sjis"> <title>ミニイタ</title> </head> <body> <h3>ERROR</h3> <?php echo $msg; ?> </body> </html> <?php exit(); } //ここまで ?> <html> <head> <meta http-equiv="content-type" content="test/html; charset=sjis"> <title>ミニイタ</title> <style type="test/css"> <!-- .title { font-size:14px; line-height: 16px; padding: :2px 2px 2px 2px; background-color: rgb(200,200,255);} .header {background-color: rgb(200,255,200);} .sel_title {text-align: left;} --> </style> </head> <body> <h3 class="title">イタ</h3> <?php writeData(); ?> <hr> <?php writeFromTitle(); ?> <from method="POST" action="index.php"> <input type="hidden" name="thread" value="<?php echo $thread; ?>" <table> <tr><td>タイトル</td><td> <input type="text" name="title" size="60" value="<?php echo $new_title;?>"> </td></tr> <tr><td>email</td><td> <input type="text" name="email" size="60" value="<?php echo $last_email;?>"> </td></tr> <tr><td>WEBサイト</td><td> <input type="text" name="url" size="60" value="<?php echo $last_url;?>"> </td></tr> <tr><td>内容</td><td> <textarea name="comment" cols="40"></textarea> </td></tr> <tr><td></td><td><input type="submit" value="送信"></td></tr> </table> </from> <hr> <?php writePageNum(); ?> <br> <?php writeTable(); ?> </body> </html>

試したこと

前の質問の回答者より、2つ目のエラーは配列に値がないことによるエラーだとわかり、コードを確認してみたのですが、値が配列に入っているようにしか考えられず、困っています。
また、1つ目のエラーは、未定義の変数があることが問題らしいのですが、どういうことなのかわかりません。
一つ目のエラーは、変数の前に「@」をつけることで解決しました。

なお、前の質問はこちらです。
https://teratail.com/questions/356068

補足情報(FW/ツールのバージョンなど)

質問に不足している内容があれば、教えてください。
訂正させていただきます。
どうぞよろしくお願いします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

PHP

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。