2011-07-13 9 views
0

検索パラメータを入力できるPHPドリブンページがあります。これらの数字の1つは、いくつかの数字で構成されるIDです。これらの特定の数字で検索すると、すべての結果が返されます。MySQLクエリはPHPスクリプト経由で特定の検索パラメータを返さない

私はphpmyadminとSQLターミナルでまったく同じステートメントを実行し、検索したアイテムだけを返します。だから私は問題は、HTMLフォームに基づいて検索クエリを送信するために使用しているPHPにあると思います。

ステータスオプションのドロップダウンはうまくいきます。入力を必要とするフィールドは正しく動作しません。

また、私はNumericIdentiderが入力されると、すべてのデフォルトの状態が選択されている場合

EDITが結果をエコーphpadminに、私はそれらを見ることができるので、フィールドがデータベースに提出されていると確信しているし、彼らとの完全なSQL文表クローズド!= ''

<?php 
    if($_REQUEST['Search']) { 
    $sql = "SELECT"; 

    if(strlen($_REQUEST['NumericIdentifier']) > 0) { 
     $sql .= " * FROM Table Where NumericIdentifier = ".$_REQUEST['NumericIdentifier']; 
    } 

    if(strlen($_REQUEST['BeginDate']) > 0) { 
     $sql .= " * From Table Where TDate >= {$_REQUEST['BeginDate']}"; 
    } 

    if(strlen($_REQUEST['EndDate']) > 0) { 
     $sql .= " * From Table Where TDate <= {$_REQUEST['EndDate']}"; 
    } 

    if($_REQUEST['Status'] == 'Shipped') { 
     $sql .= "* From Table Where Closed = 'true' "; 
    } 

    if($_REQUEST['AreaCode'] > 0) { 
     $sql .= " * From Table Where AreaCode = {$_REQUEST['AreaCode']}"; 
    } 

    if($_REQUEST['Status'] == 'Recieved') { 
     $sql .= " * From Table Where Closed != 'true'"; 
    } 

    if($_REQUEST['Status'] == 'All') { 
     $sql = "Select * From Table Where Closed != '\0'"; 
    } 
    } else { 
    $sql = "SELECT * FROM Tickets"; 
    } 

    $res = mysql_query($sql, $conn1); 
    while($a = mysql_fetch_array($res)) { 
    echo "<tr><td>&nbsp;<a href='ticket.php?id=".$a['id']."'>".trim($a['id'])."</a>&nbsp;</td> \n <td> ".$a['Name']."</td> \n <td>".date("m/d/Y", strtotime($a['TicketDate']))."</td> \n <td>".$a['Issue']."</td> \n <td>".Showstatus($a['Closed'])." </td></tr>"; 
    } ?> 
</table> 
</body> 
</html> 
+3

1.ここで投稿する前に$ SQLを印刷し、結果(「デバッグ」とも呼ばれます)を調べる方法はありますか? 2.これらのリクエストのうち2つ以上が同時に成立する可能性があるので、本当に奇妙なクエリが出る可能性があります。3.すべての列が本当に必要ですか? – Jacob

+0

すべてのif文の後に$ sqlをエコーし​​てみてください。私は生成されたSQLがあなたが望むものではないと確信しています。 phpmyadminでそれを実行してみてください。 –

+0

私は、結合された状態とそれがどのように不正確になるかについて認識しています。実際には、それ自体が正しく送信されません。 – lomayne

答えて

0

Yeesh SELECT * FROM、あなたのSQLは動作しません。ユーザーがBEGINDATEとし、終了日の両方を入力し、クエリが日付がMyS​​QLの形式(YYYY-MM-DD)で適切に入力された場合でも、それはまだ

として出てくる

SELECT 
* From Table Where TDate >= {$_REQUEST['BeginDate']} 
* From Table Where TDate <= {$_REQUEST['EndDate']} 

になりましょう

SELECT 
* FROM Table Where TDate >= 01/01/2011 
* FROM Table Where TDate <= 31/12/2011 

日付の前後に引用符はありません。 MySQLはそれらの「日付」を分割されている数値と見なしますので、TDate >= 0.0004972...TDate <= 0.001284...

* from tableと2回も違法です。

あなたのコードは、明らかにエラー状態をチェックしていません。あなたが構築したクエリの何が間違っているかを正確に教えてくれるでしょう:

$result = mysql_query($sql) or die(mysql_error()); 

そして、最悪の場合、他の人が言っているように、あなたは完全にオープンでSQLインジェクション攻撃に対して脆弱ですが、私はそれには進まないでしょう...あなたのクエリーは、あなたの心配の中で最も攻撃は攻撃です。

関連する問題