使用PHP显示用户的SQL查询

时间:2012-02-23 22:21:38

标签: php sql html-table

请有人帮我这个吗?

我有2张桌子,位置和门票,到目前为止我建的是一个div中的表格,用户输入他们希望看到现场音乐表演的城市或城镇的名称。提交此表单并传递一个查询位置表的SQL语句。在另一个div中,用户搜索查询显示在屏幕上的框中。我接下来要做的是编写一个SQL语句,该语句将查找用户的查询,并根据位置ID动态显示故障单表中的相关故障单信息。

例如,用户输入'Newcastle'作为他们的搜索查询,位置表找到纽卡斯尔市,并在名为'ticket'的div中显示用户的结果..我想显示所有对应的字段来自票表的'Newcastle'。

locationID是位置表中的主键,还有3个其他列,城市,城镇和邮政编码。 票证表包括作为主键的ticketID,作为外键的locationID和其他字段,即场地,tPrice,日期和时间。我认为我遇到的问题是我不会从用户查询中传递变量,以便票证表可以查找并显示相关信息。

以下是表单的代码:

<div id="search">

    <form name="searchForm" id="searchForm" class="searchForm"  method="post">

   <input type="text" name="citySearch" id="citySearch" class="citySearch"   placeholder="Enter name city/town..." autofocus="autofocus" />

        <input type="submit" name="ticketSearch" id="ticketSearch" class="ticketSearch" value="Search" />


    </form>

</div>

以下是显示用户查询的代码:

  <div id="locationResult">

<?php

  include( 'classes/database_connection.php' );

      $cSearch = $_POST['citySearch'];

              $sql = "SELECT DISTINCT city FROM location WHERE city = '$cSearch'";

              mysql_query($sql) or die (mysql_error());
          $queryresult = mysql_query($sql) or die(mysql_error());

         while ($row = mysql_fetch_assoc($queryresult)) {
         $city = $row['city'];

         echo $row["city"];

        }
                                       mysql_free_result($queryresult);
        mysql_free_result($qResult);

        mysql_close($conn);
    ?>

    </div>
 </div>

这是我想要显示故障单表中的故障单结果的地方:

    <div id="ticketsResults">

    <table class="ticketResult" border="0" cellspacing="5">
    <tr>
       <td><b>Venue</b></td>
               <td><b>Price</b></td>
               <td><b>Date</b></td>
               <td><b>Time</b></td>
               <td><b>Street View</b></td>
    </tr>

        <?php
            include( 'classes/database_connection.php' );

        $locID = $_POST['locationID'];
        $citySearch = $_POST['citySearch'];

                    $sQL = "SELECT locationID FROM location";

                  //Here is where I want it to display dynamic information rather than manually type the location
        $ticketSQL = "SELECT * FROM ticket NATURAL JOIN location WHERE city = 'Newcastle' ";

        mysql_query($sQL) or die (mysql_error());
            $qResult = mysql_query($sQL) or die(mysql_error());

        mysql_query($ticketSQL) or die (mysql_error());
            $result = mysql_query($ticketSQL) or die(mysql_error());


        while ($row = mysql_fetch_assoc($result)) {

    //  $ticketID = $row['ticketID'];

        $venue = $row['venue'];
        $ticketPrice = $row['tPrice'];
        $date = $row['date'];
        $time= $row['time'];

        echo "<tr>\n";
        echo "<td>$venue</td>\n";
        echo "<td>&pound$ticketPrice</td>\n";
        echo "<td>$date</td>\n";
        echo "<td>$time</td>\n";
            echo "<td>Click to see</td>\n";
        echo "</tr>\n";

        }

           mysql_free_result($qResult);
           mysql_free_result($result);
           mysql_close($conn);


    ?>
       </table>
    </div>

基本上,我想要一个根据用户查询动态显示票证的SQL语句。抱歉,大量的代码!非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

在你做任何其他事情之前,我认为你应该研究你的编码风格,特别是你的缩进。快速谷歌搜索应该可以做到这一点。接下来看看mysql准备好的语句,因为目前你的代码是不安全的。就像jordanm所说,它受SQL注入。

例如,如果有人输入 blah'或'x'='x 作为城市名称。您的查询将成为

SELECT DISTINCT city FROM location WHERE city = 'blah' OR 'x'='x';

基本上它允许用户使用您的查询做顽皮的事情,而您不希望这样。

以下是如何使用mysql预处理语句避免这种情况的示例:

// basic quick raw example
$mysqli = new mysqli('localhost', 'user', 'password', 'database');
$stmt = $mysqli->prepare('SELECT DISTINCT city FROM location WHERE city = ?');
$stmt->bind_param('s',$city_name);
$stmt->execute();
$stmt->bind_result($city);
while ($stmt->fetch())
{
    echo $city;
}

这就是我要离开你的全部因为我想回答实际的问题(?)我需要为你编写代码。古德勒克