Задать вопрос
@toster111

Почему значение не записывается в переменную с помощью $this?

Добрый день.
Такая проблема, разбираюсь с написанием интернет-магазина, на MVC.
Есть у меня контроллер заказа.
<?php
  class Application_Controllers_Order extends Lib_BaseController
  {  
    function __construct()
	 {				
		$this->dislpay_form = true; // показывать форму ввода данных
			if(isset($_REQUEST["to_order"])){  // если пришли данные с формы
				$model = new Application_Models_Order;	//создаем модель заказа
				$error=$model->isValidData($_REQUEST);  //проверяем на корректность вода
				if($error)$this->error=$error; // если есть ошиби заносим их в переменную 
				else{			
					//если ошибок нет, то добавляем заказ в БД
					$order_id=$model->addOrder();
					
					/*$date=$model->getData($order_id);
					while ($row = mysql_fetch_assoc($date))
					{
						$date_our = date('d.m.Y', $row['date']);
						if (trim($date_our) == "18.11.2018") $this->flag = "1";//???????
					}*/
					$model1=new Application_Models_Coupon;
					$summ_coupon=$model1->calcSummCoupon($order_id);
					$this->summ_coupon= $summ_coupon; // записываем сумму купона в переменную, чтобы вывесим ее во view
					Lib_SmalCart::getInstance()->setCartData();// пересчитываем маленькую корзину
					header('Location: /order?thanks='.$order_id);
					exit;
				}
			}
			
			if(isset($_REQUEST["thanks"])){
			   //формируем сообщение 
					$this->message="Ваша заявка <strong>№ ".$_REQUEST["thanks"]."</strong> принята.";
					$this->dislpay_form = false;//  форму ввода данных больше не покзываем
			} 
	 }
  }

Проблема возникла с записью суммы купона в переменную, $this->summ_coupon= $summ_coupon; . В этой строке по идее полученное значение из метода вычисления суммы купона(это значение действительно приходит из метода, оно не пустое и вычисляется правильно) записываем в переменную. По аналогии с if($error)$this->error=$error;, message и display_form .
И потом значения этих переменных выводим в представлении заказа
<h1>Оформление заказа</h1>
<a href="/cart"><<< Назад в корзину</a>
<br/>
<?if($error){ echo $error;}?><br/>
<?
if($dislpay_form){?>
<form action="" method="post">
<table class="table_order_form"> 
<?if($_SESSION["Auth"]) {?>
<tr bgcolor="#F2F2F2"><td>Ф.И.О.</td><td><input type="text" name="fio" value="<?=$_SESSION["userName"]?>"/></td></tr>
<tr bgcolor="lightgray"><td>E-mail<span style="color: red;">*</span></td><td><input type="text" name="email" value="<?=$_SESSION["User"]?>"/></td></tr>
<?}
else{?>
<tr bgcolor="#F2F2F2"><td>Ф.И.О.</td><td><input type="text" name="fio" value="<?=$_REQUEST['fio']?>"/></td></tr>
<tr bgcolor="lightgray"><td>E-mail<span style="color: red;">*</span></td><td><input type="text" name="email" value="<?=$_REQUEST['email']?>"/></td></tr>
<?}?>
<tr bgcolor="#F2F2F2"><td>Телефон</td><td><input type="text" name="phone" value="<?=$_REQUEST['phone']?>"/></td></tr>
<tr bgcolor="lightgray"><td>Адрес</td><td><textarea name="adres"><?=$_REQUEST['adres']?></textarea></td></tr>
</table>
<br/>
<h2>Выбирете способ доставки</h2>
<p>Доставка по Москве и МО</p>
<input type="radio" name="delivery_method" value="11"/> Доставка курьером нашего магазина <br/>
<p>Самовывоз из пункта выдачи</p>
<input type="radio" name="pickup_point" value="1"/> Самовывоз 1 <br/>
<input type="radio" name="pickup_point" value="2"/> Самовывоз 2<br/>
<input type="radio" name="pickup_point" value="3"/> Самовывоз 3<br/>
<input type="radio" name="pickup_point" value="4"/> Самовывоз 4<br/>
<input type="radio" name="pickup_point" value="5"/> Самовывоз 5<br/>
<h2>Выбирете способ оплаты</h2>
<input type="radio" name="payment_method" value="cash"/>Наличные<br/>
<input type="radio" name="payment_method" value="card"/> Банковская карта<br/>
<input type="radio" name="payment_method" value="electr_pay"/> Электронный кошелек<br/>
<input type="submit" name="to_order" value="Оформить заказ">
</form>
<?
}
else{ echo $message;
	 echo $summ_coupon;};
?>

Но все значения выводятся, а $summ_coupon - нет. Хотя вроде бы все аналогично, не понимаю в чем проблема?
Заранее спасибо.
  • Вопрос задан
  • 127 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
Decadal
@Decadal
О господи, ооп которое php заслужил.

$this->summ_coupon= $summ_coupon; // записываем сумму купона в переменную, чтобы вывесим ее во view
          Lib_SmalCart::getInstance()->setCartData();// пересчитываем маленькую корзину
          header('Location: /order?thanks='.$order_id);
          exit;


есть предположение что вот здесь теряется ваш summ_coupon.
вы прерываете выполнение приложения, все состояния будут утрачены. Тогда как в случае с ошибкой вы не делаете прерывания выполнения приложения (exit), и, как следствие, все переменные остаются.

Скажем так, вот эти строки:
if(isset($_REQUEST["thanks"])){
         //формируем сообщение 
          $this->message="Ваша заявка <strong>№ ".$_REQUEST["thanks"]."</strong> принята.";
          $this->dislpay_form = false;//  форму ввода данных больше не покзываем
      }

выполняются уже другим запросом, который не знает ничего про сумму купона, которую вы пытались "сохранить" в поле класса в прошлом запросе.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы