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

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

新規登録して質問してみよう
ただいま回答率
85.47%
Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

PHP

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

ラジオボタン

ラジオボタンはフォームに使われる要素のひとつであり、ユーザに限られた選択肢からひとつの答えを選んでもらうというものです。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

1865閲覧

HtmlとPHPを使ってフォームの作成をしたい。

tomotomo1234

総合スコア6

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

PHP

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

ラジオボタン

ラジオボタンはフォームに使われる要素のひとつであり、ユーザに限られた選択肢からひとつの答えを選んでもらうというものです。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/10/26 06:18

編集2020/10/26 06:52

前提・実現したいこと

Html.PHP初心者です、頑張って調べたりしたのですが全く持って理解できずエラーはいたりして手も足も出ませんでした。

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

htmlでフォームを作成してるのですが、ラジオボタン(男女の選択)・チェックボックス(複数選択可)・テキストエリアの作成は成功したのですが、送信ボタンでphpで表示できません。

・phpで表示できないこと
ラジオボタンで選択した内容が表示されない。
チェックボックスで複数選択しても送信した場合エラーをはいてしまう。
テキストエリアも上と同様です。

・エラーメッセージ
好きなこと:Warning: nl2br() expects parameter 1 to be string, array given in view.php on line 35

追記:Notice: Undefined index: tuiki in view.php on line 45

view.phpの前は名前などはいってるので省かせてください。

該当のソースコード

html

1<!DOCTYPE html> 2<html lang="ja"> 3 <head> 4 <meta charset="utf-8"> 5 <title></title> 6 <link rel="stylesheet" href="tomo.css"> 7 </head> 8 <body> 9 <div class="wrapper"> 10 <form action="view.php" method="post"> 11 12 <div class="box"> 13 <h2>氏名</h2> 14 お名前<input type="text" name="name"> 15 </div> 16 17 <div class="box"> 18 <h2>性別</h2> 19<input type="radio" name="sex[]" value=""> 20<input type="radio" name="sex[]" value=""> 21 </div> 22 23 <div class="box"> 24 <h2>好きなこと</h2> 25 <input type="checkbox" name="like[]" value="A">A 26 <input type="checkbox" name="like[]" value="B">B 27 <input type="checkbox" name="like[]" value="C">C 28 <input type="checkbox" name="like[]" value="D">D 29 <input type="checkbox" name="like[]" value="E">E<br> 30 </div> 31 32 <div class="box"> 33 <h2>追記メッセージ</h2> 34 <textarea type="text1" name="textarea[]" cols="60" rows="5"></textarea> 35 </div> 36 37 <div class="box"> 38 <input type="submit" value=" submit "> 39 <input type="reset" value=" reset "> 40 </div> 41 42 </div> 43 44 </form> 45 46 </div> 47 48 </body> 49</html>

php

1<!DOCTYPE html> 2<html lang="ja"> 3 <head> 4 <meta charset="utf-8"> 5 <title></title> 6 </head> 7 <body> 8 <table border="1"> 9 <tr> 10 <td>お名前:</td> 11 <td> 12 <?php 13 echo htmlspecialchars($_POST["name"],ENT_QUOTES) 14 ?> 15 </td> 16 </tr> 17 18 <tr> 19 <td>性別:</td> 20 <td> 21 <?php 22 if (isset($_POST['sex']) && is_array($_POST['sex'])) 23 { 24 $sex = implode("、", $_POST["sex"]); 25 } 26 ?> 27 </td> 28 </tr> 29 30 <tr> 31 <td>好きなこと:</td> 32 <td> 33 <?php 34 if($_SERVER['REQUEST_METHOD'] === 'POST'){ 35 $textarea = nl2br($_POST["textarea"]); 36 } 37 ?> 38 </td> 39 </tr> 40 41 <tr> 42 <td>追記:</td> 43 <td> 44 <?php 45 echo htmlspecialchars($_POST["tuiki"],ENT_QUOTES) 46 ?> 47 </td> 48 </tr> 49 </table> 50 </body> 51</html>

試したこと

Googleや参考書にて調べていましたが、分かりませんでした。調べ方が悪いのかチェックボックスとかを調べるとJavascriptしか出てきませんでした。(こちらはチェックボックスで規定値選択以下だったら警告が出る表記を試そうと調べた結果Javaしか出てきませんでした。)

参考にしたリンクですが、履歴が多すぎて他のサイトを見つけられませんでした。
リンク内容
リンク内容

こちらのリンクに解説を読みその通りにやったのですが、失敗しました。
全然分からないので何がどうで失敗したなど細かいことは申し訳ないですがわかりません。

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

使ってるソフトはatom xamppです。

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

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

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

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

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

m.ts10806

2020/10/26 06:23

>Googleや参考書にて調べていましたが、分かりませんでした どのように調べて(キーワード、参考にしたサイトURL)何を試したのかも追記してください。
tomotomo1234

2020/10/26 06:39

ありがとうございます。編集したのですが、当方このサイトを初めて使うのでコードの分け方を知りません。良ければその点も教えていただけないでしょうか?
m.ts10806

2020/10/26 06:45 編集

下記参照してもらったらわかるのですが https://teratail.com/questions/238564 コードのブロックはあくまで ```言語 コード ``` この集まりにすぎないので、これをファイル分準備すれば良いです。 ファイル名1 ```php ファイル名1のコード ``` ファイル名2 ```php ファイル名2のコード ```
tomotomo1234

2020/10/26 06:52

ありがとうございます!!編集できました。
guest

回答1

0

ベストアンサー

エラーにはそのまま原因が書いてあることが多いです。
特にPHPは親切な方だと思います。
エラーメッセージの読み方と対処, 検索や質問の原則

Warning: nl2br() expects parameter 1 to be string, array given in

nl2br()は、パラメーター1が文字列であり、配列が指定されていることを想定しています。

Notice: Undefined index: tuiki in view.php on line 45

未定義のインデックス:tuiki

エラーを確認したうえで次にやることは「PHPの機能を使ったエラーかどうか」です。
「機能を使った際のエラー」ならPHPマニュアルを確認します。
それ以外であればコード内の整合性を確認します。

コード内の整合性とは「定義したデータを使っているか。そもそも使おうとされているデータを定義しているか」です。


1つ目のWarningはnl2br()を使った機能による問題です。

nl2br

nl2br — 改行文字の前に HTML の改行タグを挿入する
nl2br ( string $string [, bool $is_xhtml = TRUE ] ) : string

string(文字列)を渡したらstring(文字列)を返すということが分かります。
返される文字列は「改行の前にHTMLの改行タグを入れて返される」と言うこともわかります。

で、エラーを見ると、「arrayが与えられた」とあります。

使っている場所は下記ですね。

php

1$textarea = nl2br($_POST["textarea"]); 2

対象の入力コントロールは下記のようになっているようですね。

html

1<textarea type="text1" name="textarea[]" cols="60" rows="5"></textarea>

name に [] がついています。

この場合、「配列」として送信されます。
なので、今回のWarningになっています。

name=textareaは配列として定義する必要があるのでしょうか?

要件はこちらでは分かりませんが、ご検討ください。

※ラジオボタンも同じです。


2つ目は変数の定義にかかわる問題です。

「未定義のインデックス」は、配列を参照しようとした際に、キーが存在しないことを示唆しています。

php

1 2 <?php 3 echo htmlspecialchars($_POST["tuiki"],ENT_QUOTES) 4 ?> 5

「tuiki」というキーを参照しています。
入力フォームには「tuiki」とうnameがついた入力コントロールはありません。

$_POSTや$_GETで参照するのは入力コントロールのname属性の属性値です。
参照しようとしているnameの属性値が定義されていなければ、当然参照できません。

$_POSTなどに限らず、「配列に想定の値が入っているか」はデバッグで確認してください。
PHPで上手にデバッグして効率のよい開発を身につけよう


できれば、POSTを直接参照するのは避けたほうが良いとは思います。
php filter_input POST や GET などの変数をフィルタリングする

投稿2020/10/26 07:22

m.ts10806

総合スコア80852

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

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

tomotomo1234

2020/10/28 06:28

返信が遅くすみません。詳しく質問の回答をしていただきありがとうございます。 詳しく読みもう一度挑戦してみます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問