2015-04-19 33 views
-3

我在驗證時遇到了一些問題。我在這裏有這樣的代碼片段:如果在查詢字符串中沒有設置pizza_size變量,並且產品類別的ID是1(對應比薩餅)或者已設置,但pizza_size值不等於smallmediumbig這需要返回到頁面products.php與大小沒有被選擇的消息。我試着用:比較相同變量的值時出錯

if(!isset($_GET['pizza_size']) || $_GET['pizza_size'] != "small" || $_GET['pizza_size'] != "medium" || $_GET['pizza_size'] != "big" && $category_id == 1) 
{ 
    redirect_to('products.php?message=no-size-informed'); 
} 
else //Add the product 

問題是,這是行不通的。即使pizza_size對應於small,mediumbig我收到錯誤消息。但如果我只使用一個比較,這很好,如:

if(!isset($_GET['pizza_size']) || $_GET['pizza_size'] != "small" && $category_id == 1) 
{ 
    redirect_to('products.php?message=no-size-informed'); 
} 

但我需要驗證3種尺寸。如何對所有三種可能的變量進行驗證?謝謝!

+0

會發生什麼? if(!isset($ _ GET ['pizza_size'])||($ _GET ['pizza_size']!=「small」|| $ _GET ['pizza_size']!=「medium」|| $ _GET ['pizza_size' ]!=「big」)&& $ category_id == 1) – veelen

+0

AND運算符將首先應用,,,如果$ _GET ['pizza_size']不存在,那麼它會發生錯誤... @Dyan順便說一句,你的錯誤 –

+0

@veelen同樣的事情。即使大小是小的,中等的或大的,我都有錯誤信息。 – Dyan

回答

2
if(($category_id == 1) 
    && !(isset($_GET['pizza_size']) && in_array($_GET['pizza_size'], array('small', 'medium', 'big'))) 
) { 
    redirect_to('products.php?mesage=no-size-informed'); 
} 
else { 
    // Add the product 
} 
+0

如果沒有設置$ _GET ['pizza_size']',這將導致'未定義'通知,這就是爲什麼OP以'!isset($ _ GET ['pizza_size'])開始' – Sean

+0

@Sean , 發現得好。我已經修改了答案以反映這一點。 – FixMaker

+0

謝謝!工作很棒!擁抱! – Dyan

1

你要做這樣的:如果你把額外的括號圍在中間部分

if(($category_id == 1) 
    && (isset($_GET['pizza_size'] && !in_array($_GET['pizza_size'], array('small', 'medium', 'big')) || !isset($_GET['pizza_size'] 
) { 
    redirect_to('products.php?mesage=no-size-informed'); 
} 
+0

我相信OP要檢查'... &&(!isset($ _ GET ['pizza_size'] ||!in_array($ _ GET ['pizza_size'],...' – Sean

+0

)是的,但如果in_array函數調用一個不存在的變量,可能會發生錯誤,所以你首先必須檢查變量是否設置。 – veelen

+0

感謝您的支持! – Dyan