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

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

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

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

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

配列

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

Q&A

解決済

3回答

5909閲覧

「PHP」入力フォームのバリデーションチェック方法について

kaori1994

総合スコア28

PHP

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

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

配列

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

0グッド

1クリップ

投稿2016/08/17 00:50

編集2016/08/17 04:14

お世話になっております。kaoriと申します。

【やりたい事】
入力フォームで入力し、登録を押した時
各入力エリアの値をバリデーションして、もし未入力や正しくない場合は確認画面に遷移せず
エラーメッセージを出力するという事を行おうとしております。

今後も流用して使えるように、汎用的なコードで作成を試みております。

【詰まっていること】
HTMLからPHPに値を渡す事はできましたが
汎用的なコードにしたいので、以下のようにHTMLから渡される値は
REQUEST配列の中身がカラになるまでval変数に格納するという内容になっております。

<?php require_once '../vendor/autoload.php'; require_once 'class.php';//バリデーションクラスの読み込み $loader = new Twig_Loader_Filesystem('templates'); $twig = new Twig_Environment($loader); //セッションスタート session_start(); //$_REQUEST配列を全て取得 foreach($_REQUEST as $key => $val[]){} //{echo "$key = $val<br>";} $num(val[1]); //数値のみのファンクションを呼び出し /* //valに格納された値をhtmlentitiesにして代入 foreach((array)$val as $val2){ $htmlentities = htmlentities($val2,ENT_QUOTES,'UTF-8'); //htmlentities化した値をセッション配列に格納 $_SESSION['data'] = $htmlentities; $data = $_SESSION['data']; echo '<pre>'; var_dump($data); echo '</pre>'; }*/ /* //次に使用するテンプレートの指定(確認フォーム) $template = $twig->loadTemplate('check.html.twig'); //確認フォームに一つずつ値を渡すコードを書きたいが、分からないため模索中 echo $template->render($data2); */ ?>

$_REQUESTで受け取った値を$val配列に格納して取得できていることは確認できました。

入力エリア
:名前 <input type name="name">
:ひらがな <input type name="hiragana">
:電話番号 <input type name="telNo">
各nameの3つの値毎にバリデーションしたいので
$val[0]は未入力のfunctionと全角のfunctionを設定
$val[1]は未入力とひらがなのfunctionを設定
$val[2]は未入力と数字のみのfunctionを設定
と配列の連番ごとにfunctionを設定したいのですが

そもそも現状val[0]だと何も取得できないのと(すみません、調べてもやり方がわかりませんでした)
このコードだと各エリアのバリデーションチェックは不可能でしょうか
おとなしく $name = $_REQUEST['name'];といったん変数にいれて
もし値がなければ未入力で、値が$nameに入ったらその値をバリデーションチェックする
という書き方にした方がよろしいでしょうか。

もし私の書き方が伝わりにくかったら、なんなりとお申し付けください。
皆さまのご助言をいただけたら幸いです。
以上、よろしくお願いいたします。

※追記
皆さまのおっしゃっていた配列になっていない件について
私の勘違いでできていると思っておりましたができておりませんでした。失礼いたしました。
現在は$val ⇒ $val[] としまして、無事配列化することができました。
皆さまありがとうございました。

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

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

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

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

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

kei344

2016/08/17 00:57

foreach が閉じられていなかったり$valにfunctionをどう使うつもりなのかがわからなかったりするので、なるべくコード全体を書かれてはいかがでしょうか。
kaori1994

2016/08/17 01:12

kei344様、ご指摘ありがとうございます。 実は他にもわからない点があったりします(別ファイルの関数呼び出し、それを使ってのバリデーションチェック。エラーがあった場合入力画面にメッセージを返す処理)色々ありますが、その他の点はまだ自分の中で調べ切れてないので 問題を一つ一つクリアしていこうと思い。今回バリデーションチェックに使用するための値の取得方法をteratailさんで質問した次第です。
kei344

2016/08/17 01:28

「とりあえず関係の有りそうな要素をおいてみた」と言うコードだったのですね。フォームからのPOSTの受け取りは確認できていますか?
kaori1994

2016/08/17 01:36

kei344様、返信ありがとうございます。 POSTの受け取りは確認できております! foreach($_REQUEST as $key => $val){} {echo "$key = $val<br>";} このコードで、POSTまたはGETの値を取得し、$keyにキーを$valに値を取得しております。
kei344

2016/08/17 02:54 編集

$valは配列になっているように見えませんが、配列化処理の後でvar_dump($val);してみてください。
kei344

2016/08/17 03:34

foreachの中で無く、「配列化処理の後で」var_dump($val);してみてください。 配列になっていないはずです。
kaori1994

2016/08/17 04:03

kei344様におっしゃてる意味がようやく理解できました! foreachの中でただ順番に表示しているだけで、$valが配列化しているわけではありませんでした。 まずはここから自分で解決しようとします。 長らく失礼いたしました。
kei344

2016/08/17 04:35

いったん「解決済」にして、ご自身の中で再整理されたうえで疑問が出たら、再度質問を投稿されてはいかがでしょうか。
kaori1994

2016/08/17 05:55

kei344様、お世話になっております。 そうさせていただきます。 ありがとうございました。
guest

回答3

0

ベストアンサー

全体は良く見ておりませんが部分的に、valに全て取得なのであれば。。

php

//$_REQUEST配列を全て取得
foreach($_REQUEST as $key => $val){}

php

1foreach($_REQUEST as $key => $val[]){}

とするのでは?

投稿2016/08/17 01:59

A.Ichi

総合スコア4070

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

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

kaori1994

2016/08/17 02:22

A.Ichi様、ご回答ありがとうございます。 本当に申し訳ありません。 valに全て取得はできておりまして中身の確認も完了しております。 できないのは取得後の配列の中身を頭から一つずつ取得し、一つ一つに異なるバリデーションチェックを行いたいという質問でした。 説明不足ですみませんでした。本文を修正させていただきました。
退会済みユーザー

退会済みユーザー

2016/08/17 02:43

> valに全て取得はできておりまして中身の確認も完了しております。 できてないから、私も指摘しているし、A.Ichi さんはコードまで書いてくれている。
kaori1994

2016/08/17 04:10 編集

お世話になっております。 foreachの中で順番に出力しているだけで、配列化しているわけではありませんでした。 失礼しました。 A.Ichi様のコードを参考にさせていただきました。ありがとうございました。
guest

0

なにがやりたいのか分かりませんが、var_dumpでも使って、まずは配列になにがどのように入っているか確認してはいかがですか?
ちなみに、デバッグに使うのであれば、echo より var_dump の方が汎用的です。

投稿2016/08/17 01:13

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

kaori1994

2016/08/17 01:21

te2ji様、ご回答ありがとうございます。 配列の中身はデバッグして確認はできております。 var_dumpについて、ご指摘ありがとうございます。 やりたい事が分かりにくくて申し訳ありません。 $name = $_REQUEST['name']; $telNo = $_REQUEST['telNo']; こう書けば変数ごとにバリデーションできますが、今回$_REQUEST配列の中身を連続して$val配列に格納しているので、それが不可能です。 もし、$val配列の上から何番目の値のみ取得するみたいなことが可能なら それに対してバリデーションを行えると思い、その方法を相談させていただきました。
退会済みユーザー

退会済みユーザー

2016/08/17 01:51

なにがどのように入っているか理解していないと思って書いたのですが、理解していると言われると、その先には進まなくなりますね。。。もう一度中身を確認されたほうが良い気がしますが。
kaori1994

2016/08/17 01:59

te2ji様、お世話になっております。 はい、もう一度コードと向き合ってみます。 ありがとうございます!
退会済みユーザー

退会済みユーザー

2016/08/17 02:42

コードを見る必要はまだありません。まず配列の中身の確認です。
kaori1994

2016/08/17 04:07

お世話になっております。 おっしゃる通り、まずは配列の問題からクリアしていこうと思います。 失礼しました。
guest

0

$_REQUEST[]変数の代わりに$_GET[]や、$_POST[]変数を使うのはなしでしょうか?

投稿2016/08/17 01:07

nullbot

総合スコア910

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

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

kaori1994

2016/08/17 01:16

terakura様、ご回答ありがとうございます。 今回、入力フォームから取得する値はどんなものが来てもPHPの処理にあまり違いを加えたくない(汎用的?)なコードを作成したいと思っております。なのでREQUESTを使っておりますが、GETやPOSTにすると何か解決するのでしょうか・・・!
nullbot

2016/08/17 01:23

全く解決したい問題に対する回答になってませんね。ごめんなさい。
kaori1994

2016/08/17 01:58

terakura様、お世話になっております。 いえ、恐らく私の文章が 私自身どこまで理解できて、何ができていないのかが伝えきれていない為だと思います。 申し訳ありません・・・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問