如何使用PHP在数据库中搜索特定行?

时间:2015-05-11 20:50:58

标签: php html database pdo

如何从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>

1 个答案:

答案 0 :(得分:2)

它向您显示它未定义,因为您的表单使用了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=""