0

共通変数に渡された GET 値に基づいてクエリ文字列を作成しようとしています:

isset なら gTipo = $_GET['tipo'] など。

したがって、機能していないコードは次のとおりです。

$sqlLista   =   'SELECT * FROM produtos';


if($gTipo <> 0 || $gLinha <> 0)
{
    if($gtipo <> 0 && $gLinha == 0 )
    {
        $sqlLista .= ' WHERE id_tipo = '.$gTipo.'';
    }
    if($gtipo <> 0 && $gLinha <> 0)
    {
        $sqlLista .= ' WHERE id_tipo = '.$gTipo.' AND id_linha = '.$gLinha.'';
    }
    if($gTipo == 0 && $gLinha <> 0)
    {
        $sqlLista .= ' WHERE id_linha = '.$gLinha.'';
    }
}

URL を ?tipo=2&linha=4 に設定すると、スクリプトはこの GET 変数をキャプチャし、共通変数 gTipo と gLinha を作成します。この GET のいずれかが設定されていない場合、gTipo または gLinha は「0」(ゼロ) の値を受け取ります。

クエリ構築のスクリプトを実行すると、if ( $sqlLista = 'SELECT * FROM produtos'; ) の外で行われることを除いて、何も $sqlLista に連結されません。

きっとこれは私には見えない愚かなものに違いない。助けてください=)

4

3 に答える 3

2

あなたの問題は可変ケースだと思います:

if($gtipo <> 0...

する必要があります

if($gTipo <> 0...

2か所。

于 2011-09-25T15:51:26.740 に答える
1

何が問題なのかわかりませんが、コードが少し肥大化しているように見えます。私
はこのようにします

$w = array();
$where = '';
if (!empty($_GET['tipo'])) $w[] = 'id_tipo = '.intval($_GET['tipo']);
if (!empty($_GET['linha'])) $w[] = 'id_linha = '.intval($_GET['linha']);
if ($w) $where = " WHERE ".implode(' AND ',$w);
$sqlLista = SELECT * FROM produtos'.$where;

自分が何をしているのかを理解していることを願っており、クエリには OR ではなく AND が本当に必要です。

検証が既にある場合、コードはさらに短くなります

$w = array();
$where = '';
if ($gtipo) $w[] = "id_tipo = $gtipo";
if (gLlinha) $w[] = "id_linha = gLinha";
if ($w) $where = " WHERE ".implode(' AND ',$w);
$sqlLista = 'SELECT * FROM produtos'.$where;
于 2011-09-25T15:58:45.327 に答える
0

変数名に一貫性がありません - $gTipo と $gtipo。

この行により、内部ロジックが実行されなくなります。それを除く。

if($gTipo <> 0 || $gLinha <> 0)

スタイルの問題として、論理エラーが発生した場合に複数の「WHERE」行が追加されるのを防ぐために、「else if」を使用する必要があります。

于 2011-09-25T20:31:30.620 に答える