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

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

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

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

Q&A

解決済

2回答

1159閲覧

nullの場合if文が反応しないようにしたい

chintao1224

総合スコア156

PHP

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

0グッド

1クリップ

投稿2020/09/12 14:25

編集2020/09/12 23:46

php7.1.8を使っています。

ajaxのgetでデータを送信してphpで受けています。
データを受けているかどうかの判断をif文で書いているのですが、if文の書き方が良くないのかif文をtrue判断してしまいます。

ajax

1var bango=$('#bango').val(); 2$.ajax({ 3 type: "GET", 4 url: "test1.php", 5 data: { 6 bango: bango 7 } 8});

php

1$bango=null; 2if(isset($_GET['bango'])){ 3 $bango = $_GET['bango']; 4} 5 6$sql=" select * from test " 7 ." where chk=1" 8if(!is_null($bango)){ 9 $sql=$sql." and bango=:bango" 10} 11$prepared = $db->prepare($sql); 12if(!is_null($bango)){ 13 $prepared->bindValue(':bango, $bango, PDO::PARAM_STR); 14}

bangoにデータを渡していないのにsql文にbangoの抽出が追加されてしまいます。
nullのときはbangoの抽出(and bango=:bango)をSQL文に追加しないようにしたいです。

if文の判断が良くないのでしょうか。

教えてください。
お願いします。

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

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

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

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

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

m.ts10806

2020/09/12 20:36

bango=null; ↑ここ本当にこう書いてますか? このままならエラーかと思います
chintao1224

2020/09/12 23:10

bango=null;でエラーにはなってないです。ちなみにbango="";にして、if(!empty($bango)){にしても駄目でした。上記コードと同じで、SQL文にand bango=:bangoが追加されてしまいます。
m.ts10806

2020/09/12 23:35

<?php もないのでそもそもPHPとして動かないということなのですけど。
m.ts10806

2020/09/12 23:36

>bangoにデータを渡していないのに 下記コードが本当なら、渡してますね。 $.ajax({ type: "GET", url: "test1.php", data: { bango: bango } }); ただ、コードがつまみすぎて誰も再現確認できないことは問題です。 コードは一通り、全体の流れが分かるものを提示してください。 このままではJavaScriptもPHPも動きません。
m.ts10806

2020/09/12 23:49

しつこいようですが、コードは一通り、全体の流れが分かるものを提示してください。 このままではJavaScriptもPHPも動きません。 HTMLもないわけですから。
chintao1224

2020/09/12 23:49

すみませんでした。記入ミスでした。申し訳ありませんでした。
m.ts10806

2020/09/13 00:54

<?php もないのでそもそもPHPとして動かないということなのですけど。
guest

回答2

0

bango=
だけ渡されたときに(つまりempty)どうする設計なのか次第ですが、ひとまずarray_key_existsまたはfilter_inputで対応してみてください。

投稿2020/09/12 20:39

m.ts10806

総合スコア80861

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

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

chintao1224

2020/09/12 23:38

コードを追記しました。やりたいことは、bangoをnullなどで初期化して、issetで判断しデータを受け取り、if(!is_null($bango))などで判断し受け取れてない場合SQL文を抽出から外したいということです。
m.ts10806

2020/09/12 23:41

実行的ないコードを提示されても的確なアドバイスは出来ませんが、 bango 変数 $bango 変数 意味が全く違います。 あとこの手の処理でissetで判定は基本的にしないですね。 issetをPHPマニュアルで確認すれば明白です。 それに、bangoというキー、渡してるし・・
m.ts10806

2020/09/12 23:51

今こういう状態なのは認識されてますでしょうか。 <?php $ar = []; $ar["test"] = ""; var_dump(isset($ar["test"])); // bool(true)
chintao1224

2020/09/13 00:02

すみません、初心者に近いもので。受け取るときはissetは使わないということでしょうか。
chintao1224

2020/09/13 00:09

すみません、データが渡されるときbangoだけ渡しているんですが、配列として渡されるのでしょうか。
m.ts10806

2020/09/13 00:55 編集

デバッグしてください。 初心者に近い=初心者からは抜け出している のでしたらデバッグは知っているはずです。
m.ts10806

2020/09/13 00:56

>データが渡されるときbangoだけ渡しているんですが、配列として渡されるのでしょうか。 Ajaxの基本からやってください。 何が渡されるか確認するやり方はそう難しくはなく調べればどこでもあります。 私が指摘しているのはisset()の役割を勘違いしているということです。 初心者抜け出しているならPHPマニュアルは適切に確認できるはずです。
chintao1224

2020/09/13 03:26

わかりました。ajaxの基本からやります。bangoがnullの場合SQLに追加させたくないので、nullでない判定ができるif文だけ教えてください。デバッグした結果、bangoにはnullが入っていました。if文はif($bango!=null)やif($bango!==null)やif(!($bango==null))やif(!($bango===null))すべて駄目でした。
m.ts10806

2020/09/15 23:23 編集

>nullでない判定ができる ですから、「nullである」という確認できてないからじゃないですか? デバッグしてください。 あと、emptyとnullは同じではないです。 data: { bango: bango } と書いてる時点でnullの可能性消えてませんか? HTML内に#bangoが存在しなければnullの可能性はありますが、存在するなら何かしら渡されます。HTMLないと何ともいえませんが、input系の要素であれば、「未入力」はnullではなく「empty」です。
guest

0

ベストアンサー

まずはクライアント側のbangoの取得状況

  • #bangoが存在しない
  • #bangoがvalueを持てない(例えばdiv)
  • #bangoがvalueを持っていない
  • #bangoのvalueが""
  • #bangoがvalueを持っており、空ではない

のように分類できます
そうすると以下のように場合分けができます

javascript

1var bango=$('#bango').val(); 2var data={}; 3if(typeof bango!=="undefined" && bango!=="") Object.assign(data,{bango});

これをサーバーサイドで処理する場合

PHP

1$bango=filter_input(INPUT_GET,"bango",FILTER_VALIDATE_REGEXP,["options"=>["regexp"=>"/\S/"]]);

のようにします。$bangoの値は

  • bangoが送られてこないときはnull
  • bangoが空や空白文字だけの場合はfalse
  • ちゃんと送られてくるときはその値

となりますので、その条件で場合分けをしてください

投稿2020/09/13 04:40

yambejp

総合スコア115010

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問