我希望做到以下几点:
我有以下php文件。 search.php,包含查询数据库并将其保存到会话数组中的代码。
<?php
include 'newCustomer.php';
connect('final');
$query = $_POST['searchDB'];
$query = htmlspecialchars($query); // stop HTML characters
$query = mysql_real_escape_string($query); //stop SQL injection
$data = mysql_query("SELECT * FROM customer WHERE First_Name LIKE '$query'") ;//query the DB with search field in colleumn selected//
if($data === FALSE) {
$error = 'Query error:'.mysql_error();
echo $error;
}
else
{
$test = array();
$colNames = array();
while($results = mysql_fetch_assoc($data)){// puts data from database into array, loops until no more
$test[] = $results;
}
$anymatches = mysql_num_rows($data); //checks if the querys returned any results
if ($anymatches != 0) {
$_SESSION['names']=$test;
$colNames = array_keys(reset($test));
}
if ($anymatches == 0)
{
echo "Sorry, but we can not find an entry to match your query<br><br>";
}
}
//header("location: newCustomer.php");
//die
?>
和我的主页中的folling代码,它使用该数组创建一个名称组合框。
if (isset($_SESSION['names'])){
echo "Customers";
$array1 = $_SESSION['names'];
echo'<select name="customers>';
foreach($array1 as $name){
echo'<option value="'.$name["First_Name"].'">'.$name["First_Name"].'</option>';
}
echo'</select>';
}
?>
提交了包含搜索参数的表单后,将执行search.php操作。
我的数据库有以下名称。
丹史密斯 丹汤姆 丹丹 吉姆史密斯 吉姆汤姆 吉姆吉姆。然而,当我搜索dan时,组合框创建时Dan重复了24次 当我搜索吉姆时,它与吉姆一起创建了两次......为什么它会产生看似随意的结果呢?
感谢,
答案 0 :(得分:0)
首先,善意的是,这段代码无处可去,最终无法满足你的需求。我的建议是重新开始。
我认为你想要的是能够从组合框中选择用户。如果是这样的话,你可以稍微尝试一下。
实际上有几种方法可以实现这一目标:
w3schools.com上的优秀AJAX教程涵盖了方法3,这将是实现您所需要的最佳方式。
由于您使用了类似于方法1的内容,因此以下代码将生成合适的下拉列表。请注意使用mysqli_ *作为弃用的mysql _ *:
的更好替代方法$searchtext=mysqli_real_escape_string($mysqlidb,$_POST['searchDB'];
$sql="SELECT userid,forename,surname FROM users WHERE forename LIKE '%$searchtext%'";
$result=$mysqlidb->query($sql);
$combo="<SELECT name='customers'>";//note you had an error in your quotes on yours
while($row=$result->fetch_asssoc())
{
$combo.=sprintf("<OPTION value='%s'>%s %s</OPTION>",$row['userid'],$row['forename'],$row['surname']);
}
echo $combo;
这应该返回一个$ _POST ['customers'],其中包含客户的用户ID。您的方法将返回名字,这可能意味着您选择了错误的客户。
在一个安全的环境中,你也想混淆用户ID,因为将密钥暴露给这样的表是不好的做法,但只要你认识到未来的这个事实,我就开始使用编写的代码 - 更容易调试,直到你有信心。
您也可以使用此代码生成方法2所需的下拉列表,但实际上,最好保留第二个组合框需要更改的位置,具体取决于用户对第一个组合框的选择。
如果你仍然得到重复的名字,你可能会发现值得尝试var_dump($ test);看看你的桌子是否比你想象的更多...
如果这个答案是好的,请不要忘记选择它,因为它可以帮助其他人看看哪些有效,哪些无效。如果它不起作用,请添加评论,原因相同。