Сохранение данных сеанса и размещение их в базе данных - PullRequest
0 голосов
/ 05 июня 2019

У меня есть сайт, где можно заказать билеты.Если кто-то делает заказ, я хочу отправить заказ в базу данных.Также я хочу добавить определенные элементы корзины для отправки в базу данных.См. Модель, которую я использую:

ORDERS              CART ITEMS

id*                 id
amount              order_id*
                    product_id
                    quantity 

Это код, который я использую с формой:

<form action="index.php?page=cart" method="post" class="">
    <table class=" table__nav">
        <thead>
            <tr>
                <th class="p p--bold p--th th--ticket">Ticket</th>
                <th class="p p--bold p--th th--name">Name</th>
                <th class="p p--bold p--th th--quantity">Quantity</th>
                <th class="p p--bold p--th th--price">Price per ticket</th>


                <th class="p p--bold p--th th--itemtotal">Item Total</th>
            </tr>
        </thead>
        <tbody>
        <?php
        $total = 0;
        foreach($_SESSION['cart'] as $ticket) {
            $ticketTotal = $ticket['ticket']['price'] * $ticket['quantity'];
            $total += $ticketTotal;
        ?>
            <tr>
                <td>
                    <?php echo $ticket['ticket']['eye_cart']; ?>
                </td>
                <td>
                    <p class = "p--bold"><?php echo $ticket['ticket']['name']; ?></p>
                </td>
                <td>
                    <input class = "p td--quantity" type="number" name="quantity[<?php echo $ticket['ticket']['id'];?>]" value="<?php echo $ticket['quantity'];?>" class="replace" required />
                </td>
                <td>
                    <p>&#8364;<?php echo $ticket['ticket']['price'];?>,-</p>
                </td>
                <td>
                    <p>&#8364;<?php echo $ticketTotal;?>,-</p>
                </td>
                <td>
                <td class="remove-item"><button type="submit" class="btn remove-from-cart" name="remove" value="<?php echo $ticket['ticket']['id'];?>">&#215;</button></td>
                </td>
            </tr>
        </tbody>
        <?php } ?>
    </table>

    <div class="table__wrap">
        <button type="submit" id="update-cart" class="btn btn--cart" name="action" value="update">
            <img width="14" height="14" src="./assets/img/refresh.png" alt="refresh">
        </button>
        </img>
        <p class="table__order--total"><span class="span--bold span--bold-no">Total:</span></p>
        <p class="table__order--number"><span class="span--bold span--bold-no">&#8364; <?php echo $total ?>,-</span></p>
    </div>
    <div class="table__wrap table__wrap--end">
        <a class="p p__li p__li--light" href="index.php?page=register"> 
            <button type = "submit" name ="action" value = "details" class="btn btn--big btn--big-2 btn--dark">your details -> </button></a>
    </div>
</form>

Когда пользователь нажимает кнопку, чтобы перейти к "your details" Я хочу сохранитьзаказ с общей суммой + элементы корзины с идентификатором заказа и количеством.

Я использую модель MVC для этого, но я не могу понять это.

Вот так выглядит мой контроллер:

if ($_POST['action'] == 'details') {
  $data =  array(
    'amount' => $total,
  );
  $insertedOrder = $this->orderDAO->insertOrder($data);
  $this->set('insertedOrder', $insertedOrder);

  if (empty($insertedOrder)) {
    $errors = $this->orderDAO->validate($data);
    $this->set('errors', $errors);
    }
  }
  if ($_POST['action'] == 'details') {
  $dataB=  array(
    'order_id' => ?,
    'product_id' => $_SESSION['cart']['id']['ticket']['id'],
    'quantity' => $_SESSION['cart']['quantity'],
  );
  $insertedCartItem = $this->orderDAO->insertCartItem($data);
  $this->set('insertedCartItem', $insertedCartItem);

  if (empty($insertedCartItem)) {
    $errors = $this->orderDAO->validateB($dataB);
    $this->set('errors', $errors);
    }
  } 

Иследующий код - мой DAO:

public function insertOrder($data){
    $errors = $this->validate( $data );
    if (empty($errors)) {
      $sql = "INSERT INTO `orders` (`amount`) VALUES (:amount)";
      $stmt = $this->pdo->prepare($sql);
      $stmt->bindValue(':amount', $data['amount']);
      if ($stmt->execute()) {
        return $this->selectOrderById($this->pdo->lastInsertId());
      }
    }
    return false;
  }

  public function insertCartItem($dataB){
    $errors = $this->validateB($dataB);
    if (empty($errors)) {
      $sql = "INSERT INTO `cart_items` (`order_id` `product_id`,`quantity`) VALUES (:order_id, :product_id, :quantity)";
      $stmt = $this->pdo->prepare($sql);
      $stmt->bindValue(':order_id', $dataB['order_id']);
      $stmt->bindValue(':product_id', $dataB['product_id']);
      $stmt->bindValue(':quantity', $dataB['quantity']);
      if ($stmt->execute()) {
        return $this->selectCartItemById($this->pdo->lastInsertId());
      }
    }
    return false;
  }

Основная проблема, с которой я столкнулся, заключается в том, что я не знаю, как я могу отправлять данные из переменных $ _SESSION в базу данных.Я сталкиваюсь с проблемами в контроллере.Как видите, я отправляю данные с $ data и $ dataB, но думаю, что я ошибаюсь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...