База данных не получает правильные данные

Я пытаюсь заполнить 3 разные таблицы в моей базе данных.

  1. распродажа таблица, которая имеет следующие строки:

    • sale_id
    • fk_sale_user
    • fk_payment_id
    • Дата продажи
  2. Print_for_sale у которого есть:

    • print_for_sale_id
    • fk_sale_id
    • price_print_for_sale
  3. Print_has_size_has_print_for_sale

    • print_has_size_has_print_for_sale_id
    • fk_print_has_size_id
    • fk_print_for_sale_id

Вот скриншот моей базы данных в MySQL Workbench, чтобы вы могли найти.
база данных

Я пытаюсь совершить «покупательское» действие.
Это моя разметка и код php:

printdetail.php

<?php$id= $_GET['print_id'];

$printdetails = getprintdetailsById($con, $id);

$line = mysql_fetch_assoc($printdetails);

$selectsize =" select * from size";

$result=mysql_query($selectsize);

?><div>
<img width="800px;"src="<?php echo $line['print_img']?>"/>
</div><div>
<span> <?php echo $line['print_title']?> </span>
<form action="addprints.php" method="post">
<ul>
<?php while ($line = mysql_fetch_assoc($result)) { ?>
<li> <input type="checkbox" name="sizes[]" value="<?php echo $line['size_id']?>">
<?php echo $line['size_name']." Price: ".$line['size_price']."€ "?>
</li>
<?php } ?>
<input type="submit" value="Add to Cart" >
</ul>
<input type="hidden" name="print_id" value="<?php echo $id; ?>" />
</form>
</div>

addprints.php

    <?php
session_start();
$user_id = $_SESSION['user_id'];
print_r($_POST);

$id_print= $_POST['print_id'];

include('database.php');

$bought_sizes=$_POST['sizes'];

$number_of_bought_sizes= count($bought_sizes);//header('location:index.php?area=printstore');$sqlinsertsale = "insert into sale
(fk_sale_user,
fk_payment_id)
values(".$user_id.", 2)";

mysql_query($sqlinsertsale);for($i=0; $i< $number_of_bought_sizes; $i++){

$selectsize = "select *
from size";

$resultsize = mysql_query($selectsize);

while($linesize = mysql_fetch_assoc($resultsize))
{ $size_price = $linesize["size_price"]; }$selectsale = "select *
from sale";

$resultsale = mysql_query($selectsale);

while($linesale = mysql_fetch_assoc($resultsale))
{ $sale_id = $linesale["sale_id"]; }$sqlinsertprintforsale = "insert into print_for_sale
(fk_sale_id,
price_print_for_sale)
values(".$sale_id.", ".$size_price.")";

mysql_query($sqlinsertprintforsale);$selectprinthassize = "select *
from print_has_size";

$resultprinthassize = mysql_query($selectprinthassize);

while($lineprinthassize = mysql_fetch_assoc($resultprinthassize))
{ $print_has_size_id = $lineprinthassize["print_has_size_id"]; }$selectprintforsale = "select *
from print_for_sale";

$resultprintforsale = mysql_query($selectprintforsale);

while($lineprintforsale = mysql_fetch_assoc($resultprintforsale))
{ $print_for_sale_id = $lineprintforsale["print_for_sale_id"]; }$sqlinserthashas = "insert into print_has_size_has_print_for_sale
(fk_print_has_size_id,
fk_print_for_sale_id)
values(".$print_has_size_id.", ".$print_for_sale_id.")";

mysql_query($sqlinserthashas);}

?>

Я очень новичок в php и mysql, поэтому извините, если это глупый или плохой вопрос. Я не могу понять, что я делаю не так …

  • Стол распродажа корректно обновляется в phpmyadmin. Все работает. Идентификатор пользователя в порядке и идентификатор оплаты тоже в порядке. (Я еще не выполнил платежную часть, поэтому просто использовал номер для проверки.)

Стол Print_for_sale обновляет правильный идентификатор продажи (fk_sale_id), однако price_print_for_sale всегда одинаков, независимо от того, какую печать я выбираю. Это всегда 150, когда иногда это должно быть 65 или 25.
(Цена на печать определяется в размер Таблица. Пока что у меня 3 разных размера, поэтому разные цены.)

Стол Print_has_size_has_print_for_sale обновляет правильный идентификатор print_for_sale, но fk_print_has_size_id всегда имеет номер 12 (последний из этого списка) и не имеет ничего общего с моим выбором в форме. Я верю, что это то, что заставляет цену выходить из строя. Если это всегда одна и та же комбинация отпечатков и размера (print_has_size), то она всегда будет иметь одинаковую цену … Почему это происходит?

Может кто-нибудь, пожалуйста, помогите мне?

Вот несколько скриншотов phpmyadmin:

print_has_size_table

sale_table
print_for_sale_table
print_has_size_has_print_for_sale_table

Редактировать: это функция, которую я использовал:

<?php

function getprintdetailsById($con, $print_id){
$question = "select * from print where print_id=".$print_id;

$result = mysql_query($question, $con);

return $result;
}

?>

1

Решение

Это много информации .. Я думаю, мы можем начать отладку. Давайте начнем с ваших циклов. Внутри вашего цикла, первая строка select * from size, это должно вернуть массив, затем вы перебираете этот массив с помощью цикла while, но вы назначаете их только одной переменной. Это перезапишет результат данных последней итерации. Это то, что вы хотите? … продолжение следует.

Вы не хотите, чтобы это было перезаписано … так что вам нужно сделать, чтобы цикл while назначил его массиву, например так:

while ($linesize = mysql_fetch_assoc($resultsize)) {
$size_price[] = $linesize["size_price"];
}

Итак, когда у вас есть $size_price[] со всеми желаемыми размерами мы идем дальше .. теперь ваш код работает select * from sale где вы хотите все sale_ids от. Так же, как и выше, назначьте его массиву, мы скажем $sale_ids[]

Теперь вы пытаетесь запустить запрос, который вставляет данные в print_for_sale таблицы, но данные поступают из двух разных массивов, которые вы создали выше … это не будет работать, и если это так, вам нужно будет придумать сумасшедшие циклы и итерации, как вы уже пробовали.

Чтобы это исправить, сначала нужно посмотреть на свои таблицы, назначить им уникальные идентификаторы и связать их по индексам. После того, как вы это сделаете, вам нужно использовать JOIN Команда SQL на ваши запросы, чтобы собрать сопоставленные данные.

Я бы тоже посмотрел на разделение вашего кода. это поможет вам использовать его повторно. Вы должны заглянуть в рамки MVC. Вы когда-нибудь слышали о Codeigniter? его очень легко выучить и мощный для приложений.

Надеюсь это поможет.

1

Другие решения

Ваш код может использовать работу, но я думаю, что ваша проблема — неуместная скобка в конце. Так должно быть:

while($lineprinthassize = mysql_fetch_assoc($resultprinthassize))
{
$print_has_size_id = $lineprinthassize["print_has_size_id"];
$selectprintforsale = "select *
from print_for_sale";

$resultprintforsale = mysql_query($selectprintforsale);
while($lineprintforsale = mysql_fetch_assoc($resultprintforsale))
{
$print_for_sale_id = $lineprintforsale["print_for_sale_id"];
$sqlinserthashas = "insert into print_has_size_has_print_for_sale
(fk_print_has_size_id,
fk_print_for_sale_id)
values(".$print_has_size_id.", ".$print_for_sale_id.")";
mysql_query($sqlinserthashas);
}
}

Код замены должен быть в цикле. В исходном коде вы прошли через все значения, заканчивая последним, а затем использовали его.

1

По вопросам рекламы [email protected]