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

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

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

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

2回答

2005閲覧

PHP フォーム入力値が配列の値と一致した場合のみ表示させる

bruno7777

総合スコア3

foreach

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/10/26 03:34

編集2021/10/26 05:01

フォームから送信された値が配列のid, password, name と一致したらname を表示し、一致しない場合はエラーメッセージを表示するというコードを書きたいのですが、foreachを使用しているため配列にある全てのデータが処理されてしまいます。全ての配列内のデータを表示させるのではなく、一致するものだけを表示するにはどうしたら良いでしょうか?

好ましい表示結果
id, password, name が一致する場合 (idに22, passwordに9100を入力した場合)
'鈴木' のみが表示される

id, password, name が一致しない場合
'正しいidかpasswordを入力してください' と表示される

下記のコードの表示結果
id, password, name が一致する場合 (idに22, passwordに9100を入力した場合)
正しいidかpasswordを入力してください
正しいidかpasswordを入力してください
鈴木

id, password, name が一致しない場合
正しいidかpasswordを入力してください
正しいidかpasswordを入力してください
正しいidかpasswordを入力してください

php

1$memberlist = ['柴田' => ['id' => '20', 'password' => '1234'], 2 '田中' => ['id' => '21', 'password' => '5678'], 3 '鈴木' => ['id' => '22', 'password' => '9100'] 4]; 5 6$id = filter_input(INPUT_POST, 'id'); 7$pass = filter_input(INPUT_POST, 'password'); 8 9foreach ($memberlist as $name => $val) { 10 if (($val ['id'] === $id) && ($val ['password'] === $pass)) { 11 echo $name. "<br/>"; 12 } else { 13 echo '正しいidかpasswordを入力してください' . "<br/>"; 14 } 15}

html

1<!DOCTYPE html> 2<html lang = “ja”> 3<head> 4<meta charset = “UTF-8”> 5<title>GET・POST練習</title> 6</head> 7<body> 8<h2>ログイン</h2> 9<form action="lesson09.php" method="post"> 10<label> ID </label><input type="text" name="id"><br/> 11<label>パスワード</label><input type="number" name="password"><br/> 12<input type="submit" value="送信"> 13</form> 14</body> 15</html> 16

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

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

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

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

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

yambejp

2021/10/26 03:45

全角のクォーテーションを使うのはやめてください
guest

回答2

0

自分ならこう実装するかなというものを書いておきます。

php

1<?php 2$member = null; 3$requestMethod = strtolower($_SERVER['REQUEST_METHOD']); 4 5if ($requestMethod === 'post') { 6 // $memberlistがidをキーにするように修正 7 $memberlist = ['柴田' => ['id' => '20', 'password' => '1234'], '田中' => ['id' => '21', 'password' => '5678'], '鈴木' => ['id' => '22', 'password' => '9100']]; 8 9 $_memberlist = []; 10 11 foreach ($memberlist as $memberName => $memberlistItem) { 12 $_memberlist[$memberlistItem['id']] = [ 13 'id' => $memberlistItem['id'], 14 'name' => $memberName, 15 'password' => $memberlistItem['password'], 16 ]; 17 } 18 19 $memberlist = $_memberlist; 20 21 // 一時変数をunset 22 unset($_memberlist); 23 24 // POSTされたid,passwordに合致するメンバーを取得する 25 if (!empty($_POST['id']) && !empty($_POST['password'])) { 26 $member = !empty($memberlist[$_POST['id']]) ? $memberlist[$_POST['id']] : null; 27 28 if (empty($member) || $member['password'] !== $_POST['password']) { 29 $member = null; 30 } 31 } 32} 33?> 34 35<?php if ($requestMethod === 'post'): ?> 36<div> 37 <?php if (!empty($member)): ?> 38 <p> 39 <?php echo htmlspecialchars($member['name']); ?> 40 </p> 41 <?php else: ?> 42 <p> 43 <?php echo '正しいidかpasswordを入力してください'; ?> 44 </p> 45 <?php endif; ?> 46</div> 47<?php endif; ?> 48 49<h2>ログイン</h2> 50 51<form method="post"> 52 <div> 53 <label>ID</label> 54 55 <input type="text" name="id"> 56 </div> 57 58 <div> 59 <label>パスワード</label> 60 61 <input type="number" name="password"> 62 </div> 63 64 <div> 65 <input type="submit" value="送信"> 66 </div> 67</form>

投稿2021/10/26 04:16

KAOsaka

総合スコア531

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

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

bruno7777

2021/10/26 08:10

色々なやり方があるんですね!回答ありがとうございました!
guest

0

PHP

1<?PHP 2$memberlist = [ 3 '柴田' => ['id' => '20', 'password' => '1234'], 4 '田中' => ['id' => '21', 'password' => '5678'], 5 '鈴木' => ['id' => '22', 'password' => '9100'], 6]; 7$id=filter_input(INPUT_POST,"id"); 8$password=filter_input(INPUT_POST,"password"); 9if(!is_null($id)){ 10 $user=array_filter($memberlist,function($x) use($id,$password){ 11 return $x["id"]==$id and $x["password"]==$password; 12 }); 13 print count($user)>0?array_keys($user)[0]:"正しいidかpasswordを入力してください"; 14} 15?> 16 17<form method="post"> 18<label> ID </label><input type="text" name="id"><br/> 19<label>パスワード</label><input type="number" name="password"><br/> 20<input type="submit" value="送信"> 21</form>

投稿2021/10/26 03:52

yambejp

総合スコア116726

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

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

bruno7777

2021/10/26 08:09

回答ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問