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

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

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

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

Q&A

解決済

3回答

437閲覧

一言掲示板作成途中でのことです。エラーの原因が分かりません。

newyee

総合スコア213

PHP

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

0グッド

0クリップ

投稿2017/07/08 22:35

現在一言掲示板作成途中なのですが、半角,全角の空白を入れた場合、名前の入力欄にに20文字以上入れた場合など恐らく$errorsの配列に入れた文字列が適用されていないように思えます。
エラーの内容に致しましては、以下の通りです。
Warning: Invalid argument supplied for foreach() in /home/ubuntu/workspace/review/lesson10/bbs.php on line 65 Call Stack: 0.0004 236920 1. {main}() /home/ubuntu/workspace/review/lesson10/bbs.php:0

php

1<?php 2const FILE_NAME = './bbs.txt'; 3date_default_timezone_set('Asia/Tokyo'); 4$date = date("Y-m-d H:i:s"); 5$log = ''; 6$errors = array(); 7if ($_SERVER['REQUEST_METHOD'] === 'POST') { 8 if(isset($_POST['user_name']) === TRUE){ 9 $user_name = trim(mb_convert_kana($_POST['user_name'],"s",'UTF-8')); 10 } 11 if(isset($_POST['user_comment']) === TRUE){ 12 $user_comment = trim(mb_convert_kana($_POST['user_comment'],"s",'UTF-8')); 13 } 14 $log = $user_name . ':' . $user_comment . '-' . $date . "\n"; 15 if(mb_strlen($user_name) > 20){ 16 $errors = '名前は20文字以内で入力してください'; 17 }elseif(mb_strlen($user_name) === 0){ 18 $errors = '名前を入力してください'; 19 } 20 if(mb_strlen($user_comment) > 100){ 21 $errors = 'ひとことは100文字以内で入力してください'; 22 }elseif(mb_strlen($user_comment) === 0){ 23 $errors = 'ひとことを入力してください'; 24 } 25 if(empty($errors) === TRUE){ 26 if (($fp = fopen(FILE_NAME, 'a')) !== false) { 27 if (fwrite($fp, $log) === false) { 28 echo 'ファイル書き込み失敗'; 29 } 30 fclose($fp); 31 }else{ 32 $errors = 'ファイルに書き込めません'; 33 } 34 } 35} 36 37$data = array(); 38if (is_readable(FILE_NAME) === true) { 39 if (($fp = fopen(FILE_NAME, 'r')) !== false) { 40 while(($tmp = fgets($fp)) !== false){ 41 $data[] = $tmp; 42 } 43 fclose($fp); 44 } 45}else{ 46 $errors = 'ファイルが読み込めません'; 47} 48?> 49<!DOCTYPE html> 50<html lang="ja"> 51<head> 52 <meta charset="UTF-8"> 53 <title></title> 54</head> 55<body> 56 <h1>一言掲示板</h1> 57 <form method="post"> 58 <p>名前 : 59 <input type="text" name="user_name"> 60 ひとこと : 61 <input type="text" name="user_comment"> 62 <input type="submit" value="送信"> 63 </p> 64 </form> 65 <?php foreach ($errors as $value){ ?> 66 <p><?php echo htmlspecialchars($value, ENT_QUOTES, 'UTF-8'); ?></p> 67 <?php } ?> 68 69 <ul> 70 <?php foreach ($data as $value) { ?> 71 <li> 72 <?php echo htmlspecialchars($value, ENT_QUOTES, 'UTF-8'); ?> 73 </li> 74 <?php } ?> 75 </ul> 76</body> 77</html> 78

どなたか分かる方いらっしゃいましたら、ご教授願います...

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

$errorsは配列にしましょう。

投稿2017/07/08 22:44

takasima20

総合スコア7458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

エラーメッセージを代入している箇所を全て以下のように変更すると良さそうです。

PHP

1$errors[] = '名前は20文字以内で入力してください'; 2

投稿2017/07/09 00:55

madone99

総合スコア1855

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Warning: Invalid argument supplied for foreach() in」でまず検索してください。

多くのエラーは検索すれば解決方法が出てきます。

投稿2017/07/09 05:30

kei344

総合スコア69400

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問