2012-10-04 51 views
0

我試圖確定數組中的某個變量是否存在,以及它是否爲「真」狀態,以及它是否爲「假」狀態。問題是,我receiveing所有數組變量的響應,當時我只是想知道,如果頁面變量存在與鏈接的陣列狀http://example.com/product.php?image_id=50數組中的變量:對或錯

<?php 
$page = $_GET['image_id']; 
if (!empty($_SESSION)){ 
foreach($_SESSION as $name => $value2) { 
    if (substr($name, 0, 7)=='images_') { 
    $id = substr($name, 7, (strlen($name)-7)); 
    $get = mysql_query('SELECT * FROM images WHERE image_id='.mysql_real_escape_string((int)$id)); 
    while ($cart_info_row = mysql_fetch_assoc($get)) { 
     $cart = array('image_id' => $cart_info_row['image_id'],); 
     if (in_array($page, $cart)){echo 'true';} else {echo 'false';} 
    } 
    } 
    } 
    } 
    } 
?> 

假設下面的數字是在SESSION的print_r(以$車):

Array ([image_id] => 42) false 

Array ([image_id] => 45) false 

Array ([image_id] => 50) true 

Array ([image_id] => 49) false 

現在,我怎麼能只識別如果變量50 ($page = $_GET['image_id'];)存在與出其他三個?

+1

難道你不能只是'$ cart_info_row ['image_id'] == $ page'? –

+0

不是'$ cart_info_row ['image_id']'與'$ id'相同嗎?爲什麼您需要執行查詢,除了確認是否有包含該圖像ID的行?爲什麼當數組只有一個元素時使用'in_array()'? – Barmar

回答

0

據我所知,您的代碼有兩件事:1 - 檢查會話中是否存在密鑰images_$page,以及2 - 檢查數據庫中是否存在帶有image_id=$page的圖片。

<?php 
$page = $_GET['image_id']; 
if(isset($_SESSION['images_'.$page])) 
{ 
    $get = mysql_query("SELECT * FROM images WHERE image_id='".mysql_real_escape_string($page)."' LIMIT 1"); 
    if($cart_info_row = mysql_fetch_row($get)) 
    { 
     echo 'true'; 
    } 
    else 
    { 
     echo 'false'; 
    } 
} 
else 
{ 
    echo 'false'; 
} 

這裏isset用來檢查是否存在$_SESSION關鍵images_$page。它比打電話給substr()函數要快。

此外,由於我們只需要檢查給定的圖像是否存在,因此foreach循環被替換爲if

之後,運行MySQL查詢,由於我們只需要第一次匹配,因此添加了LIMIT 1以加快查詢速度。與image_id的比較已經包含在查詢中,所以它足以測試是否有返回的行(這就是爲什麼原始while被替換爲if)。

+1

非常感謝!看起來不錯。唯一需要替換的項目是$ page和$ page。再次感謝! – user1719142

相關問題