2017-01-04 1 views
1

私はmysqlからmysqliへのアップグレードと減価償却された機能の削除を主に扱う古いアプリを開発しています。混乱をデバッグしているときに、製品の編集や削除のために行ハイパーリンクでエラーが発生することがありました。例ifステートメントの3つの変数のうちの2つ1つに必要なものとその1つまたは両方と他のものの一方または両方

php?act=del&cat_id=5&bc=654321&ds=&src=app

php?act=del&cat_id=5&bc=&ds=ds12345&src=app

php?act=del&cat_id=5&bc=654321&ds=ds12345&src=app

いくつかは、いくつかは、一つの部分を2 があったが、その後、カテゴリ内の項目は、2つの異なる識別子「DS」や「BC」を持っているか、またはその両方ができることを発見しましたこれらのアイテムを編集または削除するためのリンクは、どちらか一方または両方を持つことはできません。または、異なるエラーを持つ可能性があります!このコードは、彼らが指摘したものです。

// Original code 
if ($_GET['act'] == 'del') { 
    $cat_id = $_GET['cat_id']; 
    $ds = $_GET['ds']; 
    $bc = $_GET['bc']; 

    if($cat_id == '' && $ds == '' || $bc == '') { 
    echo 'Error Cannot identify item for action!'; 
    } 
    else { 
    //$db = mysqli_connect($db_host, $db_login, $db_pwd, $db_name); 
    // Do some SQL Stuff in cat_id that match ds or bc 
} 

私は使用して、元の if($cat_id == '' && $ds == '' || $bc == '')のバリエーションの数十を試み|| & &と等しいか等しくない場合もありますが、いずれの場合でも正しい方法を得ることはできません。 trincotによって提案されたものを含む

ほとんどの場合のために動作しますが、DB =「」とBC =「」

コードをDSと接続することができます

if ($cat_id == '' && ($ds == '' || $bc == ''))

のすべてのケースのために、必要に応じて、私は作品を書いた下に悪いクエリ文字列しかし、私が望んでいたことは、誰かがそれを行うためのよりよい方法を持っているかもしれないということです。

// From GET -- Just to fix if($cat_id == '' && $ds == '' || $bc == '') { 

$cat_id = 3; 
$ds = 'bbb'; 
$bc = ''; 
// define some vars 
$c = 'NO'; $d = 0; $b = 0; $t = 0; $s = 0; 
if (is_numeric($cat_id)) { 
    $c = 'OK'; } 
if ($ds != '') { 
    $d = 1; 
} 
if ($bc != '') { 
    $b = 1; 
} 
$t = $d + $b; 
if ($s == $t || $c != 'OK') { 
    echo 'Error Cannot identify item for action! '; 
    } 
    else { 
    echo ' OK two out three aint bad as long as one is cat '; 
    //$db = mysqli_connect($db_host, $db_login, $db_pwd, $db_name); 
    // Do some SQL Stuff in cat_id that match ds or bc 
    } 

これは私が思いついたものの実用的なサンプルです。何か助けをいただきありがとうございます。ここで

http://sandbox.onlinephpfunctions.com/code/fd32ad87ff42836660a59f826b8f08fa0f8d16f0

私は反対テストしたい異なる例があります。そして、望む結果私は元のコードの他の部分を更新する必要があることを知っていますが、今のところ私はMy Errorをトリガーする簡単な方法を探しています! db connectの前に!

example 1: 
$cat_id = 3; 
$ds = ''; 
$bc = ''; 

Result: Error Cannot identify item for action! \\ No Part number either ds or bc 

example 2: 
$cat_id = 'a'; 
$ds = 'ds-195062'; 
$bc = '654321'; 

Result : Error Cannot identify item for action! \\ wrong cat_id 

example 3: 
$cat_id = ''; 
$ds = 'ds-195062'; 
$bc = '654321'; 

Result : Error Cannot identify item for action! \\ no cat id 

example 4: 
$cat_id = '5'; 
$ds = ''; 
$bc = '654321'; 

Result : OK two out three aint bad as long as one is cat 
\\ have a bc part number and a catagory 

example 5: 
$cat_id = '5'; 
$ds = 'ds-195062'; 
$bc = '654321'; 

Result : OK two out three aint bad as long as one is cat 
\\ have a bc and ds part number and a catagory 

example 6: 
$cat_id = '5'; 
$ds = 'ds-195062'; 
$bc = ''; 

Result : OK two out three aint bad as long as one is cat 
\\ have a ds part number and a catagory 

これはそれを期待して、元の質問に編集され

は私に

if ($_GET['act'] == 'del') { 
    $cat_id = (isset($_GET['cat_id']) && is_numeric($_GET['cat_id'])) ? intval($_GET['cat_id']) : 0; 
    $ds = isset($_GET['ds']) ? $_GET['ds'] : ''; 
    $bc = isset($_GET['bc']) ? $_GET['bc'] : ''; 
    if ($ds == '') { $ds = 'n'; } 
    if ($bc == '') { $bc = 'n'; } 

    if($cat_id == 0 || ($ds == 'n' && $bc == 'n')) { 

    echo 'Error! '; 
    echo 'Result: value of ds ' . $ds .' value of bc '. $bc .' cat id is '. $cat_id; 
    } 
    else { 
    echo 'Good To Go '; 
    echo 'Result: value of ds ' . $ds .' value of bc '. $bc .' cat id is '. $cat_id; 
    } 
} 
これを説明するために、このおかげで@trincotになってしまった

を探してありがとう今より明確です

+1

あなたが達成しようとしていますか?私はまだ理解できません。 –

+0

CAT_ID OKとdsがnullまたはBCヌルエラー をDS OK BC OKならばそれに行くためにCAT_ID OKとDSヌルが、BC OK良い場合はSQL に行きCAT_ID OKとDS OKしかし、BCヌル良い場合 をエラーではありませんCAT_ID場合SQL もしすべてがSQLに行くのがいいですか – chop62

答えて

3

&&||の演算子が間違っています。 &&||よりも優先されますが、それが明確であることを傷つけることはありませんので、余分な括弧が必要とされていないことを

if($cat_id == '' || ($ds == '' && $bc == '')) { 
    echo 'Error Cannot identify item for action!'; 
} 

注:これに

if($cat_id == '' && $ds == '' || $bc == '') { 
    echo 'Error Cannot identify item for action!'; 
} 

:これを変更します。また

、あなたのelseブロックは、他のすべてのコードが含まれていない限り、あなたはこのエラーが発生したときに(多分最初のハンドリングいくつかの他のをやった後の)スクリプトの実行を終了する必要があります。今すぐ

if($cat_id == '' || ($ds == '' && $bc == '')) { 
    echo 'Error Cannot identify item for action!'; 
    // Some other handling/rendering could come here, but then exit: 
    exit();  
} 

、変数はなりません''の場合、パラメータがまったく渡されません。それだけでなく、そのためにカバーするために良いでしょう(編集:とあなたが唯一の2番目のコードブロック内に持っていた数値のチェック)、そして最初のDO:

$cat_id = (isset($_GET['cat_id']) && is_numeric($cat_id)) ? $_GET['cat_id'] : ''; 
$ds = isset($_GET['ds']) ? $_GET['ds'] : ''; 
$bc = isset($_GET['bc']) ? $_GET['bc'] : ''; 
// ... and then: 
if($cat_id == '' || ($ds == '' && $bc == '')) { 
    echo 'Error Cannot identify item for action!'; 
    // Some other handling/rendering could come here, but then exit: 
    exit();  
} 
+0

私はそれを試みました.........しかし、それは最初にcat_idを検証し、すでにissetを使用することを計画していたなら、私は括弧をあなたの方法で試してみましたが、良い結果が得られなかったのです。ありがとうございました – chop62

+0

cat_idを少なくとも数値として検証するにはうまくいくと思います '$ cat_id =(isset($ _GET ['cat_id'])&& is_numeric($ _GET ['cat_id']))?もう一度@trincot – chop62

+0

私はそれを試してみました........問題は、dsとbcの両方が渡されなかった場合、それが原因でエラーが発生しないということです。それをスキップしました。私はむしろSQLエラーよりも私のエラーがあるので、私は解決策を探し続けます。 @trincot – chop62

関連する問題