0

サイトの高度な検索ページを作成しました。ローカルホストで実行するとすべてが機能しますが、リモートサーバーに同じページをアップロードすると、phpに機能しない状態があります。

私の考えは、フォームで何もコンパイルされていない場合、ユーザーは使用しているすべての製品を取得するということです

$query = "SELECT * FROM table";

入力の 1 つが何かで満たされていなければ、WHERE 句と必要なクエリの一部が追加されます。

これは私のコードです:

public function fetch_this($a, $b, $c, $d){
        $search_connection = new Search_connection();//connect to database
        $query = "SELECT * FROM table";
        if ((isset($a) && $a!= NULL) or (isset($b) && $b!= NULL) 
            or (isset($c) && $c!= NULL) or (isset($d) && $d!= NULL)){
            $query.=" WHERE ";
        }
        $contatore = 0;

        if(isset($a) && $a!= NULL){
            $query.= "((a<= '$a' and b>= '$a') or a LIKE '$a')";
            $counter++; 
        }


            //... same for b c d 

           $search_connection->connetti();
           $res = mysql_query($query);
           return $res;
}

最初は (isset($a) && $a!= NULL) の代わりに !empty を使用しましたが、入力で '0' を取得する必要があり、empty() は 0 を検索する代わりに true を返しました。

すでにis_null(), !==NULL, !=false, !$aecc を試しましたが、何も機能しません。

何かアドバイス?

localhost では機能するのにリモート サーバーでは機能しない理由がわかりません。php のバージョンは同じです。

ありがとう!

編集1:

vardump ($a) を空のままにしておくと、次のようになります。

localhost: string(0) ""
remoteserver: bool(false) 

入力に ​​0 を入力した場合:

localhost: string(1) "0"
remoteserver:bool(false)

これが問題です。

関数を起動するコードは次のとおりです。

$a= mysql_real_escape_string($_GET['a']);
    $b= mysql_real_escape_string($_GET['b']);
    $c= mysql_real_escape_string($_GET['c']);
    $d= mysql_real_escape_string($_GET['d']);

    $res = $single_query->fetch_this($a, $b, $c, $d);
4

2 に答える 2

0

issetNULL の場合は false を返すため、2 番目の条件は不要です。

ただし、 isset は空の文字列の場合は true を返すため、代わりにそれを確認してください。

 if ( isset($a) && $a != '')

アップデート:

別のアプローチを使用して、クエリの値を確認するだけです。

SELECT * FROM table
WHERE
('$a' <> '' AND 
( (a <= '$a' AND b >= '$a') OR a LIKE '$a')
);

検索パラメーターが空白または NULL の場合、WHERE 句がショートサーキットされます。

'$a' <> ''

false を返します。

于 2013-10-22T08:17:11.803 に答える
-3

これを試してみてください

if(isset($a) || ($a!= NULL)){

于 2013-10-22T08:09:22.253 に答える