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

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

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

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

Q&A

解決済

2回答

1136閲覧

Notice: Undefined variable: input in C:xxxがどうしても直せない

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

0グッド

0クリップ

投稿2020/05/03 14:53

以下のコードを実行すると
Notice: Undefined variable: input in C:\pleiades\xampp\htdocs.metadata.plugins\org.eclipse.wst.server.core\tmp0\htdocs\O'REILLY\chap07\7-14.php on line 24
Hello, tatu
となります。
実行結果を「Hello, tatu」としたいのですが
コード10行目 process_form($input);をどのように変更するといいのでしょうか。
if(isset($input)){ process_form($input); }とするとなにも表示されなくなります。
よろしくお願いいたします。

php

1<?php 2// リクエストメソッドに応じて適切な処理を行うロジック 3if( $_SERVER['REQUEST_METHOD'] == 'POST'){ 4 if(isset($form_errors,$input )) { 5 list($form_errors,$input) = validate_form(); 6 } 7 if(isset($form_errors)){ 8 show_form($form_errors); 9 }else{ 10 process_form($input); 11 } 12}else{ 13 show_form(); 14} 15 16// フォームのサミット時に何かを行う 17function process_form(){ 18 19 print "Hello, " . $_POST['my_name']; 20 21} 22 23// フォームを表示する 24function show_form($errors = ''){ 25 26 // エラーが返されたらそのエラーを出力する 27 if($errors){ 28 print 'Please correct these errors: <ul><li>'; 29 print implode('</li><li>', $errors); 30 print '</li></ul>'; 31 } 32 33 print<<<_HTML_ 34 35<form method="post" action=""> 36 Your name: <input type="text" name="my_name"> 37 <br> 38 <input type="submit" value="Say Hello"> 39</form> 40_HTML_; 41} 42 43// フォームデータをチェックする 44function validate_form(){ 45 46 // エラーメッセージを空の配列で初期化する 47 $errors = array(); 48 49 // 名前が短かすぎる場合にはエラーメッセージを追加する 50 if(strlen($_POST['my_name']) < 3){ 51 52 $errors[] = "Your name must be at least 3 letters long."; 53 54 } 55 56 // エラーメッセージの配列(場合によっては空の配列)を返す。 57 return $errors; 58} 59 60?>

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

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

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

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

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

guest

回答2

0

ベストアンサー

$inputがどこにも定義されていません。

【【PHP超入門】HTTP(GET・POST)について - Qiita】
https://qiita.com/7968/items/4bf4d6f28284146c288f

投稿2020/05/03 14:56

kei344

総合スコア69606

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

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

退会済みユーザー

退会済みユーザー

2020/05/03 15:16

ありがとうございます。
guest

0

以下のように3か所に「追加のコード」を加えました。

<?php // validate_form()が入力とエラーの両方を返している場合、 // validate_form()から返される両方の配列を処理できるようにコードを修正する。 // リクエストメソッドに応じて適切な処理を行うロジック if( $_SERVER['REQUEST_METHOD'] == 'POST'){ // ページがリクエストされたときのリクエストメソッド名を返す // ブラウザからのリクエストが、POSTメソッドなのかGETメソッドなのか、 // スクリプト側で判別したい.リクエストメソッドに応じて適切な処理を行うロジック // $_SERVER ['REQUEST_METHOD'] === 'POST' は何かが投稿されたという意味 $form_errors=null;  //追加のコード $input=$_POST['my_name'];//追加のコード if(isset($form_errors,$input )) { list($form_errors,$input) = validate_form(); } if(isset($form_errors)){ show_form($form_errors); }else{ if(isset($input)){       // 修正、追加のコード process_form($input); } } }else{ show_form(); } // フォームのサミット時に何かを行う function process_form(){ print "Hello, " . $_POST['my_name']; } // フォームを表示する function show_form($errors = ''){ // エラーが返されたらそのエラーを出力する if($errors){ print 'Please correct these errors: <ul><li>'; print implode('</li><li>', $errors); // implode関数の第一引数には要素の間にはさみたい区切り文字を指定します。 // '</li><li>'は黒い点を表す、黒い点の後にエラーメッセージを表示する print '</li></ul>'; } print<<<_HTML_ <form method="post" action=""> Your name: <input type="text" name="my_name"> <br> <input type="submit" value="Say Hello"> </form> _HTML_; } // フォームデータをチェックする function validate_form(){ // エラーメッセージを空の配列で初期化する $errors = array(); // 名前が短かすぎる場合にはエラーメッセージを追加する if(strlen($_POST['my_name']) < 3){ $errors[] = "Your name must be at least 3 letters long."; } // エラーメッセージの配列(場合によっては空の配列)を返す。 return $errors; } ?>

投稿2020/05/03 15:15

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問