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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

1034閲覧

emptyで0の判定をtrueにしたい。

UpaZiro

総合スコア17

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/11/16 09:38

前提・実現したいこと

掛け算をしてくれる入力フォームを作りたいです。
この時、
空欄ならば「数値を入力してください」
数値以外の文字列ならば「数値以外のものを入れないでください」
…という内容のメッセージを表示したくて以下のように記述したのです

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

「0」を入力した際にエラーメッセージが出てきてしまうのです。
empty関数で「0」がどうやら空要素判定を受けてしまうようなのですが…。
「0」の場合、正常に動いてくれるようにしたいです。

該当のソースコード

PHP,HTML

1<?php 2//変数宣言を行います 3$msg1 = ""; 4$msg2 = ""; 5$flg1 = ""; 6$flg2 = ""; 7$number1 = ""; 8$number2 = ""; 9$error = ""; 10 11//エラー処理① 12 13var_dump($_GET['num1']); 14var_dump(isset($_GET['num1']) == true); 15 16if(isset($_GET['num1']) == true){ 17 if(empty($_GET['num1']) == true){ 18 $msg1 = "数字1:半角数字で値を入力して下さい"; 19 $flg1 = 2; 20 } 21 elseif(!is_numeric($_GET['num1']) == true){ 22 $msg1 = "数字1:入力できるのは数字のみです"; 23 $flg1 = 2; 24 } 25 else{ 26 $number1 = $_GET['num1']; 27 $flg1 = 1; 28 $msg1 = ""; 29 } 30} 31 32//エラー処理② 33 34if(isset($_GET['num2']) == true){ 35 if(empty($_GET['num2']) == true){ 36 $msg2 = "数字2:半角数字で値を入力して下さい"; 37 $flg2 = 2; 38 } 39 elseif(!is_numeric($_GET['num2']) == true){ 40 $msg2 = "数字2:入力できるのは数字のみです"; 41 $flg2 = 2; 42 } 43 else{ 44 $number2 = $_GET['num2']; 45 $flg2 = 1; 46 $msg2 = ""; 47 } 48} 49 50//リダイレクト処理 51if($flg1 == 1 && $flg2 == 1){ 52} 53else{ 54 $error = "入力に誤りがあります"; 55} 56 57if(empty($flg1) == true && empty($flg2) == true){ 58 $error = ""; 59} 60 61?> 62 63<!DOCTYPE html> 64<html lang = "ja"> 65 66<head> 67 <meta charset="UTF-8"> 68 <title>掛け算システム</title> 69</head> 70 71<body> 72 73 <h1>掛け算をしてくれるシステムです</h1> 74 <p>数字を半角で入力してください</p> 75 76 <form method="get" action="./ep17-task_input_improvement-2.php"> <!-- この書き方をすると同じファイルのphpに移ることが出来る--> 77 <table border="1"> 78 <tr> 79 <td>数字1</td><td><input type="text" name="num1" value="<?php echo $number1 ?>"></td> 80 <td>×</td> 81 <td>数字2</td><td><input type="text" name="num2" value="<?php echo $number2 ?>"></td> 82 </tr> 83 <tr> 84 <th colspan="5"> <button type="submit">表示</button></th> 85 </tr> 86 </table> 87 88 </form> 89 90 <?php echo $error; ?><br> 91 <?php echo $msg1; ?><br> 92 <?php echo $msg2; ?><br> 93 94</body> 95 96</html>

試したこと

0の場合のみを作ろうとしましたが、文字列の際、うまく動かなくなります。
右辺が数値であるので、文字列が0に代わっているのでしょうか?

if($_GET['num1'] == 0){

}

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

特にありません。

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

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

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

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

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

guest

回答2

0

ベストアンサー

empty関数で「0」がどうやら空要素判定を受けてしまうようなのですが…。

はい、そのとおりの構文です。

変数が空であるとみなされるのは、変数が存在しない場合や 変数の値が FALSE に等しい場合です。(PHPマニュアルより)

ここではissetで値の存在はチェック済みなので、単に=== ''で空文字列かどうかを直接チェックするのが適当かと思います。

投稿2020/11/16 09:50

maisumakun

総合スコア146018

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

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

UpaZiro

2020/11/17 00:37

ありがとうございます!空欄の確認方法ならばそれでいいですね!! 助かりました!!
guest

0

入力値のチェックはfilter関数を利用すると効率的です

投稿2020/11/16 11:08

yambejp

総合スコア116724

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

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

yambejp

2020/11/16 11:08

<?PHP function h($str){ return htmlspecialchars($str); } $num1=filter_input(INPUT_GET,"num1"); $flg1_1=filter_var($num1,FILTER_VALIDATE_INT)===false; $flg1_2=$num1===""; $num2=filter_input(INPUT_GET,"num2"); $flg2_1=filter_var($num2,FILTER_VALIDATE_INT)===false; $flg2_2=$num2===""; $msg1=""; $msg2=""; if(!is_null($num1) and !is_null($num2)){ if($flg1_1) $msg1="数値1:整数のみ!"; if($flg1_2) $msg1="数値1:値が空"; if($flg2_1) $msg2="数値2:整数のみ!"; if($flg2_2) $msg2="数値2:値が空"; if($msg1==="" and $msg2===""){ print "答えは:".($num1*$num2)."<br>"; } } ?> <form method="get"> 数字1:<input type="text" name="num1" value="<?=h($num1);?>">× 数字2:<input type="text" name="num2" value="<?=h($num2);?>"><br> <button type="submit">表示</button> </form> <?=$msg1;?><br> <?=$msg2;?>
UpaZiro

2020/11/17 00:36

ありがとうございます! フィルター関数というものがあるんですね! そちらはまた今度学習しようと思います!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問