数据库没有收到正确的数据
Database not receiving correct data
我正在尝试在我的数据库中填充 3 个不同的 table。
Sale table 其中有以下行:
- sale_id
- fk_sale_user
- fk_payment_id
- sale_date
Print_for_sale 其中有:
- print_for_sale_id
- fk_sale_id
- price_print_for_sale
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 中的数据库的屏幕截图,因此您可以定位。
我正在尝试执行 "buying" 操作。
这是我的标记和 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 很陌生,如果这是一个愚蠢或糟糕的问题,我很抱歉。我不知道我做错了什么...
- table 促销 正在 phpmyadmin 中正确更新。一切正常。用户 ID 可以,支付 ID 也可以。 (我还没有完成付款部分,所以我只是用一个数字来测试。)
tablePrint_for_sale 正在更新正确的销售 ID (fk_sale_id),但是 price_print_for_sale 始终是一样的,不管我选择什么印刷品。它总是 150,而有时它应该是 65 或 25。
(打印价格定义在尺寸table。到目前为止我有3个不同的尺寸,所以价格不同。)
tablePrint_has_size_has_print_for_sale 正在更新正确的 print_for_sale ID,但 fk_print_has_size_id 始终是数字 12(这是该列表中的最后一个)并且它与我在表格上的选择无关。我相信这就是导致价格出现错误的原因。如果印刷品和尺寸的组合始终相同 (print_has_size),那么它的价格将始终相同...为什么会这样?
有人可以帮我吗?
以下是 phpmyadmin 的一些屏幕截图:
编辑:这是我使用的函数:
<?php
function getprintdetailsById($con, $print_id){
$question = "select * from print where print_id=".$print_id;
$result = mysql_query($question, $con);
return $result;
}
?>
您的代码可以正常工作,但我认为您的问题是末尾的括号错位了。应该是:
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);
}
}
替换代码应该在循环中。在您的原始代码中,您遍历了所有值,以最后一个值结束,然后使用它。
这是很多信息..我想我们可以开始调试了。让我们从您的 while 循环开始。在你的 for 循环中,第一行 select * from size
,这应该是一个数组 return,然后你用你的 while 循环迭代这个数组,但是你只是将它们分配给一个变量。这将覆盖上次迭代的数据结果。这是你想要的吗?……未完待续。
你不希望它被覆盖..所以你需要为那个 while 循环做的是将它分配给一个数组,就像这样:
while ($linesize = mysql_fetch_assoc($resultsize)) {
$size_price[] = $linesize["size_price"];
}
所以,一旦您拥有所有所需尺寸的 $size_price[]
,我们继续.. 您的代码现在 运行s select * from sale
您想要所有 sale_ids
从。所以就像上面一样,将它分配给一个数组,我们会说 $sale_ids[]
现在您正在尝试 运行 一个将数据插入 print_for_sale
table 的查询,但数据来自您在上面创建的两个不同的数组。这将不起作用,如果是这样,您将需要像您已经尝试过的那样想出疯狂的循环和迭代。
要修复它,您首先需要查看您的 table,为它们分配唯一的 ID,并通过索引为它们分配 link,一旦这样做,您需要使用 JOIN
SQL 对您的查询执行命令以将匹配的数据放在一起。
我也会考虑分离您的代码。这将帮助您重用它。您应该研究 MVC 框架。听说过 Codeigniter 吗?它非常容易学习且功能强大。
希望这对您有所帮助。
我正在尝试在我的数据库中填充 3 个不同的 table。
Sale table 其中有以下行:
- sale_id
- fk_sale_user
- fk_payment_id
- sale_date
Print_for_sale 其中有:
- print_for_sale_id
- fk_sale_id
- price_print_for_sale
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 中的数据库的屏幕截图,因此您可以定位。
我正在尝试执行 "buying" 操作。 这是我的标记和 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 很陌生,如果这是一个愚蠢或糟糕的问题,我很抱歉。我不知道我做错了什么...
- table 促销 正在 phpmyadmin 中正确更新。一切正常。用户 ID 可以,支付 ID 也可以。 (我还没有完成付款部分,所以我只是用一个数字来测试。)
tablePrint_for_sale 正在更新正确的销售 ID (fk_sale_id),但是 price_print_for_sale 始终是一样的,不管我选择什么印刷品。它总是 150,而有时它应该是 65 或 25。 (打印价格定义在尺寸table。到目前为止我有3个不同的尺寸,所以价格不同。)
tablePrint_has_size_has_print_for_sale 正在更新正确的 print_for_sale ID,但 fk_print_has_size_id 始终是数字 12(这是该列表中的最后一个)并且它与我在表格上的选择无关。我相信这就是导致价格出现错误的原因。如果印刷品和尺寸的组合始终相同 (print_has_size),那么它的价格将始终相同...为什么会这样?
有人可以帮我吗?
以下是 phpmyadmin 的一些屏幕截图:
编辑:这是我使用的函数:
<?php
function getprintdetailsById($con, $print_id){
$question = "select * from print where print_id=".$print_id;
$result = mysql_query($question, $con);
return $result;
}
?>
您的代码可以正常工作,但我认为您的问题是末尾的括号错位了。应该是:
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);
}
}
替换代码应该在循环中。在您的原始代码中,您遍历了所有值,以最后一个值结束,然后使用它。
这是很多信息..我想我们可以开始调试了。让我们从您的 while 循环开始。在你的 for 循环中,第一行 select * from size
,这应该是一个数组 return,然后你用你的 while 循环迭代这个数组,但是你只是将它们分配给一个变量。这将覆盖上次迭代的数据结果。这是你想要的吗?……未完待续。
你不希望它被覆盖..所以你需要为那个 while 循环做的是将它分配给一个数组,就像这样:
while ($linesize = mysql_fetch_assoc($resultsize)) {
$size_price[] = $linesize["size_price"];
}
所以,一旦您拥有所有所需尺寸的 $size_price[]
,我们继续.. 您的代码现在 运行s select * from sale
您想要所有 sale_ids
从。所以就像上面一样,将它分配给一个数组,我们会说 $sale_ids[]
现在您正在尝试 运行 一个将数据插入 print_for_sale
table 的查询,但数据来自您在上面创建的两个不同的数组。这将不起作用,如果是这样,您将需要像您已经尝试过的那样想出疯狂的循环和迭代。
要修复它,您首先需要查看您的 table,为它们分配唯一的 ID,并通过索引为它们分配 link,一旦这样做,您需要使用 JOIN
SQL 对您的查询执行命令以将匹配的数据放在一起。
我也会考虑分离您的代码。这将帮助您重用它。您应该研究 MVC 框架。听说过 Codeigniter 吗?它非常容易学习且功能强大。
希望这对您有所帮助。