我正在尝试比较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']);
}
答案 0 :(得分:0)
您在每次循环迭代时将$valid_prices
设置为true或false。所以在循环之后它只对应于循环中的最后一项。
最好在循环之外(之前)将其设置为true,然后在找到错误的情况时将其设置为false - 这样就无法将其设置为true。或者,您可以在找到无效价格时立即将错误抛出循环。
答案 1 :(得分:0)
主要问题似乎是你的内部foreach循环和valid_prices的设置。您的循环继续通过所有价格,因此$ valid_prices将仅取决于最后价格。一旦检测到无效价格,您应该立即退出循环。
其他一些小事:
答案 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!';
}