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

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

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

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

Q&A

解決済

3回答

650閲覧

フォームで入力チェックをするプログラムを書いていますが、エラーが直せません…

ott0000

総合スコア21

PHP

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

0グッド

0クリップ

投稿2022/11/02 03:35

前提

PHPで質問フォームを作っており、文字が11文字以上や空白だと「入力は必須入力です。10文字以内でご入力ください。」が出るなどの入力チェックを行っています

実現したいこと

入力チェックをした際に、11文字以上や空白だとメッセージがきちんと出るが、10文字以下、入力がある場合に
「Warning: Undefined array key "name" in C:\xampp\htdocs\04_php_form\contact1.php on line 44」のエラーが出ます。

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

Warning: Undefined array key "name" in C:\xampp\htdocs\04_php_form\contact1.php on line 44

該当のソースコード

<?php $error = []; if($_SERVER['REQUEST_METHOD'] === 'POST'){ if($_POST['name'] === ' ' or strlen($_POST['name']) > 10){ $error['name'] = 'blank'; } } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title></title> <link rel="stylesheet" type="text/css" href="base2.css"> <link href="https://use.fontawesome.com/releases/v5.6.1/css/all.css" rel="stylesheet"> <meta name="viewport" content="width=device-width,initial-scale=1"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> </head> <body> <div class="otoiawase"> <div class="otoiawase2"> <h1>お問い合わせ</h1> <div class="nyuryoku"> <form method="post" action="" > <p class="nyuryokus">氏名<span>*</span></p> <?php if($error['name'] === 'blank'): ?> <p class="error_msg">氏名は必須入力です。10文字以内でご入力ください。</p> <?php endif;?> </div> <input class="bottun" type="submit" value="送信"></a> </form> </div> </div> </div> </body> </html>

試したこと

$error['name']が'blank'ではないときに空になるのかと思い、
elseifで<p></p>と書いてみたが変わらなかった。

エラー名で調べてみて、isset()で変数がセットされているかを調べ「true」が返された場合のみ処理を実行するようにする方法も利用できます。
という記事を見たので if(isset($_POST['name']) === ' ' or strlen(isset($_POST['name'])) > 10){}
で実行してみたが変わらなかった。

youtubeの「フォームを作ってみよう」を見ながら作成しているのですが、
どうしても何が間違っているかわかりませんでした。
よろしければエラーの原因のご指摘お願いいたします。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答3

0

色々とツッコミどころがありそうなんですが、とりあえずWarningがでてるのは

<?php if($error['name'] === 'blank'): ?>

の行では? こちらも必要に応じてisset()を使わないと、Undefined array key "name"が出ると思いますよ。$error['name']が存在しない可能性もあるのにいきなり$error['name']と書いたらそのアラートは出ますので。

isset()の使い方も間違ってますので、以下のサイトを参考にしてください(isset()truefalseしか返しませんので、>10とかやっても意図したとおりに動きません)。

参考)
https://www.php.net/manual/ja/function.isset.php
https://www.fenet.jp/dotnet/column/language/7700/

投稿2022/11/02 03:54

AbeTakashi

総合スコア4537

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

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

0

自己解決

ご指摘にあったようにいろいろ間違っていたので一から書き直しました!
アドバイスありがとうございます

投稿2022/11/04 01:31

ott0000

総合スコア21

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

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

0

PHP

1<?PHP 2$name=filter_input(INPUT_POST,'name',FILTER_VALIDATE_REGEXP,["options"=>["regexp"=>"/\A.{1,10}\z/u"]]); 3if(!is_null($name)){ 4 if($name!==false){ 5 print "入力は「".htmlspecialchars($name)."」"; 6 }else{ 7 print "入力は必須入力です。10文字以内でご入力ください。"; 8 } 9} 10?> 11 12<form method="post"> 13<input name="name"> 14<input type="submit" value="send"> 15</form>

投稿2022/11/02 03:51

yambejp

総合スコア114829

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問