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

PHP-如何搜索下拉菜单中指定的单个列,php,html,mysql,css,sql,Php,Html,Mysql,Css,Sql,我有一个SQL数据库,它实现在一个HTML网页上。我希望用户能够在搜索框中键入一个值,并在下拉菜单中搜索表中指定的一列 例如:表中有3列-‘名字’、‘第二个名字’和‘姓氏’。用户可以在下拉菜单中选择其中一个列名,然后在搜索框中键入要在指定列中搜索的内容。假设他们选择“姓氏”列,并希望在该列中搜索“约翰逊” 结果应显示所有姓氏中带有“约翰逊”字样,并显示每一个姓氏所在行的其余部分。我的数据库有点不同,比这个大,但它应用相同的。我的当前代码可以在下面找到: <head> <

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

例如:表中有3列-‘名字’、‘第二个名字’和‘姓氏’。用户可以在下拉菜单中选择其中一个列名,然后在搜索框中键入要在指定列中搜索的内容。假设他们选择“姓氏”列,并希望在该列中搜索“约翰逊”

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

<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>

24小时赛跑

最难对付的人


搜索: 车手号。 类别 名称 队名 国籍 参与年份 总圈数 最快圈数

按年份排序:
车手号。 类别 名称 队名 国籍 参与年份 总圈数 最快圈数

我要问的重要部分包括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
        }
        ?>

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

为了将来的参考,请在发布问题之前进行研究,并提供您的错误代码

PHP是一种面向对象的编程语言,这是循环浏览每一列的最佳方法

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

echo $_POST['param'];
echo $_POST[$variable];
这意味着,如果没有将参数存储在变量中,则必须将其声明为字符串

另请注意,您很容易受到攻击,因为您没有安全地绑定字段。

但如果你不担心这一点,那么你可以这样做:

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

所以我继续进行,几乎把它全部清理干净,并用更安全的方法重写了它。我测试了它和它的工作。此外,这不是最安全的方式,但它比您最初发布的代码更安全。你可以在谷歌上搜索,找到更多的方法来保护你的数据

新代码:

define('DB_HOSTNAME','localhost');
定义(‘数据库’、‘24小时’);
定义('DB_USERNAME','root');
定义('DB_密码','');
错误报告(E_全部);
ini设置(“显示错误”,1);
函数dataQuery($query,$params){
$queryType=explode(“”,$query);
//建立数据库连接
试一试{
$dbh=new PDO('mysql:host='.DB_HOSTNAME.';dbname='.DB_数据库,DB_用户名,DB_密码);
$dbh->setAttribute(PDO::ATTR\u EMULATE\u PREPARES,false);
$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_异常);
}
捕获(PDO$e){
echo$e->getMessage();
$errorCode=$e->getCode();
}
//运行查询
试一试{
$queryResults=$dbh->prepare($query);
$queryResults->execute($params);
如果($queryResults!=null&&'SELECT'==$queryType[0]){
$results=$queryResults->fetchAll(PDO::FETCH_ASSOC);
返回$results;
}
$queryResults=null;//正确关闭的两个步骤中的第一个
$dbh=null;//关闭连接的第二步
}
捕获(PDO$e){
$errorMsg=$e->getMessage();
echo$errorMsg;
}
}
?>
24小时赛跑

最难对付的人


搜索: 车手编号。 类别 名称 队名 国籍 参与年份 总圈数 最快圈数

按年份排序:
车手号。 类别 名称 队名 国籍 参与年份 总圈数 最快圈数
所以你要做的就是,一旦他们输入字段的详细信息int o1并点击一个按钮,你希望它显示结果,或者你想让它在他们键入时显示?@rackmup420我想让它刷新页面,并在他们点击“提交”后显示新结果当前代码有哪些错误?
$results=mysql\u
$field = $_POST['field'];
$key = $_POST['key'];
$sql = "SELECT * FROM riders WHERE '$field'='$key'";
define('DB_HOSTNAME', 'localhost');
define('DB_DATABASE', 'the24hourrace');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '');

error_reporting(E_ALL);
ini_set('display_errors', 1);

function dataQuery($query, $params) {
$queryType = explode(' ', $query);

// establish database connection
try {
    $dbh = new PDO('mysql:host='.DB_HOSTNAME.';dbname='.DB_DATABASE, DB_USERNAME, DB_PASSWORD);
    $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e) {
    echo $e->getMessage();
    $errorCode = $e->getCode();
}

// run query
try {
    $queryResults = $dbh->prepare($query);
    $queryResults->execute($params);
    if($queryResults != null && 'SELECT' == $queryType[0]) {
        $results = $queryResults->fetchAll(PDO::FETCH_ASSOC);
        return $results;
    }
    $queryResults = null; // first of the two steps to properly close
    $dbh = null; // second step to close the connection
}
catch(PDOException $e) {
    $errorMsg = $e->getMessage();
    echo $errorMsg;
}
}

?>
<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"  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" required>
        <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
    if (isset($_POST['submit'])) {
        $field = $_POST['field'];
        $key = $_POST['key'];
        $query = 'SELECT * FROM `riders` WHERE `'.$field.'` = ?';
        $params = array($key);
    }else{
        $query = 'SELECT * FROM `riders`';
        $params = array();
    }
    $results = dataQuery($query,$params);

    foreach($results as $row) {
   ?>
        <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>