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

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

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

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

Q&A

解決済

3回答

698閲覧

入力チェックしたときのエラーメッセージの代入の仕方。

kanmi310

総合スコア7

PHP

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

0グッド

0クリップ

投稿2018/03/28 13:46

編集2018/03/28 14:10

前提・実現したいこと

フォームから送られてきた変数の入力チェック。エラーが出た場合は$err_msgに配列として入れていきたい。

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

エラーが発生しなかった場合は $err_msg が {0} になるようにしたい。

該当のソースコード

<?php function check_item($str) { $err_msg = ''; if ($str === '') { $err_msg = '商品名を入力してください。'; } else if (trim(mb_convert_kana($str, "s")) === '') { $err_msg = '商品名を入力してください。'; } return $err_msg; } function check_num_price($price) { $err_msg = ''; if ($price === '') { $err_msg = '値段を入力してください。'; } else if (trim(mb_convert_kana($price, "s")) === '') { $err_msg = '値段を入力してください。'; } else if (preg_match('/^[1-9][0-9]*$/', $price) === 0) { $err_msg = '値段は正の整数で入力してください。'; } return $err_msg; } $item = 'something'; $price = '600'; $err_msg[] = check_item($item); $err_msg[] = check_num_price($price); var_dump($err_msg); ?>

試したこと

定義関数の中の$err_msgを初期化しないでやってみたら、NULLが代入されていってしまう。

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

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

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

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

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

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

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

kei344

2018/03/28 13:56

質問文のコードはコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。
guest

回答3

0

ベストアンサー

こんな感じ?

php

1<?php 2function check_item($str) { 3 if ($str === '') { 4 return '商品名を入力してください。'; 5 } 6 if (trim(mb_convert_kana($str, "s")) === '') { 7 return '商品名を入力してください。'; 8 } 9 return ''; 10} 11 12function check_num_price($price) { 13 if ($price === '') { 14 return '値段を入力してください。'; 15 } 16 if (trim(mb_convert_kana($price, "s")) === '') { 17 return '値段を入力してください。'; 18 } 19 if (preg_match('/^[1-9][0-9]*$/', $price) === 0) { 20 return '値段は正の整数で入力してください。'; 21 } 22 return ''; 23} 24 25$item = 'something'; 26$price = '600'; 27$err_msg = []; 28$err_msg[] = check_item($item); 29$err_msg[] = check_num_price($price); 30$err_msg = array_filter($err_msg, "strlen"); 31var_dump($err_msg);

投稿2018/03/28 14:46

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

kanmi310

2018/03/28 15:17

回答ありがとうございます。array_filter()によってエラーがなかった場合、配列を0にすることができました。
guest

0

がると申します。

個人的には、普段はあまり使わないのですが(クラスならプロパティとかありますし)。
記述に近い方法でやるのであれば、引数を参照型にして渡してやるのは如何でしょうか?

なにかの参考にでもなれば幸いです。

<?php function check_item($str, &$err_msg) { if ($str === '') { $err_msg[] = '商品名を入力してください。'; } else if (trim(mb_convert_kana($str, "s")) === '') { $err_msg[] = '商品名を入力してください。'; } } function check_num_price($price, &$err_msg) { if ($price === '') { $err_msg[] = '値段を入力してください。'; } else if (trim(mb_convert_kana($price, "s")) === '') { $err_msg[] = '値段を入力してください。'; } else if (preg_match('/^[1-9][0-9]*$/', $price) === 0) { $err_msg[] = '値段は正の整数で入力してください。'; } } $item = 'something'; $price = '600'; $err_msg = []; check_item($item, $err_msg); check_num_price($price, $err_msg); var_dump($err_msg);

投稿2018/03/28 14:32

gallu

総合スコア506

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

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

0

{0} がよくわかりませんが、こういうことでしょうか。

PHP

1function check_item( $str, $err_msg = [] ) { 2 if ($str === '') { 3 $err_msg[] = '商品名を入力してください。'; 4 } else if (trim(mb_convert_kana($str, "s")) === '') { 5 $err_msg[] = '商品名を入力してください。'; 6 } 7 return $err_msg; 8} 9 10function check_num_price( $price, $err_msg = [] ) { 11 if ($price === '') { 12 $err_msg[] = '値段を入力してください。'; 13 } else if (trim(mb_convert_kana($price, "s")) === '') { 14 $err_msg[] = '値段を入力してください。'; 15 } else if (preg_match('/^[1-9][0-9]*$/', $price) === 0) { 16 $err_msg[] = '値段は正の整数で入力してください。'; 17 } 18 return $err_msg; 19} 20 21$item = 'something'; 22$price = '600'; 23$err_msg = check_item( $item ); 24$err_msg = check_num_price( $price, $err_msg ); 25 26var_dump( $err_msg ); // array(0) { }

投稿2018/03/28 14:30

kei344

総合スコア69407

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

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

kanmi310

2018/03/28 15:21

すいません。array(0)にしたいという意味です。原因は分からないのですが、'''$err_msg = []'''という記述が僕のエディタだとできないようです。
kei344

2018/03/28 15:28

> 僕のエディタだとできないようです。 [] はPHP5.4以降なら使えるのでエディタの設定を確認されることをお勧めします。もしバージョン設定のような物が無いのであれば、他のエディタを探した方がよいかもしれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問