数据库未收到正确的数据

时间:2015-02-19 20:22:09

标签: php mysql database phpmyadmin mysql-workbench

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

  1. 销售表格,其中包含以下行:

    • sale_id
    • fk_sale_user
    • fk_payment_id
    • SALE_DATE
  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
  4. 这是我在mysql workbench中的数据库的截图,所以你可以定位。 database

    我正在尝试进行“购买”行动。 这是我的标记和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中正确更新。一切正常。用户ID正常,付款ID也可以。 (我还没有完成付款部分所以我只是用一个数字来测试。

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

    Print_has_size_has_print_for_sale 正在更新正确的print_for_sale ID,但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;
        }
    
      ?>
    

2 个答案:

答案 0 :(得分: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 :(得分: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?它非常容易学习,功能强大。

希望这有帮助。