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

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

ただいまの
回答率

90.51%

  • PHP

    24018questions

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

  • 配列

    610questions

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

  • バリデーション

    53questions

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

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

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 2,507

kaori1994

score 20

お世話になっております。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[] としまして、無事配列化することができました。
皆さまありがとうございました。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kaori1994

    2016/08/17 13:03

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

    キャンセル

  • kei344

    2016/08/17 13:35

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

    キャンセル

  • kaori1994

    2016/08/17 14:55

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

    キャンセル

回答 3

checkベストアンサー

+2

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

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

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


とするのでは?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/08/17 11:22

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

    キャンセル

  • 2016/08/17 11:43

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

    キャンセル

  • 2016/08/17 13:06 編集

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

    キャンセル

+1

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/08/17 10:21

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

    キャンセル

  • 2016/08/17 10:51

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

    キャンセル

  • 2016/08/17 10:59

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

    キャンセル

  • 2016/08/17 11:42

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

    キャンセル

  • 2016/08/17 13:07

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

    キャンセル

0

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/08/17 10:16

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

    キャンセル

  • 2016/08/17 10:23

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

    キャンセル

  • 2016/08/17 10:58

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

    キャンセル

同じタグがついた質問を見る

  • PHP

    24018questions

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

  • 配列

    610questions

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

  • バリデーション

    53questions

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