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

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

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

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

Q&A

解決済

3回答

1401閲覧

入力チェックの際の0の処理について

newyee

総合スコア213

PHP

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

0グッド

0クリップ

投稿2019/05/01 01:29

編集2019/05/10 07:21

お問合せフォームによる入力チェックの処理を考えていたのですが、0の処理がうまくいかず、ご助言頂きたくご質問させて頂きました。
以下は、お問合せ入力画面の「test1.php」です。

php

1<?php 2if(!$_POST){ 3 $name = ''; 4 $age = ''; 5 $age_err = ''; 6} 7 8?> 9 10<!DOCTYPE html> 11<html lang="ja"> 12<head> 13 <meta charset="UTF-8"> 14 <style> 15 .red{ 16 color:red 17 } 18 </style> 19<script type="text/javascript"> 20 21function check(){ 22 23 if(window.confirm('送信してよろしいですか?')){ // 確認ダイアログを表示 24 25 return true; // 「OK」時は送信を実行 26 27 } 28 else{ // 「キャンセル」時の処理 29 30 31 return false; // 送信を中止 32 33 } 34 35} 36 37 38</script> 39</head> 40<body> 41 <h1 class="red">お問合せ画面</h1> 42 <h2>お問合せ内容を入力してください</h2> 43 <form action="test2.php" method="post" onSubmit="return check()"> 44 <p>(必須)名前<input type="text" name="name" value="<?php if($name){echo $name;}else{echo '';} ?>"></p> 45 <span class="red"> 46 <?php if(!empty($name_err)): ?> 47 <?=$name_err?> 48 <?php endif;?> 49 </span> 50 51 <p>(必須)年齢<input type="text" name="age" size="2" value="<?php if($age){echo $age;}else{echo '';}?>"></p> 52 <span class="red"> 53 <?php if(!empty($$age_err)): ?> 54 <?=$age_err?> 55 <?php endif;?> 56 57 </span> 58 <p>好きな色 59 <input type="checkbox" name="color[]" value="">60 <input type="checkbox" name="color[]" value="">61 <input type="checkbox" name="color[]" value="">62 </p> 63 64 <input type="submit" value="送信"> 65 66 </form> 67</body> 68</html> 69

以下は、入力フォームより送られた値の入力チェックを行う、test2.phpです。

php

1<?php 2// $name = ''; 3// $age = ''; 4if($_POST){ 5 6 $color = ''; 7 $name = filter_input(INPUT_POST,'name'); 8 $age = filter_input(INPUT_POST,'age'); 9 10 11 //if(count($_POST['color']) > 1){ 12 if(!empty($_POST['color'])){ 13 $color = implode(',',$_POST['color']); 14 15 } 16 //var_dump($color); 17 //} 18 var_dump($age); 19 20 if(!$name){ 21 $name_err = '名前を入力してください'; 22 } 23 24 if(!empty($age)){ 25 //全角を半角に 26 $age = mb_convert_kana($age,"a"); 27 //半角または全角のハイフンは取り除く 28 // $age = mb_ereg_replace("-", "", $age); 29 // $age = mb_ereg_replace("ー", "", $age); 30 // $age = mb_ereg_replace("-", "", $age); 31 //var_dump($age); 32 33 if(!ctype_digit($age)){ 34 $age_err = '年齢は整数を入力してください'; 35 } 36 echo __LINE__; 37 38 }else{ 39 40 $age_err = '年齢を入力してください'; 41 42} 43 44 45 46 47//var_dump($err); 48 49 50 if(!empty($name_err) || !empty($age_err)){ 51 include 'test1.php'; 52 }else{ ?> 53 54 <!DOCTYPE html> 55 <html lang="ja"> 56 <head> 57 <meta charset="UTF-8"> 58 <style> 59 .red{ 60 color:red; 61 } 62 </style> 63 </head> 64 <body> 65 <h1 class="red">お問合せ完了画面</h1> 66 <h2>送信しました</h2> 67 <table border="1"> 68 <tr> 69 <td>名前</td> 70 <td><?= $name?></td> 71 </tr> 72 <tr> 73 <td>年齢</td> 74 <td><?=$age?></td> 75 </tr> 76 <tr> 77 <td>好きな色</td> 78 <td> 79 <?php 80 if($color){ 81 echo $color; 82 } 83 ?> 84 </td> 85 </tr> 86 </table> 87 </body> 88 </html> 89 90<?php 91 } 92} 93 94?> 95

「test1.php」の名前入力欄及び、年齢入力欄に「0」を入力すると、以下の画像のようになります。
イメージ説明

名前の欄には、0と表示されずエラーメッセージが表示され、年齢の欄には、

php

1<p>(必須)年齢<input type="text" name="age" size="2" value="<?php if($age){echo $age;}else{echo '';}?>"></p>

ここで入力保持の為、設定した$ageが表示されません。
上記問題を解決するには、どのようにすれば良いでしょうか?
追記です。
「0」のチェックを解決したコードを作り直してみましたので、下記に追加しておきます。
下記は、お問合せ入力画面の「inquiry_form.php」です

php

1<?php 2 session_start(); 3 4 $err = []; 5 if(!empty($_POST)){ 6 $name = filter_input(INPUT_POST,'name'); 7 $age = (string)filter_input(INPUT_POST,'age'); 8 $color = filter_input(INPUT_POST,'color', FILTER_DEFAULT,FILTER_REQUIRE_ARRAY); 9 //全角を半角にし、空白を削除 10 $name = str_replace([' ',' '], '', mb_convert_kana($name, 'a', 'UTF-8')); 11 $age = str_replace([' ',' '], '', mb_convert_kana($age, 'a', 'UTF-8')); 12 var_dump($age); 13 if(!strlen($name) > 0){ 14 15 $name_err = '必須項目です'; 16 echo __LINE__ . PHP_EOL; 17 }else{ 18 echo __LINE__ . PHP_EOL; 19 20 } 21 22 if(empty($name_err)){ 23 $_SESSION['name'] = $name; 24 } 25 26 if(strlen($age) > 0){ 27 echo __LINE__; 28 29 if(!ctype_digit($age)){ 30 var_dump($age); 31 32 $age_err = '年齢は整数を入力してください'; 33 var_dump($age); 34 echo __LINE__ . PHP_EOL; 35 }else{ 36 var_dump($age); 37 echo __LINE__ . PHP_EOL; 38 } 39 }else{ 40 $age_err = '必須項目です'; 41 echo __LINE__; 42 } 43 44 // var_dump($name_err); 45 // var_dump($age_err); 46 // exit(); 47 if(empty($age_err)){ 48 $_SESSION['age'] = $age; 49 } 50 51 // var_dump($age); 52 // var_dump($age_err); 53 // exit(); 54 55 if($color){ 56 $color = implode('、',$color); 57 echo __LINE__ . PHP_EOL; 58 }else{ 59 $color = array(); 60 $color = ''; 61 //echo __LINE__ . PHP_EOL; 62 } 63 64 $_SESSION['color'] = $color; 65 66 if(empty($name_err) && empty($age_err)){ 67 header('Location:complete.php'); 68 exit(); 69 echo 'OK'; 70 echo __LINE__; 71 } 72 // var_dump($name_err); 73 // var_dump($age_err); 74 // exit(); 75 76 77 } 78 79?> 80 81 82 83<!DOCTYPE html> 84<html lang="ja"> 85<head> 86 <meta charset="UTF-8"> 87 <title>お問合せ</title> 88</head> 89<body> 90 <h1 style="color:red">お問合せ画面</h1> 91 <p>お問合せ内容を入力してください。</p> 92 <form id="input_form" action="inquiry_form.php" method="post"> 93 <p> 94 (必須)名前<input type="text" name="name" value="<?php echo isset($name) ? $name : ''; ?>"> 95 <span style="color:red"><?php echo isset($name_err) ? $name_err : ''; ?></span><br> 96 (必須)年齢<input type="text" name="age" size="5" value="<?php echo isset($age) ? $age : '';?>">97 <span style="color:red"><?php echo isset($age_err) ? $age_err : ''; ?></span><br> 98 99 好きな色&emsp;<input type="checkbox" name="color[]" value="">100 <input type="checkbox" name="color[]" value="">101 <input type="checkbox" name="color[]" value="">102 </p> 103 <input type="submit" value="送信"> 104 </form> 105 <script> 106 document.addEventListener('DOMContentLoaded',function(){ 107 document.getElementById('input_form').addEventListener('submit',function(e){ 108 if(!window.confirm('ページを送信しても良いですか?')){ 109 e.preventDefault(); 110 } 111 },false) 112 },false); 113 </script> 114</body> 115</html>

下記は、完了画面の「complete.php」です

php

1<?php 2session_start(); 3?> 4 5<!DOCTYPE html> 6<html lang="ja"> 7<head> 8 <meta charset="UTF-8"> 9 <title> お問合せ完了</title> 10</head> 11<body> 12 <h1 style="color:red">お問合せ 完了画面</h1> 13 <h3>送信しました</h3> 14 <table border="1" > 15 <tr> 16 <td>名前</td> 17 <td><?php echo $_SESSION['name']; ?></td> 18 </tr> 19 <tr> 20 <td>年齢</td> 21 <td><?php echo $_SESSION['age']; ?></td> 22 </tr> 23 <tr> 24 <td>好きな色</td> 25 <td><?php echo $_SESSION['color']; ?></td> 26 </tr> 27 </table> 28</body> 29</html>

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

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

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

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

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

guest

回答3

0

ミニマルなテストコードを書いて試そう。

php

1<?php 2 3$arr = [0, '0', '00']; 4foreach ($arr as $val) { 5 if ($val) { 6 echo 'TRUE' . PHP_EOL; 7 } 8 else { 9 echo 'FALSE' . PHP_EOL; 10 } 11}

結果
イメージ説明

投稿2019/05/01 03:06

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

newyee

2019/05/01 03:10

ご回答ありがとうございます。 そうですね。今後はできるだけミニマムコードで、検証していこうと思います。
guest

0

0はfalseだから、です。
論理型 (boolean)

boolean に変換する場合、次の値は FALSE とみなされます。

boolean の FALSE integer の 0 (ゼロ) float の 0.0 (ゼロ) **空の文字列、 および文字列の "0"** 要素の数がゼロである 配列 特別な値 NULL (値がセットされていない変数を含む) 空のタグから作成された SimpleXML オブジェクト

三項演算子を使わないのでしたら1行に詰め込むのではなく丁寧に書いたほうが良いです。

それにfilter_input()使うのなら$_POSTで確認する必要もない。
なぜなら送信されてなかったらnullだから。
分岐によって別の画面をincludeするのであればなおさら$_POSTは不要です。

colorだけ$_POSTから取り出すのも意味がないです。filter_input()でnullかどうかを確認してimplode()すれば良い話で。

分岐でようやくセットされる変数の初期化処理がコメントアウトされているのも謎ですね。

echo書いたり<?=とshort tag使っていたり、コーディングに統一性がないのもよろしくない。

入力値の出力にHTMLエスケープが施されてないですね。


入力画面includeを生かして適当に組みなおしたコード
適当に役割分担。Validationのところとか入力フォーム表示とかClassでやったほうがそれっぽい感じになるので望ましい。(今回の内容だけでもオレオレフレームワーク一歩手前)

返り値の型宣言とか使ってるのでPHP7以上でのみ動作可能

helper.php

php

1<?php 2//二重定義阻止 3if(!function_exists('h')){ 4 function h($str) 5 { 6 return htmlspecialchars($str, ENT_QUOTES, 'UTF-8'); 7 } 8 9} 10if(!function_exists('ak')){ 11 function ak($key,array $array):bool 12 { 13 return array_key_exists($key,$array); 14 } 15} 16if(!function_exists('iar')){ 17 function iar($key,array $array):bool 18 { 19 return in_array($key,$array); 20 } 21}

input_config.php

php

1<?php 2return [ 3 'name'=>[ 4 'label'=>'名前', 5 'type'=>'text', 6 'required'=>true, 7 'validation'=>'required' 8 ], 9 'age'=>[ 10 'label'=>'年齢', 11 'type'=>'text', 12 'required'=>true, 13 'validation'=>'required|number' 14 ], 15 'color'=>[ 16 'label'=>'好きな色', 17 'type'=>'checkbox', 18 'select'=>['赤','緑','青'] 19 ], 20];

validation.php

php

1<?php 2function validation():array 3{ 4 $input_config = require_once 'input_config.php'; 5 6 $err = []; 7 foreach($input_config as $input_name=>$setting){ 8 if(ak('validation',$setting)){ 9 $vali = explode('|',$setting['validation']); 10 foreach($vali as $checktype){ 11 $check_name = $checktype.'Check'; 12 $res = false; 13 if(function_exists($check_name)){ 14 switch($checktype){ 15 default: 16 $res = $check_name(filter_input(INPUT_POST, $input_name),$setting['label']); 17 } 18 if($res){ 19 $err[$input_name][] = $res; 20 } 21 } 22 } 23 } 24 } 25 26 return $err; 27} 28 29function requiredCheck(string $value,string $name) 30{ 31 if(trim($value) === ''){ 32 return $name.'を入力してください'; 33 } 34 return false; 35} 36function numberCheck(string $value,string $name) 37{ 38 if(!empty($value) && !(ctype_digit($value))){ 39 return $name.'は整数を入力してください'; 40 } 41 return false; 42}

test1.php

php

1<?php 2require 'helper.php'; 3$input_config = require 'input_config.php'; 4if(!isset($err)){ 5 $err = []; 6} 7 8?> 9<!DOCTYPE html> 10<html lang="ja"> 11<head> 12<meta charset="UTF-8"> 13<title>入力</title> 14<style> 15h1 { 16 color: #f00 17} 18.error { 19 color: #f00 20} 21</style> 22<script> 23function check(){ 24 if(!confirm('送信してよろしいですか?')){ 25 return false; 26 } 27} 28</script> 29</head> 30<body> 31 <h1>お問合せ画面</h1> 32 <h2>お問合せ内容を入力してください</h2> 33 <form action="test2.php" method="post" onSubmit="return check()"> 34 <?php 35 foreach($input_config as $input_name=>$setting){ 36 echo '<p>'; 37 if(ak('required',$setting) && $setting['required']){ 38 echo '(必須)'; 39 } 40 echo $setting['label']; 41 switch($setting['type']){ 42 case 'text': 43 $input_data = filter_input(INPUT_POST,$input_name); 44 echo '<input name="'.$input_name.'" value="'.h($input_data).'">'; 45 break; 46 case 'checkbox': 47 $input_data = filter_input(INPUT_POST,$input_name, FILTER_DEFAULT, [ 48 'flags' => FILTER_REQUIRE_ARRAY 49 ]); 50 if(ak('select',$setting) && is_array($setting['select'])){ 51 if(is_null($input_data)){ 52 $input_data = []; 53 } 54 foreach($setting['select'] as $in=>$val){ 55 echo '<input type="checkbox" name="'.$input_name.'[]" value="'.$in.'"'.(iar($in,$input_data)?' checked':'').'>'.$val.'&nbsp;'; 56 } 57 } 58 break; 59 } 60 echo '</p>'; 61 if(ak($input_name,$err)){ 62 echo '<span class="error">'.implode('<br />',$err[$input_name]).'</span>'; 63 } 64 } 65 ?> 66 <input type="submit" value="送信"> 67 </form> 68</body> 69</html> 70<?php 71exit();

test2.php

php

1<?php 2if($_SERVER['REQUEST_METHOD'] !== 'POST'){ 3 require_once 'test1.php'; 4} 5require 'helper.php'; 6require_once 'validation.php'; 7 8$err = validation(); 9 10if (count($err) > 0) { 11 require_once 'test1.php'; 12} 13$input_config = require 'input_config.php'; 14?> 15<!DOCTYPE html> 16<html lang="ja"> 17<head> 18<meta charset="UTF-8"> 19<title>送信</title> 20</head> 21<body> 22 <h1 class="red">お問合せ完了画面</h1> 23 <h2>送信しました</h2> 24 <table border="1"> 25 26 <?php 27 foreach($input_config as $input_name=>$setting){ 28 echo '<tr>'; 29 echo '<td>'.$setting['label'].'</td>'; 30 echo '<td>'; 31 switch($setting['type']){ 32 case 'text': 33 $input_data = filter_input(INPUT_POST,$input_name); 34 echo h($input_data); 35 break; 36 case 'checkbox': 37 $input_data = filter_input(INPUT_POST,$input_name, FILTER_DEFAULT, [ 38 'flags' => FILTER_REQUIRE_ARRAY 39 ]); 40 if(ak('select',$setting) && is_array($setting['select'])){ 41 if(is_null($input_data)){ 42 $input_data = []; 43 } 44 foreach($setting['select'] as $in=>$val){ 45 if(iar($in,$input_data)){ 46 echo $val.'&nbsp'; 47 } 48 } 49 } 50 break; 51 } 52 echo '</td>'; 53 echo '</tr>'; 54 } 55 ?> 56 </table> 57</body> 58</html> 59<?php 60exit();

includeでの別画面表示をいかしたためにhelperで二重定義防止をしていますが
ビューファイルはやはり1画面1つにしたほうがいいと思う。

入力チェック後入力画面をそのまま入力値を初期値で表示させるなら入力チェックは自画面で行ったほうが良いと思います。
リダイレクトするとか、リダイレクトが嫌ならJavaScriptでするとか、サーバーサイドでチェックしたいならAjaxでするとか、方法は幾らでもあります。

投稿2019/05/01 02:22

編集2019/05/01 08:23
m.ts10806

総合スコア80850

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

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

newyee

2019/05/01 02:44

ご回答ありがとうございます。 実は先日、会社の実技試験のようなものがあり、そこで出された課題だったのですが、ここの「0」の処理がうまくいかず、結果完成させることができず、終わってしまいまして。復習の最中でした。 完成にはいたらなかったですが、入力値保持や「0」の挙動など、勉強になる部分は多々ありましたね。 >「後ほど適当に組みなおしたコードを投稿するので」 これは助かります。自分も、「include」などその場で咄嗟に思いついたものですし、出力されるエラーなどを消すために色々いじっていたのですが、最後の方は混乱しきっていましたので。 もっと、色んなものを作っていかなければと、痛感しました
newyee

2019/05/01 02:47

あ、一応自分も、他のご回答者の方に頂きましたアドバイスを元に、作成しなおしまして、とりあえずは、実技試験の際に出された、要件は満たせたかなと思います。
newyee

2019/05/01 02:47

まぁコードは汚いですがね。。。
m.ts10806

2019/05/01 02:53

回答で指摘しましたようにコーディングに一貫性がないので、いっそ最初から作り直したほうがスッキリすると思います。 私も作るにしてもHTML部分以外ほぼ無視しますし。
newyee

2019/05/01 03:08

test2.phpのif($_POST)の処理は、記述を削除しまして、checkboxからの値は,filter_inputにかけました。 確かに、ちょっと一貫性にかけますよね。 やはり、一度作りなおしてみた方が、良いかもしれませんね
newyee

2019/05/01 03:17

実際、自分は「include」の扱いになれていなかったので、使用はしたくなかったのですが、それ以外に方法は思いつかなかったもので... 今回のように、別ファイルにpostさせ、そこで値などを代入させた変数を元ファイルのHTML内に組み込みたい場合、include以外の方法はありますでしょうか?
m.ts10806

2019/05/01 03:41

そこは作る側の都合だけです。 test2が入力内容の確認画面だとして、urlが確認画面のまま入力画面を出すかどうか。使う側としては入力した情報が表示されれば良いので手段は幾らでもあります。 セッションに入れてリダイレクトするとか、JavaScriptからlocalStorageに入れるとか、一時ファイルに入れておくとか。
m.ts10806

2019/05/01 03:44

クエリストリングで分岐かけて1ファイルですべてやりきることもできますし。
newyee

2019/05/01 03:51

なるほど。考えようによっては、やり方は様々あるってことですね
newyee

2019/05/01 06:44

コードの追記ありがとうございます。 今、コード拝見させて貰っているのですが、input_config.phpの配列を定義している部分は、$arr[]この形でなく、return []とこういった形もできるんですね。
m.ts10806

2019/05/01 07:05 編集

どういう理解をしていたのかがわかりません。
m.ts10806

2019/05/01 07:06 編集

$arr[]だと array(array())ですよね。 お分かりかと思いますが array() は [] と書くことができますし(PHP5.4から) PHPマニュアル上でも関数ではないのでarray()という書き方は他の言語からすると異端な書き方で、避けられるべき書き方です。 https://qiita.com/tadsan/items/157969b338fd8b782b21#%E9%85%8D%E5%88%97%E3%81%AFarray%E3%81%A7%E4%BD%9C%E3%82%8B 私のコードでいえば、validation()は何もエラーがなければ[]が返りますよ。
newyee

2019/05/01 11:17

コードが複雑で、少し分からない部分があるのですが、「 $input_data = filter_input(INPUT_POST,$input_name, FILTER_DEFAULT, [ 'flags' => FILTER_REQUIRE_ARRAY ]);」 ここの部分で、入力画面を表示する為に、filter_inputを通している理由はなんなんでしょうか? fileter_inputはpostされた値にかけるものだと、認識していました為、少し、何故かなと思いまして...
m.ts10806

2019/05/01 11:56

かける、というか、実行結果はあくまで送信された値ですよね。それと役割分担 というところから考えてください。(答えだけ求めても理解にはたどり着かないので) というか、蛇足部分なので、あとはがんばってください(もともと詳細解説するつもりはないです) そこで以前何度も言われてた「処理の切り分け」にたどり着かないのが残念ですね。これが理解できれば幾らでも展開可能なのですけど。
newyee

2019/05/01 12:00

分かりました。頑張ってみます
m.ts10806

2019/05/01 12:01

理解するにはPHPマニュアルを使いこなす必要があります。良かったですね。いい機会ができて。
newyee

2019/05/10 06:14 編集

あれから、もう一度最初から作り直してみたのですが、意外に終わってみるとあっさりとできました。 バリデーションの「0」をチェックする部分はてこずりましたが、あとは、セッションを使って簡単に完了ページを表示するだけだったので、あっけなかったなといった印象です。 色んな実装のやり方があるのだなと、勉強になりましたね
m.ts10806

2019/05/10 06:23

1週間以上時間が経っているのでどんなものになったのか想像つかないですが、進んだようで何よりです。 PHPマニュアルを逐次確認してミニマムコードで試した結果と勝手に思っておきます。
newyee

2019/05/10 07:24

コードを追記しておきました。 includeなどをしなくても、大分シンプルにかけるのだなと、いい経験になりました。 入力保持=クッキーなどに保存すると、どこかで思い込んでいたので、クッキー使用せずに作れてよかったかなと思っています
m.ts10806

2019/05/10 07:26

セッションは適切に管理(削除・編集・解放)しないとバグのもとになりますのでご注意を。 あれも元を辿ればテキストデータなので。
newyee

2019/05/10 07:28

分かりました。セッションの扱いには、注意したいと思います
m.ts10806

2019/05/10 07:39

一応、セッションファイルの生成や中の状態など、確認してみると良いかもしれません。 (というか現在のコードでも「用事が済んだら削除」してなので残りっぱなしになりそうな気がしますが)
guest

0

ベストアンサー

if(!$name){if($age){echo $age;}else{echo '';}は0をif文で評価するとずっとfalseだからエラーになってしまうのじゃないでしょうか?
strlenメソッドで分岐させるといいと思います!

投稿2019/05/01 01:34

編集2019/05/01 01:36
hogejack

総合スコア51

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

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

newyee

2019/05/01 01:43

ご回答ありがとうございます。 if($var)は0をfalseにすることを知りませんでした... 自分は、issetでも可能かな?と思ったんですが、strlenメソッドではどのように分岐すれば良いのでしょうか...?
azuapricot

2019/05/01 01:54

if(strlen($age) > 0) で長さを図って0かそうじゃないかで見ればよいのではないでしょーか。
azuapricot

2019/05/01 01:56

結局質問者さんも文字が入力されている=TRUE,されていない=FALSEでif文分岐させようとしていたのですから、 入力された文字数が0か1以上かで判断するのは考え方としてはそう変わりないでしょう。
m.ts10806

2019/05/01 02:26

ctype_digit()でチェック入れてるのでstrlen不要では? むしろfilter_input()まったく活かしてないほうが問題に思います
hogejack

2019/05/01 02:46 編集

>azuapricotさん:補足ありがとうございます!! >mts10806さん: ctype_digitでチェックしてるのは年齢で、名前欄の方をチェックをしていないので strlen(ctype_digitでもいいですが)でのチェックは必要かと思ったのですが、いかがでしょうか? たしかにfilter_inputはフィルタも使えるので、本来なら検証処理はもう少し簡単にできますね!
m.ts10806

2019/05/01 02:51

入力値そのまま出すという目的だけなので、初期値空にしておけばいいだけの話ですしね。出力時にわざわざ変数の存在チェックするのが間違いというのが本来突っ込みたいところです。
hogejack

2019/05/01 03:19 編集

>newyeeさん: 進み具合はどうでしょうか?azuapricotさんの補足後もよくわからない、できないところがありますか? もしあるなら教えてください~!一緒に解決しましょう!!
newyee

2019/05/01 03:20

返信遅れてしまい、すみません。 ご回答者様から頂いたアドバイスを元に、「0」の入力チェックの問題はコードを以下のように書き換えましたら、解決することができました。 「if(!strlen($name) > 0){ if(!$name){ $name_err = '名前を入力してください'; } } if(!strlen($age) > 0){ if(!$age){ $age_err = '年齢を入力してください'; } }else{ //全角を半角に $age = mb_convert_kana($age,"a"); if(!ctype_digit($age)){ $age_err = '年齢は整数を入力してください'; } //echo __LINE__; }」
newyee

2019/05/01 03:24

strlenをまさか使用して、「0」の問題を解決するというのは自分には思いつきませんでしたので、助かりました。
newyee

2019/05/01 03:24

ありがとうございました。
hogejack

2019/05/01 03:35

それは良かったです!! 条件分岐をもう少し簡単にできそうなのでいろいろ改善してみると良いかもしれません!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問