0

我试图确定数组中的变量是否存在,如果它是“真”的状态,如果不是“假”的状态。问题是我收到所有数组变量的响应,当我只想知道页面变量是否存在于数组中,链接如h​​ttp://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 ($cart) 中:

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'];)是否存在而没有其他三个?

4

1 回答 1

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用于检查密钥是否images_$page存在于$_SESSION. 它比调用 2 次substr()函数更快。

此外,由于我们只需要检查给定图像是否存在,foreach因此将循环替换为if.

之后,一个 MySQL 查询运行,并且由于我们只需要第一个匹配,LIMIT 1因此添加以使查询更快。与 image_id 的比较也已包含在查询中,因此足以测试是否有返回的行(这就是为什么 originalwhile被替换为if)。

于 2012-10-04T09:07:03.527 回答