比较两个数组的问题

时间:2009-09-30 10:18:36

标签: php

我正在尝试比较2个阵列的内容,基本上我正在使用购物车,我需要检查提交的表格对数据库的价格,问题是当我在购物车中有一个不正确的价格它给了我一个错误信息,但当我有1个正确的价格和1个不正确的继续结账时,我不知道我做错了什么帮助将不胜感激。

 foreach ($cart->get_contents() as $item)
    {
    $item_id    = $item['id'];
    $item_name  = $item['name'];
    $item_price = $item['price'];
    $item_qty   = $item['qty'];

$connection = mysql_connect($dbhost,$dbuser,$dbpass) or die("Error connecting to mysql");
mysql_select_db($dbname);

$query = "select * from products where product_name = '$item_name'";

$result = mysql_query($query);
if (!$result) {
    echo mysql_error();
}

while ($row = mysql_fetch_assoc($result)) {
    $sql_price[] = $row['product_price'];
    $qty[] = $row['product_qty'];
    $name = $row['product_name'];
}
foreach($sql_price as $price) {
    $price = $price;
    if ($price !== $item_price) {
        $valid_prices = false;
    }else{


        $valid_prices = true;
    }
    }
    }

     if ($valid_prices !== true)
    {
    // KILL THE SCRIPT
    die($jcart['text']['checkout_error']);
    }

3 个答案:

答案 0 :(得分:0)

您在每次循环迭代时将$valid_prices设置为true或false。所以在循环之后它只对应于循环中的最后一项。

最好在循环之外(之前)将其设置为true,然后在找到错误的情况时将其设置为false - 这样就无法将其设置为true。或者,您可以在找到无效价格时立即将错误抛出循环。

答案 1 :(得分:0)

主要问题似乎是你的内部foreach循环和valid_prices的设置。您的循环继续通过所有价格,因此$ valid_prices将仅取决于最后价格。一旦检测到无效价格,您应该立即退出循环。

其他一些小事:

  • 您似乎没有使用$ qty或$ name变量
  • $ name不使用[],如$ sql_price,$ qty
  • 您可以使用!= not!==

答案 2 :(得分:0)

如果$sql_price的最后一个数组元素等于$item_price,则问题是您将购物车条目标记为有效。

将循环重写为:

$valid_prices = true;

foreach($sql_price as $price) {
        $price = $price;
        if ($price !== $item_price) {
                $valid_prices = false;
        }
}

为了防止额外的迭代,请在内部break中添加if以在找到无效价格后停止循环。

甚至这个:

$valid_prices = (array_search($price, $sql_price) !== false);

您可以让MySQL为您完成所有工作,甚至:

$query = 'select 1 from products where product_name = "' . mysql_real_escape_string($item_name) . '" and product_price = ' . (int)$item_price;

$result = mysql_query($query);
if (!$result) {
        echo mysql_error();
}

if (mysql_num_rows($result) > 0) {
        $valid_prices = true;
        echo 'price is good!';
} else {
        $valid_prices = bad;
        echo 'price is bad!';
}