使用PHP从SQL表中检索数据; HTML5

时间:2014-04-24 22:10:33

标签: php mysql sql html5

我使用HTML5创建了一个玩具库的网站,主页用CSS3和服务器上维护数据库的SQL。在主页面上有两种形式。一种是将可用的玩具租给,当添加数据时,实际数据被添加到服务器上的SQL数据库中。 问题是当我需要从SQL获取数据时,我在表单上有四个下拉选项。城市,玩具类型,年龄组和可用性。用户可以选择4个选项的任意组合。如果匹配玩具可用,则应显示数据。

我有以下代码

try
    {
        $dbh = new PDO("mysql:host=localhost; dbname=***", "***", "***");
    }
    catch (Exception $e)
    {
        die('<p style="color:red">Could not connect to DB: ' . $e->getMessage() . '</p></body></html>');
    }

    if (isset($_POST["ownercity"]))         
    {
        $city = $_POST["ownercity"];       //Asker's preferable city
        $command = "SELECT * FROM Toys WHERE City=?";
        $stmt = $dbh->prepare($command);        
        $stmt->execute(array($city));

        if (isset($_POST["ownertoytype"])) 
        {            
            $type = $_POST["ownertoytype"];  //Asker's preferable toy type
            $command = "SELECT * FROM Toys WHERE City=? AND Type=?";
            $stmt = $dbh->prepare($command);        
            $stmt->execute(array($city,$type));

            if (isset($_POST["agegroup"]))
            {
                $goodage = $_POST["agegroup"];    //Asker's age group preference 
                $command = "SELECT * FROM Toys WHERE City=? AND Type=? AND Agegroup=?";
                $stmt = $dbh->prepare($command);        
                $stmt->execute(array($city,$type,$goodage));

                if (isset($_POST["ownerweek"]))
                {
                    $availability = $_POST["ownerweek"];//Asker's preference for availability
                    $command = "SELECT * FROM Toys WHERE City=? AND Type=? AND Agegroup=? AND Availability=?";
                    $stmt = $dbh->prepare($command);        
                    $stmt->execute(array($city,$type,$goodage,$availability));
                }
            }
        }
    }


    $row1 = $stmt->fetch();
    if($row1)
    {
        while($row1 = $stmt->fetch())                
        {
        echo "<h2 id='general'>"."Congratulations! Matching toys are available, Contact owners directly!"."</h2>";
        echo "<table class='toy' id='available'><tr><th>City</th><th>Type</th>
            <th>Age Group</th><th>Name</th><th>Email</th><th>Phone</th>
            </tr>";
        echo "<tr><td>".($row1['City'])."</td>";
        echo "<td>".($row1['Type'])."</td>";
        echo "<td>".($row1['Agegroup'])."</td>";
        echo "<td><b>".($row1['Name'])."</b></td>";
        echo "<td><b>".($row1['Email'])."</b></td>";
        echo "<td><b>".($row1['Phone'])."</b></td></tr>";
        echo "</table>";           
        }            
   }
    else 
    {
      echo "<h2 id='general'>"."Sorry! No matching toys are available, please try again later"."</h2>";
    }

现在无论选择什么,它都会显示没有匹配的玩具可用,即使有。

我的代码有什么问题?

由于

2 个答案:

答案 0 :(得分:0)

您可能需要查找SQL的有效语法。

SELECT * FROM Toys WHERE City=?,Type=?,Agegroup=?

在这里,您假设逗号是有效的连词。事实并非如此。有效的包括ANDOR

如果要查找符合一个或多个条件的Toys行,请使用此查询。

SELECT *
  FROM Toys
 WHERE (City=? OR Type=? OR Agegroup=?)

OR子句的序列括在括号中是一种好习惯。

答案 1 :(得分:0)

首先,正如Ollie所说,在查询中,您必须使用ANDOR而不是,。 代码本身也存在问题。这些字段将始终设置,因此您应该在if语句中检查它们是否为空。

if (isset($_POST['fieldname']) && trim($_POST['fieldname']))