Выбранное значение из выпадающего меню не выбирается при нажатии на кнопку в php

#php #mysqli #drop-down-menu #while-loop

#php #mysqli #выпадающее меню #цикл while

Вопрос:

Я выбираю данные из двух таблиц «пицца» и «размер».В таблице «пицца» у нас есть имя полей «pizza_id, pizza_name, pizza_img» в таблице «размер» «pizza_id, size_id, size, price». Когда мы выбираем первую пиццу и их размеры в таблице «size», они маленькие, средние и большие.Оно отображается в выпадающем меню.Проблема в том, что когда мы нажимаем на первый размер пиццы (маленький) и нажимаем на кнопку, это показывает, что вы выбираете последний (большой) размер пиццы.Каждый раз, когда я выбираю пиццу любого размера, это показывает, что вы выбираете большой (size_id: 3) размер пиццы.Поэтому я не знаю, как это исправить.Если кто-нибудь может понять мою проблему, пожалуйста, помогите мне, я сильно застрял.Спасибо

   $query = "SELECT * FROM pizza";
  $run = mysqli_query($con, $query);

  while($row=mysqli_fetch_array($run)){

        $pizza_id = $row['pizza_id'];
        $pizza_name = $row['pizza_name'];
        $pizza_img = $row['pizza_img'];

  echo "<div class='pizza_details'>
  <img src='admin/img/$pizza_img' width='200px' height='150px'  
  id='profile-image' />
  <div class='desc'>
  <ul>
  <li><span style='color:yellow;'>Name</span> : $pizza_name</li>
  </ul>";


  $q = "SELECT * FROM size where pizza_id='$pizza_id'";
  $r = mysqli_query($con, $q);

  echo "<select name='size'>";

  while ($new=mysqli_fetch_array($r)){

          $size_id = $new['size_id']; 
          $size = $new['size'];
          $price = $new['price'];

   echo"<option value='$size_id'>$size</option>";

   }//End-while loop

   echo"</select>
   <ul><li>
   <a href='pizza.php?add_cart=$pizza_idamp;size_id=$size_id'>Add to Cart</a>
   </li></ul>
  </div>
  <div class='clear'></div>
  </div>";

  }//End-While Loop
  

Комментарии:

1. Как вы получаете $ pizza_id для размеров? Действительно ли весь ваш код в этом потоке написан на php? Вы не принимаете никаких пользовательских данных. В вашей ссылке «Добавить в корзину» вы, по сути, жестко закодировали pizza_id и size_id в качестве последнего значения в цикле.

2. В основном $ pizza_id в таблице pizza является первичным ключом, а в таблице size — внешним ключом. Таким образом, в таблице размеров $ pizza_id хранится в трех строках. Все размеры, указанные в $ pizza_id в таблице «size», одинаковы, но их $ size_id отличаются, и когда мы нажимаем на ссылку «Добавить в корзину», он получает выбранное значение размера и отправляет в корзину.

3. Я понимаю базу данных. Но вы нигде не собираете пользовательский выбор / ввод. Поток должен состоять в том, чтобы показывать список пицц, когда пользователь выбирает пиццу, вы отправляете значение (через форму или ajax) и используете выбранный идентификатор пиццы, чтобы решить, какой размер, затем динамически создаете URL для добавления в корзину с текущим идентификатором выбранной пиццы и идентификатором размера. Вы не собираете и не отправляете какие-либо действия пользователя. Просто ссылка с жестко закодированными последними идентификаторами.

4. Большое вам спасибо, я надеюсь, что ваше руководство сработало для меня.

Ответ №1:

     <form action="" method="get" enctype="multipart/form-data">
    <input type="hidden" name="product_id" value="<?php echo $product_id; ?>">
    <select class="form-control" id="a_set_of_values" name="a_set_of_values" >

    <?php

      $q = "SELECT * FROM size WHERE product_id='$product_id'";
      $r = mysqli_query($con, $q);

      while($rows=mysqli_fetch_array($r)){
            $size_id = $rows['size_id'];
            $size = $rows['size']; 
            $price = $rows['price'];
    ?>

    <option value="<?php echo $size_id;?> amp; <?php echo $price; ?>"><?php echo $size;?> : Rs <?php echo $price;?></option>

    <?php } ?>

    </select>
    <button class="read_mor_btn"  type="submit" name="add_cart" title="Add to Cart"><i class="fa fa-shopping-cart"></i>Add to Cart</button>

    </form> 
  

Теперь получаем все эти значения (product_id, size_id, price) сверху и используем функцию разнесения для получения кратных значений в опции выбора.

     //Pick these values
    if(isset($_POST['add_cart'])){

    $product_id= $_POST['product_id'];

    $explode_fun = $_POST['a_set_of_values'];
    $new_data = explode(' ', $explode_fun);
    $size_id = $new_data[0];
    $price = $new_data[2];    
    }

    ?>