如何在两个单独的html5表格中显示两个表格中包含不同数据量的数据?

时间:2017-06-25 20:22:32

标签: php mysql

我已经学习了几个星期的PHP,我真的非常喜欢它。我需要帮助,因为我在这方面所做的所有搜索都产生了类似的结果。我正在建立一个网站来跟踪快递服务的包裹。 基本上,工作人员可以登录并添加包并更新包的位置。这些更新应该作为包的历史记录在交付之前构建。但是,生成跟踪号后,任何人都可以查看包的详细信息和当前位置。进行搜索后,我的文件中包含以下代码,以生成有关该跟踪号码显示的信息。

我创建了三个表,如下所示:usersAccounts,packages和history

CREATE TABLE history (
  id INT(10) NOT NULL AUTO_INCREMENT,
  trackingNumber BIGINT(10) NOT NULL,
  date VARCHAR(11) NOT NULL,
  time VARCHAR(11) NOT NULL,
  city VARCHAR(75) NOT NULL,
  country VARCHAR(75) NOT NULL,
  activity VARCHAR(150) NOT NULL,
PRIMARY KEY (id),
UNIQUE INDEX id (id)
)
ENGINE = INNODB

INSERT INTO activityidtrackingNumberdatetimecitycountry,{{1价值观 (1,777777,'2017-06-23','16:43:00','城市1','国家','活动1'), (2,777777,'2017-06-24','13:17:09','城市2','国家','活动2'), (3,888888,'2017-06-23','10:11:21','城市1','国家','活动1'), (4,888888,'2017-06-24','10:43:00','城市2','国家','活动2'), (5,777777,'2017-06-25','16:27:00','城市3','国家','活动3');

activity

ENGINE = MYISAM

我还在packages表中有两个测试数据:888888和777777,历史表中的88888和777777也有一些更新。我的问题是,无论何时进行搜索,都会显示历史表中888888和777777的数据,而我只希望将888888或777777的详细信息显示为已搜索。

我有两个查询来获取html5表上两个表的结果有人可以查看我的代码并告诉我有什么问题吗?

CREATE TABLE packages (
  packageID INT(10) NOT NULL AUTO_INCREMENT,
  sendName VARCHAR(50),
  originCity VARCHAR(70),
  originCountry VARCHAR(50),
  receiverName VARCHAR(50),
  desCity VARCHAR(255) ,
  desCountry VARCHAR(70),
  expDeliveryDate VARCHAR(10),
  status VARCHAR(255),
  trackingNumber INT(10),
PRIMARY KEY (packageID, trackingNumber),
UNIQUE INDEX trackingNumber (trackingNumber)
)
ENGINE = INNODB

CREATE TABLE userAccounts (
  id INT(10) NOT NULL AUTO_INCREMENT,
  name VARCHAR(50) NOT NULL,
  email VARCHAR(50) NOT NULL,
  username VARCHAR(50) NOT NULL,
  password VARCHAR(50) NOT NULL,
  status BOOLEAN NOT NULL,
PRIMARY KEY (id),
UNIQUE INDEX username (username)
)

谢谢

2 个答案:

答案 0 :(得分:0)

在查询中使用变量之前,您需要确保定义变量$searchq。例如,如果要搜索包含数字7的数据,则首先需要声明

$searchq = '7';

如果没有,SELECT * from packages WHERE trackingNumber LIKE '%$searchq%'将解析为SELECT * from packages WHERE trackingNumber LIKE '%%',其匹配所有内容。 PHP会告诉你一些问题,但代码仍会运行,你可能不会注意到错误。

答案 1 :(得分:0)

这是基本的,您可能希望添加列标题和其他格式,但它适用于单个跟踪号码和匹配多个跟踪号码的搜索字词。它还通过使用预准备语句来避免SQL注入问题。

<?php

    $searchq = isset($_REQUEST['track']) && $_REQUEST['track'] != '' ? $_REQUEST['track'] : "";

    if($searchq != '') {

        $qstr = "";
        $qstr .= "SELECT\n";
        $qstr .= "  a.`packageID`,\n";
        $qstr .= "  a.`sendName`,\n";
        $qstr .= "  a.`originCity`,\n";
        $qstr .= "  a.`originCountry`,\n";
        $qstr .= "  b.`date`,\n";
        $qstr .= "  b.`time`,\n";
        $qstr .= "  b.`city`,\n";
        $qstr .= "  b.`country`,\n";
        $qstr .= "  b.`activity`\n";
        $qstr .= "FROM `packages` a\n";
        $qstr .= "LEFT JOIN `activity` b\n";
        $qstr .= "ON a.`trackingNumber` = b.`trackingNumber`\n";
        $qstr .= "WHERE a.`trackingNumber` = ?";

        $searchq = '%'.$searchq.'%';
        $stmt = mysqli_prepare($qstr);
        mysqli_stmt_bind_param($stmt,'s',$searchq);
        $stmt->execute();

        $rslt = mysqli_get_result();
        $lastPackageID = "";
        echo "<table>\n";
        while($row = mysqli_getch_array($rslt)) {
            if($lastPackageID != $row['packageID']) {
                echo "<tr>\n";
                echo "  <td colspan='3'>.$row['sendName']."</td>\n";
                echo "  <td>.$row['originCity']."</td>\n";
                echo "  <td>.$row['originCountry']."</td>\n";
                echo "</tr>\n";
                $lastPackageID != $row['packageID'];
            }
            echo "<tr>\n";
            echo "  <td>.$row['date']."</td>\n";
            echo "  <td>.$row['time']."</td>\n";
            echo "  <td>.$row['city']."</td>\n";
            echo "  <td>.$row['country']."</td>\n";
            echo "  <td>.$row['activity']."</td>\n";
            echo "</tr>\n";
        }
        echo "</table>\n";

    } else {
        echo "Required parameter missing";
    }
?>