PHP - 在同一页面搜索数据库并返回结果
非常感谢您的时间。PHP - 在同一页面搜索数据库并返回结果
我正在为我的业务创建一个CRM。这将是非常基础的,但包括我的行业在CRM中特别需要的一些关键功能,似乎并不存在于任何地方,但我离题了。
我目前正在网络应用程序中搜索功能,搜索客户端并将结果返回到搜索表单下方的下拉菜单中。当在该列表中选择客户端时,用户被重定向到显示与该客户端相关的所有信息的页面。
我的问题与此搜索功能有关。我现在有搜索在下拉菜单中将结果作为ECHO返回,它看起来非常混乱。 PHP最终埋在了html表单中。必须有一种更简单更方便的方式来将结果作为列表返回。
边注:返回的搜索结果中甚至不必是在一个下拉列表中,我刚刚来到这个解决方案随着时间的推移,因为它让我对通过所选择的用户对下一个PHP代码下一页相当容易与ID的隐藏表单字段。
这是我到目前为止所做的。有人可以帮我清理一下吗?
<!DOCTYPE html>
<html>
<head>
<title>Client Search Results</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<div class="container">
<form id="contact" action="" method="get">
<fieldset>
<h4>Search For Client</h4>
<input name="term" placeholder="Enter Name Here" type="text">
</fieldset>
<fieldset>
<button type="submit">Search</button>
</fieldset>
</form>
</div>
<div class='container'>
<form id='contact' action='edit.php' method='post'>
<fieldset>
<h4>Search Results</h4>
<select size="5" style="width:100%" name='id' >
<?php
// Database Connection String
include("../../comm/comm.php");
$con = mysql_connect($DB_HOST,$DB_USER,$DB_PASS);
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db($DB_NAME, $con);
//Retrieve The Searched Term and Display The Results
if (!empty($_GET['term'])) {
$term = mysql_real_escape_string($_GET['term']);
$sql = "SELECT * FROM client WHERE firstname LIKE '%".$term."%'";
$r_query = mysql_query($sql);
while ($row = mysql_fetch_array($r_query)) {
echo "<option";
echo " value='";
echo "".$row['client_id'];
echo"'>";
echo "".$row['firstname'];
echo " ".$row['lastname'];
echo " - ".$row['city'];
echo " ,".$row['state'];
echo "</option>";
}}
?>
</select>
</fieldset>
<fieldset>
<button type='submit' name='submit'>View Selection</button>
</fieldset>
</form>
<div>
</body>
</html>
你的选择可能只是被写成如下:
echo '<option value="$row[client_id]">$row[firstname] $row[lastname] - $row[city], $row[state]</option>';
另外,还要注意mysql_功能已被弃用,以错误的方式使用是非常危险的,让你的网站受到攻击。
使用准备好的语句,使用mysqli或PDO。
...
$r_query = mysql_query($sql);
while ($row = mysql_fetch_array($r_query)) { ?>
<option value='<?= $row['client_id'];?>'>
<?= $row['firstname'] . " " . $row['lastname']; ?> -
<?= $row['city'] . ", " . $row['state']; ?>
</option>
<?php }} ?>
或者一些变化。要点是,你的PHP不必是一个连续的块,你可以在任何时候关闭你的PHP标签,恢复使用普通的HTML,然后打开一个新的PHP标签并继续循环。
此外,在上例中,<?=
是<?php echo
的简写。
另外,在您的示例中,您使用的是mysql_
函数,这些函数在较新版本的PHP5中已弃用,并在PHP7中删除。最好研究一下mysqli_
或PDO
(你也可以使用MySQL数据库)。
最后,一旦你开始使用其中任何一种,查看准备好的语句,这将使你的代码更好地运行/避免SQL注入。
感谢您的快速回复。我打算使用mysqli和准备好的语句。我只是试图为整个事情铺平道路,然后通过清理整个过程。 – inkslinger
我刚开始研究如何正确使用PDO,并且它对我来说不是一件容易的事。我正在教自己所有这些。我计划在一定程度上将框架中的粗糙表达式运用到一定程度后,用准备好的语句和mysqli来替换所有这些。 – inkslinger