PHP, yok "else"

2 Cevap php

Ben bu suretle kabataslak kaba bir program var:

if (condition){
  //redirect to some page
}
else{
 echo $some_var;
}

Ben sınamak ve koşul doğru olduğunda Yani, yönlendirme yapar, ama aynı zamanda tanımlanmamış değişkenleri $ some_var (DB çekti ve koşul doğruysa tanımlanabilir olmayacak) olduğunu bildirimlerini atar.

Yani kod IF sonra değerlendirmek için devam ediyor? Bu beklediğimden değil.

Kazmak istiyorsanız, burada gerçek kod (bu CodeIgniter, ama çoğunlukla kendini belgeleyen bulunuyor) ve test durumda o DB değil bir çöp "hediye kodu" olduğunu, böylece count_all_results WILL == 0. Atılan uyarılar $ kullanır tanımlanmamış olmasıdır.

	$data['message'] = null;

	//seeing if code is valid
	$submitted_code = $_POST['code'];
	$this->db->where('code', $submitted_code);
	$this->db->from('codes');
	if ($this->db->count_all_results() == 0){
		$data['message'] = "This is not a valid gift code, sorry! You'll need to read our partner blogs, or listen to our favored Twitterers to find a valid code.";
		$this->load->view('submission_form_view', $data);
	}
	else {

	//seeing if code has any uses left
	$this->db->where('code', $submitted_code);
	$this->db->from('redemption_information');
	$used_so_far = $this->db->count_all_results();
	$this->db->select('uses');
	$query = $this->db->get_where('codes', array('code' => $submitted_code));
	foreach ($query->result() as $result)
	{
	 	$uses = $result->uses;
	}

	echo "Uses: $uses Used so far: $used_so_far <br />";

	if ($uses <= $used_so_far) {
		$this->load->view('over_used_view');
	}
	else
	{
	//these values are auto-escaped, so no worries on SQL injection
	if ($this->db->insert('redemption_information', $_POST)) {
		$data['message'] = "Your order has been taken, thanks for your interest!";
		$this->load->view('success_view', $data);
	}
	else {
		$data['message'] = "There was an error with your order. Please try again.";
		$this->load->view('submission_form_view', $data);
	}
	}
	}

2 Cevap

parsing ve evaluation arasında bir fark var. Eğer alıyorsanız uyarılar ayrıştırma uyarılar vardır (o else açıklamada değişkeni ayrıştırma ve bir önceki atama görerek değil, bu yüzden bir haber atar), ama deyim aslında {[(3) değil ]} if koşul doğruysa.

Burada önceki if blok false ise else blok her zaman çalıştırılır

Sen test edebilirsiniz isset($uses) uyarıyı önlemek ve $uses için varsayılan bir değer örneğini için

Edit

Için varsayılan bir değer oluşturun $uses:

    $uses= null;
    foreach ($query->result() as $result)
    {
            $uses = $result->uses;
    }