2012-02-23 35 views
0

请任何人都可以帮助我?使用PHP显示用户的SQL查询

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

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

locationID是位置表中的主键,有3个其他列,城市,城镇和邮编。 门票表包括作为主键的ticketID,作为外键的locationID以及场所,tPrice,日期和时间的其他字段。我认为im的问题是我没有通过用户查询中的变量,因此票据表可以查看它并显示相关信息。

这里是表单代码:

<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语句动态显示门票交流根据用户的查询。对于大量的代码抱歉!任何帮助给予不胜感激。

+0

您应该使用参数化查询。字符串替换容易受到SQL注入的影响。 – jordanm 2012-02-23 22:27:35

+0

没有人再使用mysql_real_escape_string了吗? – Jay 2012-02-23 23:38:02

回答

1

在你做任何事情之前,我认为你应该处理你的编码风格,特别是你的缩进。快速谷歌搜索应该做的伎俩。接下来查看mysql准备的语句,因为目前你的代码是不安全的。像jordanm说的那样,它受到SQL注入的影响。

例如,如果有人输入blah'OR'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; 
} 

这就是我要离开你,因为我觉得要回答的实际问题,我会(?)需要为你编写代码。 Goodluck

+0

谢谢Prowla,这太棒了!我的问题似乎与我的SQL语句本身。我有一个变量,用于保存用户的城市搜索结果$ cSearch_POST ['citySearch'];但我努力试图让这个sql语句正确。我想从位置表中获取用户输入的城市名称($ cSearch)匹配位置表中的城市以及我所拥有的似乎并不工作的位置表的位置ID: $ citySQL =“ SELECT locationID FROM location where city ='$ cSearch'“; – 2012-02-24 22:19:07

+0

您将需要调试它。首先打印出$ cSearch中的内容,然后尝试将一个城市名称(您知道在数据库中)硬编码到查询中(或更好的方法是,在其自己的**上测试查询以确保其正常工作; cmd,mysql工作台或webcp - 无论你使用什么)。这会告诉你,你是否正确检索提供的城市名称,以及您的查询是否正确。 – Kurt 2012-02-24 22:37:20