【问题标题】:In PHP and MySQL, how to view multiple order information in the other pagePHP和MySQL中,如何在其他页面查看多个订单信息
【发布时间】:2014-09-13 18:53:50
【问题描述】:

我从this question 学到了很多关于如何在数据库中发送多个订单信息的知识。在我的表中,“order.php”的行由客户发送的订单信息的行组成。我的代码仅适用于单个订单。但是我想在另一个页面中查看一个客户发送的多个订单。

这是我的“order.php”代码

<?php
session_start();
$conn = mysqli_connect('localhost','root','','sampsix');
if(mysqli_connect_errno()){
    echo 'Failed to connect: '.mysqli_connect_error();
}

if(isset($_POST['delete'])){
    $DeleteQuery = "DELETE FROM orders WHERE id='$_POST[hidden]'";
    mysqli_query($conn,$DeleteQuery);
}
if(isset($_POST['view'])){
    header('Location: view_order.php');
}

$query = "SELECT * FROM orders ORDER BY id";
$results = mysqli_query($conn,$query);

echo '<table border="1">';
    echo '<tr>';
        echo '<th>ID</th>';
        echo '<th>Firstame</th>';
        echo '<th>Lastname</th>';
        echo '<th>Email</th>';
        echo '<th>Order Name</th>';
        echo '<th>Order Code</th>';
        echo '<th>Order Qty</th>';
        echo '<th>Sub Total</th>';
    echo '</tr>';

    while($orderData = mysqli_fetch_array($results)){
   echo '<form action="order.php" method="POST">';
    echo '<tr>';
        echo '<td>'.$orderData['id'].'</td>';
        echo '<td>'.$orderData['firstname'].'</td>';
        echo '<td>'.$orderData['lastname'].'</td>';
        echo '<td>'.$orderData['email'].'</td>';
        echo '<td>'.$orderData['ordername'].'</td>';
        echo '<td>'.$orderData['ordercode'].'</td>';
        echo '<td>'.$orderData['orderqty'].'</td>';
        echo '<td>'.$orderData['subtotal'].'</td>';

       echo '<td><input type="hidden" name="hidden" value="'.$orderData['id'].'"></td>';
        echo '<td><input type="submit" name="delete" value="Delete"></td>';
    echo '</form>';
        echo "<td><a href='view_order.php?id=".$orderData['id']."'>View</a></td>";
    echo '</tr>';

}
echo '</table>';
mysqli_close($conn);
?>

这是我的“view_order.php”,其中有订单信息:

<?php
include_once('config.php');

if(isset($_GET['id'])){
    $id = $_GET['id'];

$query = $mysqli->query("SELECT id,firstname,lastname,email,ordername,ordercode,orderqty,subtotal  FROM orders WHERE id='$id'");

if($query){
        while($obj = $query->fetch_object()){
           echo 'ID: '.$obj->id;
           echo 'Firstname: '.$obj->firstname;
           echo 'Lastname: '.$obj->lastname;
           echo 'Email: '.$obj->email;
           echo 'Order Name: '.$obj->ordername;
           echo 'Order Code: '.$obj->ordercode;
           echo 'Order Qty: '.$obj->orderqty;
           echo 'Sub total: '.$obj->subtotal;
        }
   }
}

?>

上面的这段代码也只执行单个订单。我只是在想,如果客户有多个订单,我想在其他页面中查看所有订单怎么办。

【问题讨论】:

  • 注意此代码包含SQL注入漏洞,请勿复制或使用。

标签: php mysql database mysqli code-injection


【解决方案1】:

现在您使用id 作为标识符,它仅指一个订单。如果您想要一个客户的所有订单,您应该通过客户的标识符进行选择。在您的情况下,我认为是firstnamelastname。您应该将id 替换为firstnamelastname。你会得到这样的东西:

<?php
session_start();
$conn = mysqli_connect('localhost','root','','sampsix');
if(mysqli_connect_errno()){
    echo 'Failed to connect: '.mysqli_connect_error();
}

if(isset($_POST['delete'])){
    $DeleteQuery = "DELETE FROM orders WHERE id='$_POST[hidden]'";
    mysqli_query($conn,$DeleteQuery);
}
if(isset($_POST['view'])){
    header('Location: view_order.php');
}

$query = "SELECT * FROM orders ORDER BY id";
$results = mysqli_query($conn,$query);

echo '<table border="1">';
    echo '<tr>';
        echo '<th>ID</th>';
        echo '<th>Firstame</th>';
        echo '<th>Lastname</th>';
        echo '<th>Email</th>';
        echo '<th>Order Name</th>';
        echo '<th>Order Code</th>';
        echo '<th>Order Qty</th>';
        echo '<th>Sub Total</th>';
    echo '</tr>';

    while($orderData = mysqli_fetch_array($results)){
   echo '<form action="order.php" method="POST">';
    echo '<tr>';
        echo '<td>'.$orderData['id'].'</td>';
        echo '<td>'.$orderData['firstname'].'</td>';
        echo '<td>'.$orderData['lastname'].'</td>';
        echo '<td>'.$orderData['email'].'</td>';
        echo '<td>'.$orderData['ordername'].'</td>';
        echo '<td>'.$orderData['ordercode'].'</td>';
        echo '<td>'.$orderData['orderqty'].'</td>';
        echo '<td>'.$orderData['subtotal'].'</td>';

       echo '<td><input type="hidden" name="hidden" value="'.$orderData['id'].'"></td>';
        echo '<td><input type="submit" name="delete" value="Delete"></td>';
    echo '</form>';
        echo "<td><a href='view_order.php?firstname=".$orderData['firstname']."&lastname=".$orderData['lastname']."'>View</a></td>";
    echo '</tr>';

}
echo '</table>';
mysqli_close($conn);
?>

以及查看页面:

<?php
include_once('config.php');

if(isset($_GET['firstname'])){
    $firstname = $_GET['firstname'];
if(isset($_GET['lastname'])){
    $lastname = $_GET['lastname'];

$query = $mysqli->query("SELECT id,firstname,lastname,email,ordername,ordercode,orderqty,subtotal  FROM orders WHERE firstname='$firstname' and lastname='$lastname'");

if($query){
        while($obj = $query->fetch_object()){
           echo 'ID: '.$obj->id;
           echo 'Firstname: '.$obj->firstname;
           echo 'Lastname: '.$obj->lastname;
           echo 'Email: '.$obj->email;
           echo 'Order Name: '.$obj->ordername;
           echo 'Order Code: '.$obj->ordercode;
           echo 'Order Qty: '.$obj->orderqty;
           echo 'Sub total: '.$obj->subtotal;
        }
   }
}

?>

请注意,这种结构并不是最佳解决方案。我会将我的客户存储在另一个表中,因为如果两个人的名字和姓氏相同会怎样?

在您的其他问题中,您还为order 表中的每个产品创建了一行。如果你想把它做好,你应该创建另一个表,如order_rules,并将你的产品存储在该表中,并带有订单 ID。您应该规范化您的表格。我认为this 是一个关于规范化表的很好的描述和教程。

请注意,此代码使用不安全 - 它包含许多 SQL 注入漏洞。刚刚从原帖中的代码修改为工作状态。

【讨论】:

  • 当然,@S.Pols 先生,我会检查一下。 :D
  • 是的,先生!它运行良好。无论如何,先生。我之前只为客户创建了一张桌子。我为那些在页面中有凭据的客户提供了一个代码。无论如何,先生。你有一个重要的观点。我决定创建“view_order.php”来打印管理员收据等信息。也许先生,管理员打印完信息后,也许他/她需要立即删除它对先生$S.Pols?
  • 信息不需要删除。这就是您设计表结构的方式。你现在有很多冗余。
  • 是的,先生。我会做的。 :D 另一个建议先生。先生,您是否认为我的 order.php 是安全的,可以避免在互联网上直播时被黑客入侵或看到信息?先生,我怎样才能防止这种情况发生。 @S.Pols 先生,我知道您是专业人士,我想了解更多有关您在编程方面的想法,因为我是初学者。 :)
  • 不幸的是,我不得不说这甚至不接近安全。此代码非常容易受到 SQL 注入的攻击。在这里查看 [stackoverflow.com/questions/60174/… 如何防止 SQL 注入。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-13
  • 2015-01-09
  • 1970-01-01
  • 1970-01-01
  • 2015-03-05
  • 2021-10-28
  • 1970-01-01
相关资源
最近更新 更多