iki diziyi karşılaştırarak sorun

3 Cevap

Ben alışveriş sepeti bir yanlış fiyat var ne zaman, 2 dizilerin içeriğini karşılaştırmak çalışıyorum temelde ben bir alışveriş sepeti kullanarak ve ben bir veritabanına karşı gönderilen formların fiyatları kontrol etmek gerekir, sorun bana verir Ben 1 doğru fiyat ve 1 o kasada devam yanlış, ben yanlış yapıyorum bilmiyorum bir hata mesajı ancak herhangi bir yardım mutluluk duyacağız.

 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 Cevap

Sorun $sql_price son dizi elemanı $item_price eşittir eğer geçerli gibi sepeti girişini kutluyor.

Döngü olarak yazabiliriz:

$valid_prices = true;

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

, Ekstra iterating önlemek bir break eklemek için if geçersiz fiyatı bulduktan sonra döngü durdurmak için iç.

Ya da bu:

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

MySQL bile, sizin için tüm işi olabilir:

$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!';
}

Sen $valid_prices her döngü tekrarında doğru veya yanlış olarak belirliyor. Yani döngü sonra sadece döngü içinde son öğeye karşılık gelir.

Geri ayarlamak true olamaz bu şekilde - bir kötü durumda bulabilirsiniz zaman (önce) dışında true döngü ayarlayın ve sonra false ayarlamak için daha iyi olabilir. Alternatif olarak sadece en kısa sürede geçersiz fiyat bulmak gibi döngü içinde hata atmak olabilir.

Ana sorun, iç foreach döngü ve valid_prices ayarı gibi görünüyor. Sizin döngü tüm fiyatlar üzerinden devam eder $ valid_prices sadece son fiyat bağlıdır. En kısa sürede size bir geçersiz fiyat tespit olarak döngünün çıkmak gerekir.

Bir diğer birkaç küçük şeyler:

  • Eğer değişkenler isim $ Adet Adet veya $ kullanmak için görünmüyor
  • $ Isim $ sql_price, $ Adet Adet gibi [] kullanmak değildir
  • Sen kullanabilirsiniz! = Değil! ==