PHP - 如何搜索下拉菜单中指定的单个列

标签 php html mysql css sql

我有一个在 HTML 网页上实现的 SQL 数据库。我希望用户能够在搜索框中输入一个值并搜索下拉菜单中指定的表的列。

例如:表格中有 3 列 - 'first name'、'second name' 和 'surname'。用户可以在下拉菜单中选择这些列名之一,然后在搜索框中键入他们想要在指定列中搜索的内容。假设他们选择“姓氏”列并希望在该列中搜索“Johnson”。

结果应显示其中包含“Johnson”的所有姓氏,并显示每个找到的行的其余部分。我的数据库有点不同,比这更大,但它适用相同。我当前的代码可以在下面找到:

<head>
    <link rel="stylesheet" type="text/css" href="stylesheet.css" />
    <meta charset="utf-8" />

    <title>The 24 Hour Race</title>
    <div id="title">
        <a href="index.php"><img src="images/title.png"></img></a>
    </div>
    <p id="subtitle">For the toughest of the tough</p>
</head>
<body>
    <div id="nav">
        <form method="post" action="index.php?go"  id="searchform">
            <br>
            <h3>Search in:</h3><select name="field">
            <option value="rider_no.">Rider No.</option>
            <option value="category">Category</option>
            <option value="name">Name</option>
            <option value="team_name">Team Name</option>
            <option value="nationality">Nationality</option>
            <option value="year_participated">Year Participated</option>
            <option value="total_laps">Total Laps</option>
            <option value="fastest_lap">Fastest Lap</option>
            </select>
            <input type="text" name="key">
            <input type="submit" name="submit" value="Search"><br>
        </form>
        <br>
        <h3>Sort by years:</h3>            
        <ul>
            <li><a href="2007.php">2007</a></li>
            <li><a href="2008.php">2008</a></li>
            <li><a href="2009.php">2009</a></li>
            <li><a href="2010.php">2010</a></li>
            <li><a href="2011.php">2011</a></li>
            <li><a href="2012.php">2012</a></li>
            <li><a href="2013.php">2013</a></li>
            <li><a href="2014.php">2014</a></li>
            <li><a href="2015.php">2015</a></li>
        </ul>
    </div>
    <div id="form">            
        <table id="t01" align="right" cellspacing="2">
    <thead>
        <tr>
            <td bgcolor="#ccc">Rider No.</td>
            <td bgcolor="#ccc">Category</td>
            <td bgcolor="#ccc">Name</td>
            <td bgcolor="#ccc">Team Name</td>
            <td bgcolor="#ccc">Nationality</td>
            <td bgcolor="#ccc">Year Participated</td>
            <td bgcolor="#ccc">Total Laps</td>
            <td bgcolor="#ccc">Fastest Lap</td>
        </tr>
    </thead>
    <tbody>
        <?php
        $connect = mysql_connect("localhost","root", "Highland5");
        if (!$connect) {
            die(mysql_error());
        }
        mysql_select_db("the24hourrace");
        if(isset($_POST[field]) and isset($_POST[key])) {
            $results = mysql_query("SELECT ".[field]." FROM riders WHERE ".[field]." = ".[key], $connect);
        } else {
            $results = mysql_query("SELECT * FROM riders", $connect); 
        }

        while($row = mysql_fetch_array($results)) {
   ?>
            <tr>
                <td><?php echo $row['rider_no']?></td>                    
                <td><?php echo $row['category']?></td>
                <td><?php echo $row['name']?></td>
                <td><?php echo $row['team_name']?></td>
                <td><?php echo $row['nationality']?></td>
                <td><?php echo $row['year_participated']?></td>
                <td><?php echo $row['total_laps']?></td>
                <td><?php echo $row['fastest_lap']?></td>
            </tr>
        <?php
        }
        ?>
     </tbody>
        </table>
    </div>
</body>

我要问的重要部分包括 div id="nav"及其下方的表格:

<form method="post" action="index.php?go"  id="searchform">
            <br>
            <h3>Search in:</h3><select name="field">
            <option value="rider_no.">Rider No.</option>
            <option value="category">Category</option>
            <option value="name">Name</option>
            <option value="team_name">Team Name</option>
            <option value="nationality">Nationality</option>
            <option value="year_participated">Year Participated</option>
            <option value="total_laps">Total Laps</option>
            <option value="fastest_lap">Fastest Lap</option>
            </select>
            <input type="text" name="key">
            <input type="submit" name="submit" value="Search"><br>
        </form>

PHP 部分:

<?php
        $connect = mysql_connect("localhost","root", "Highland5");
        if (!$connect) {
            die(mysql_error());
        }
        mysql_select_db("the24hourrace");
        if(isset($_POST[field]) and isset($_POST[key])) {
            $results = mysql_query("SELECT ".[field]." FROM riders WHERE ".[field]." = ".[key], $connect);
        } else {
            $results = mysql_query("SELECT * FROM riders", $connect); 
        }

        while($row = mysql_fetch_array($results)) {
   ?>
            <tr>
                <td><?php echo $row['rider_no']?></td>                    
                <td><?php echo $row['category']?></td>
                <td><?php echo $row['name']?></td>
                <td><?php echo $row['team_name']?></td>
                <td><?php echo $row['nationality']?></td>
                <td><?php echo $row['year_participated']?></td>
                <td><?php echo $row['total_laps']?></td>
                <td><?php echo $row['fastest_lap']?></td>
            </tr>
        <?php
        }
        ?>

如果您对我的代码或我要问的问题有任何疑问,请随时提问!我发现这有点难以解释:)

最佳答案

For future reference, please research before you post a question and also provide your error code.

PHP 是一种面向对象的编程语言,这是遍历每个列的最佳方法。

<?php foreach($connect->query($sql) as $r): ?>
      <td> <?php echo $r['column']; ?> </td>
<?php endforeach; ?>

此外,当您引用全局变量时,您无法按照您 try catch 它的方式捕获它。

GET 请求-

echo $_GET['param'];
echo $_GET[$variable];

POST 请求 -

echo $_POST['param'];
echo $_POST[$variable];

这意味着,如果您不将参数存储在变量中,则必须将其声明为字符串。

另请注意,您容易受到 SQLi Injections 的攻击因为您没有安全地绑定(bind)字段。

但如果您不担心,那么您可以这样做:

$field = $_POST['field'];
$key = $_POST['key'];
$sql = "SELECT * FROM riders WHERE '$field'='$key'";

关于PHP - 如何搜索下拉菜单中指定的单个列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36087087/

相关文章:

php - 如何在 PHP 中使用 while 循环按 ID 列出节中的数据?

java - Android下载Zip(可以在服务器上更改名称)

php - 终端和工作台中的Mysql看不到相同的数据库

Php:何时使用 pthread

php - 如何在 foreach 循环上进行 "distinct"检测

javascript - Switch 语句 - 单一情况的多个结果

mysql - 在 MySQL 中用全年更新生日

c# - 如何使文本响应设备?

html - 显示 flex flex wrap 宽度问题

MySQL 查询获取随机行但考虑分数