#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];
}
?>