0

誰かが私がこれを単純化するのを手伝ってもらえますか?テーブルから大量のデータを表示するためのページがあります。このページは、GET呼び出しを介してさまざまな値を受け入れることになっています。少しスリムにしたいと思います。繰り返しますが、コードは機能します。私にとっては単なるスパゲッティです。

if(!$_REQUEST['foo']){
    $bar = $_REQUEST['bar'];
    if($bar=='all'||!$bar){ $stmt = "SELECT * FROM table
        WHERE qty > 0  and
             somedate >= \"{$start}\"  and
             somedate <= \"{$end}\"
        ORDER BY id desc
        ";}
    else{
    $stmt = "SELECT * FROM table
        WHERE qty > 0  and
             somedate >= \"{$start}\"  and
             somedate <= \"{$end}\"  and
             bar = '$bar'
        ORDER BY id desc
        ";}
}
else{
     switch($_REQUEST['foo']){
       case 'all':
        $stmt = "SELECT * FROM table
          WHERE qty > 0  and
          somedate >= \"{$start}\"  and
          somedate <= \"{$end}\"
          ORDER BY id desc";
        break;
     case 'open':
      $stmt = "SELECT * FROM table
          WHERE qty > 0  and
          closd = 0 and
          somedate >= \"{$start}\"  and
          somedate <= \"{$end}\"
          ORDER BY id desc";
      break;
     case 'closed':
      $stmt = "SELECT * FROM table
          WHERE qty > 0  and
          closd = 1 and
          somedate >= \"{$start}\"  and
          somedate <= \"{$end}\"
          ORDER BY id desc";
      break;
}}
4

1 に答える 1

2

これは、プログラムにいくつかの健全性チェックがあると仮定して、switch()を処理します。

<?php // RAY_temp_andy_foster.php
error_reporting(E_ALL);

$closd = '1=1';
switch($_REQUEST['foo'])
{
    case 'all':    $closd = '1=1';       break;
    case 'open':   $closd = 'closd = 0'; break;
    case 'closed': $closd = 'closd = 1'; break;
}
$stmt = "SELECT * FROM table WHERE qty > 0 AND somedate >= \"{$start}\"  AND somedate <= \"{$end}\" AND $closd ORDER BY id desc";

var_dump($ stmt);

HTH、〜レイ

于 2012-12-17T17:25:38.523 に答える