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

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

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

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

Q&A

解決済

3回答

1091閲覧

if文で名前 パスワード等がからの時入力してくださいと表示したいのですがうまく動作しません

yamamu

総合スコア20

PHP

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

0グッド

1クリップ

投稿2019/07/05 08:02

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
簡単な登録画面を作っており入力欄に何も書かれなかったときに入力してくださいと表示したいのですがうまくいきません。

どこが間違っているのでしょうか、初学者のためわかりやすく教えていただけると幸いです。```ここに言語を入力
コード

session_start(); $error = array(); if(!empty($_POST)) { if($_POST['name'] == ''){ $error['name'] = 'blank'; } if($_POST['mail'] == ''){ $error['mail'] = 'blank'; } if($_POST['pass'] == ''){ $error['pass'] = 'blank'; } if (strlen($_POST['pass']) < 4) { $error['pass'] = 'length'; } if(empty($error)) { $_SESSION = $_POST; header('Location:join_check.php'); exit; } } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>gymgym</title> <link rel="stylesheet" href="styles.css"> </head> <body> <header> <p>会員登録</p> </header> <div class="container"> <form class="" action="" method="post" enctype="multipart/form-data"> <h1>次のフォームに必要事項をご記入ください</h1> <dl class=""> <p>ニックネーム <span class="required">必須</span></p> <input type="text" name="name" size="35" maxlength="255" class="_text"> <?php if($error['name'] == 'blank'): ?> <p>ニックネームを入力してください</p> <?php endif; ?> <p>メールアドレス <span class="required">必須</span></p> <input type="text" name="mail" size="35" maxlength="255" class="_text"> <?php if($error['mail'] == 'blank'): ?> <p>メールアドレスを入力してください</p> <?php endif; ?> <p>パスワード <span class="required">必須</span><p/> <input type="password" name="pass" size="10" maxlength="20" class="_text"> <?php if($error['pass'] == 'blank'): ?> <p>パスワードを入力してください</p> <?php endif; ?> <?php if($error['pass'] == 'length'): ?> <p>四文字以下で入力してください</p> <?php endif; ?> <p>写真など<p> <input type="file" name="image" size="35" class="btn" id="btm"><label for="btm"></label> <br> <input type="submit" value="入力を確認する" class="confirmation"> </dl> </form> </div> </body> </html> ■■な機能を実装中に以下のエラーメッセージが発生しました。 ### 発生している問題・エラーメッセージ Notice: Undefined variable: error in join_index.php on line 43 Notice: Undefined variable: error in join_index.php on line 48 Notice: Undefined variable: error in join_index.php on line 53 Notice: Undefined variable: error in join_index.php on line 56 エラーメッセージ

該当のソースコード

あとの3つも同じ書き方です。

<?php if($error['name'] == 'blank'): ?> <p>ニックネームを入力してください</p> <?php endif; ?>

試したこと

ここに問題に対して試したことを記載してください。
$errorが定義されてないよというエラーメッセージだと思ったので $error = array();を付け足してみたのですが
Notice: Undefined index: name と出てしまいどうすればいいかわかりません。

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

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

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

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

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

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

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

guest

回答3

0

ベストアンサー

具体的に。

php

1 if($_POST['name'] == ''){ 2 $error['name'] = 'blank'; 3 }

$_POST['name'] == ''が成り立つときだけ$error['name']が存在するような書き方をしているため、
その条件が成り立たないときに$error['name']を参照すると「Notice: Undefined index」になります。

php

1 $error['name'] = ''; 2 if($_POST['name'] == ''){ 3 $error['name'] = 'blank'; 4 }

とでも書けばエラーは回避できそうです。
より万全を期するなら、

<?php session_start(); $error = array(); $error['name'] = ''; $error['mail'] = ''; $error['pass'] = ''; if(!empty($_POST)) {

と、どういう条件であっても初期化されるようにするべきかと。

投稿2019/07/05 08:34

編集2019/07/05 08:54
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2019/07/05 08:37

老婆心ながらいろいろ改善を加えてほしいことがあるのだけど、たぶん理解が追いついていないだろうから割愛。
yamamu

2019/07/05 08:46

回答ありがとうございます。 if文について今も調べていましたが条件に当てはまらないときも考慮しないと未定義になってしまうのですね m6u様の通りコードを書いたのですが <?php if($error['name'] == 'blank'): ?>のところで未定義になってしまいました。
退会済みユーザー

退会済みユーザー

2019/07/05 08:55

より万全を期する方法に改めましたので、もう一度回答内容をご確認ください。
yamamu

2019/07/05 09:16

m6u様の万全を期した方法でエラーを解除することができました。 ご回答ありがとうございました。 しかしながら自分の中で腑に落ちない点があるのでよろしければご教授いただけると幸いです。 POSTで送られた内容が空の時、POST['name']がからのときは$error配列にname=>blankをいれてあげてね そして$errorのnameの値がblankの時は入力してとPタグを出してという文で自分は書いたつもりです。 m6u様は >$_POST['name'] == ''が成り立つときだけ$error['name']が存在するような書き方をしているため、 と教えていただきましたが これが成り立たない状態はtextの中に何か書かれている状態でその時はif(empty($error)) の条件trueになりリダイレクトされるとおもっていたので $error['pass'] = '';いらないのでは?と思うのですが(現にエラーは解除されているので必要なのはわかるのですが) ここで初期化している意味を教えていただければと思います。 ながながと失礼致しました。
退会済みユーザー

退会済みユーザー

2019/07/05 10:06

私が示した方法で全ての項目に対して初期化を施すと、「if(empty($error))」での判定ではできなくなります。 そこも「if(($error['name']==='') && ($error['mail']==='') && ($error['pass']===''))」とすれば、エラーなしであることを担保できるので、 そういう方向で修正してみてはいかがでしょうか。 ===とイコール3つ書くのは、==2つ書く方法だと勝手に型変換が行われて意図しない動作を引き起こす場合があるためです。
guest

0

PHPのよくあるエラー(正確にはNotice)のほぼツートップです。

Notice: Undefined variable

未定義の変数が使用しようとしている

Notice: Undefined index

配列で存在しないキーを使用しようとしている

ただ、今回、実は、問題は発生していないように見えます。

「未定義である」というのでしたら、「定義していたら使用する」と1つ分岐をかませれば良いです。

変数が定義されているか

php

1if(isset($hoge)){ 2 echo $hoge; 3}

配列のキーが存在するか

php

1if(array_key_exists('hoge',$array)){ 2 echo $array['hoge']; 3}

投稿2019/07/05 08:10

m.ts10806

総合スコア80850

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

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

yamamu

2019/07/05 08:30

迅速な対応ありがとうございます。 PHPマニュアルを見たのですがまだ初心者のためいまいち理解が追い付きません。 参考書通りに進めているので自分が書いた$error = array(); はないものとして考えていただきたいのですが、具体的にどのようにコードを変えたほうがいいのでしょうか お手数ですがご教授のほどよろしくお願いします。
m.ts10806

2019/07/05 08:43

>自分が書いた$error = array(); はないものとして考えていただきたい いやあったほうがいいですよ。未定義のNoticeで続けるのもストレスですし。 >具体的にどのようにコードを変えたほうがいいのでしょうか まずはNotice: Undefined indexを解消してください。 array_key_exists()で回避できるはずです。 失敗してもいいのでコードをどんどん書きましょう。
guest

0

簡単な登録画面を作っており入力欄に何も書かれなかったときに入力してくださいと表示したいのですがうまくいきません。

特にこだわりがないのであれば、<input>required属性をかけておきましょう。required属性のある<input>に入力がない場合、フォーム送信を行う前にエラーとなります。

ただし、サーバサイドで空欄の場合にエラーとする処理は省略できません。

投稿2019/07/05 08:06

maisumakun

総合スコア145183

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

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

yamamu

2019/07/05 08:26

迅速な対応ありがとうございます。 requiredという方法もあるんですね。参考になりました。 今回は参考書に基づいて進めています。 私が書いたコードのどこがいけないのか具体的に教えていただけると幸いです。
退会済みユーザー

退会済みユーザー

2019/07/05 08:35

「Notice: Undefined index: name 」に直結する指摘とは思えないので、低評価に投票させていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問