【问题标题】:How can i search for a specific row in a Database using PHP?如何使用 PHP 在数据库中搜索特定行?
【发布时间】:2015-07-22 12:46:59
【问题描述】:

如何在 HTML 页面中的表单中进行搜索,并在同一个 html 页面中显示结果?当我尝试运行未定义 inputPackageID 的代码时出现错误。我怎样才能解决这个问题。似乎无法从表单中识别该变量。请帮忙

这是我的代码。如果你不明白我的问题,你可以问我你不清楚的地方。

<div class="main">
    <div class="col-md-12">
        <div class="row">
            <div class="container">

        </div>

        <div class="search center-block col-md-6" align="center">
        <p>
            Want to track your package? <br />
            Enter your Package ID(PID)
        </p>
        <form method="post" action="trackShipment.php">
        <div class="form-group">

            <label class="sr-only" for="inputPackageID"></label>
            <input type="search" name="inputPackageID" class="form-control edit-form-control" id="inputPackageID" placeholder="PID">
        </div>
        <div class="modal-footer">
          <input type="submit" class="btn btn-primary" name="submit" />
        </div>
        </form>
    </div>


        <div class="col-md-8" align="center">
        <h2>Well, Here is your package!</h2>
                    <?php
                        include '../includes/connection.php';
                        //include 'phpscripts/trackShipment.php';
                        $PackageID = $_GET['inputPackageID'];

                        $sql = "select * from package where p_id='$PackageID'";

?>






            <table class="table table-striped">
                <tr>
                    <th><span>PID</span></th>
                    <th><span>Customer ID</span></th>
                    <th>Name</th>
                    <th>Description</th>
                    <th>Destination Per KM</th>
                    <th>Type</th>
                    <th>Price/KG</th>
                </tr>
                </th>
                <?php 

                     foreach ($db->query($sql) as $count)?>

                   <tr>
                        <td>
                            <?php echo $count['p_ID'];  ?>
                        </td>
                        <td>
                            <?php echo $count['cus_ID']; ?>
                        </td>
                        <td>
                            <?php echo $count['package_name']; ?>
                        </td>
                        <td>
                            <?php echo $count['package_description']; ?>
                        </td>
                        <td>
                            <?php echo $count['package_type']; ?>
                        </td>
                        <td>
                            <?php echo $count['destination_per_km']; ?>
                        </td>
                        <td>
                            <?php echo $count['price_per_kg']; ?>
                        </td>
                <?php } ?>
            </table>


    </div>
</div>

【问题讨论】:

  • 您发布代码的页面是否名为“trackShipment.php”?如果是这样,那么它应该提交给自己。但是,您的标题问题与正文中的问题不匹配。在标题中您询问“如何在数据库中搜索特定行”,但在正文中您询问如何使搜索表单在同一页面上显示结果。这是两个不同的问题。你能澄清一下吗?
  • 您容易受到sql injection attacks 的攻击。并且变量无法识别,因为您第一次点击此表单的页面时,网址中没有?inputPackageID=xxx
  • @Beems 对此感到抱歉。我在这里度过了漫长的一天,而且很晚了。我正在尝试解决问题主体中的内容。 trackShipment.php 是另一个 php 文件,不是当前正在处理的页面。
  • &lt;form method="post" action="trackShipment.php"&gt; 然后使用 action="" 如果您想在同一页面或 Ajax 上获得结果,如下面的回答中所述。如果这不能解决它,并且我在回答中解释了它是未定义的,那么我将简单地删除它。 @WillieMwewa

标签: php html database pdo


【解决方案1】:

它向您显示它没有定义,因为您的表单使用 post 方法,而您正在使用 GET 数组。

$PackageID = $_GET['inputPackageID'];

改成

$PackageID = $_POST['inputPackageID'];

另外,使用isset()

if(isset($_POST['inputPackageID'])){
    $PackageID = $_POST['inputPackageID'];
}

因为您在同一页面中使用完整的代码。

!empty()

if(!empty($_POST['inputPackageID'])){
    $PackageID = $_POST['inputPackageID'];
}

如果您在同一个文件中使用相同的代码,您可以为您的提交按钮使用action="" 和一个额外的条件语句。

if(isset($_POST['submit'])){...}

看到你的评论,情况并非如此,而且你使用的是单独的文件,所以我们可以从头开始

但是,如果您真正想要使用 GET 方法,则需要在表单中将方法更改为 method="get"。使用这种方法是不安全的,请查阅我的脚注。


脚注:

您当前的代码对SQL injection 开放。使用mysqli with prepared statementsPDO with prepared statements它们更安全


“如何在 HTML 页面中的表单中进行搜索,在同一 html 页面中显示结果?”

  • 您可以为此使用 Ajax,也可以使用 action=""

【讨论】:

  • @WillieMwewa 如果您想通知社区找到了解决方案,请将其标记为已解决。否则,它将保留在未回答的类别中。以下是meta.stackexchange.com/questions/5234/… 然后返回答案并标记该页面上概述的复选标记的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-10
  • 2013-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多