【问题标题】:Database not receiving correct data [closed]数据库没有收到正确的数据[关闭]
【发布时间】:2015-04-21 09:01:30
【问题描述】:

我正在尝试在我的数据库中填充 3 个不同的表。

  1. Sale 表,其中包含以下行:

    • 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 工作台中的数据库的屏幕截图,因此您可以定位。

我正在尝试进行“购买”操作。 这是我的标记和 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 非常陌生,所以如果这是一个愚蠢或糟糕的问题,我很抱歉。我不知道我做错了什么......

  • Sale 正在 phpmyadmin 中正确更新。一切正常。用户 ID 可以,付款 ID 也可以。 (我还没有完成支付部分,所以我只是用一个数字来测试。

Print_for_sale 表正在更新正确的销售 ID (fk_sale_id),但无论我选择哪种打印方式,price_print_for_sale 始终相同。它总是 150,有时应该是 65 或 25。 (打印价格在 size 表中定义。到目前为止,我有 3 种不同的尺寸,因此价格不同。)

Print_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;
    }

  ?>

【问题讨论】:

  • 这些代码都没有多大意义。您在嵌套循环中进行查询,并且始终在循环中运行相同的查询。您也绝对没有错误处理,只是假设您的查询调用都不会失败。
  • 能否也显示getprintdetailsById函数?
  • 这个问题对你的确切代码和数据库设置来说太具体了,而且太长了,无法在未来帮助任何人。并且代码需要重写以使用 PDO 或 mysqli 而不是已弃用的 mysql_ 扩展,所以你不妨重新开始。
  • 已经@Arian :) 谢谢。

标签: php mysql database phpmyadmin mysql-workbench


【解决方案1】:

这是很多信息。我想我们可以开始调试了。让我们从您的 while 循环开始。在你的 for 循环中,第一行 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 表的查询,但数据来自您在上面创建的两个不同的数组.. 这是行不通的,如果是这样,您需要来像你已经尝试过的那样疯狂循环和迭代。

要修复它,您首先需要查看您的表,为它们分配唯一 ID,并通过索引链接它们,一旦这样做,您需要在查询中使用 JOIN SQL 命令来获取匹配的数据在一起。

我也会考虑分离您的代码。这将帮助您重用它。您应该研究 MVC 框架。听说过 Codeigniter 吗?它非常易于学习且功能强大。

希望这会有所帮助。

【讨论】:

  • 谢谢 :) 不!我不希望数据被覆盖。我该如何解决?
  • 现在我收到这两个错误注意:第 66 行 /Applications/XAMPP/xamppfiles/htdocs/printstore/addprints.php 中的数组到字符串转换注意:/Applications/XAMPP/ 中的数组到字符串转换xamppfiles/htdocs/printstore/addprints.php 在第 66 行,因为我使用的是这样的值: values(".$sale_id.", ".$size_price.")"; :S
  • 两个小时后你有空吗?我可以帮助您更多地修复您的代码,甚至可以通过 Teamviwer...让我知道
  • 是的,我会的!那我试试teamviewer。我怎样才能找到你? @CodeGodie
  • 非常感谢! @CodeGodie 我会等着 :)
【解决方案2】:

您的代码可以使用工作,但我认为您的问题是最后放错了括号。应该是:

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);
       }
}

替换代码应该在循环中。在您的原始代码中,您遍历了所有值,以最后一个结尾,然后使用它。

【讨论】:

  • 谢谢。我试过了,但它给了我同样的问题......总是相同的价格和相同的 print_has_size ID :(
  • 你说得对,我忽略了这一点。您实际上需要扩展最后的 两个 循环。我已经更新了答案。
猜你喜欢
  • 2021-12-14
  • 1970-01-01
  • 1970-01-01
  • 2016-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多