我的脸盒上有搜索栏。每次用户在文本框中输入字符或名称时,它都会搜索lastName或firstName。
有关详细说明,请点击此处截图:
这是代码:
更新
这是我在网上发现的3天活动中的代码
这段代码由Malik Naik制作(我修改了他的一些代码)
addBookRecord.php
<?php
session_start();
$recordType = $_GET['status'];
?>
<!-- this code made by Malik Naik -->
<script>
function searchResult(string){
var xmlhttp;
if(window.XMLHttpRequest){
xmlhttp = new XMLHttpRequest();
}else{
xmlhttp = new ActiveXObject("XMLHTTP");
}
xmlhttp.onreadystatechange = function(){
if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
document.getElementById("result").innerHTML = xmlhttp.responseText;
}
}
xmlhttp.open("GET", "search.php?search="+string, true);
xmlhttp.send(null);
}
</script>
<style>
#result{
width: 350px; margin: 0 auto; max-height: 150px; overflow: hidden;
}
</style>
<!DOCTYPE html>
<html lang="en">
<head>
<!--<link rel="stylesheet" type="text/css" href="../css/bootstrap.min.css">-->
<link rel="stylesheet" type="text/css" href="../css/bootstrap-glyphicons.css">
</head>
<span style="color:#B22222"><strong>Add Record</strong></span>
<form action = "" method="post">
<div style="margin-top: 10px; margin-left: 10px;">
<strong>Name:</strong>
<!--<form name="form1" method="post">-->
<div class="input-group stylish-input-group">
<input type="text" class="form-control" name="searchStud" placeholder="Search" onkeydown="searchResult(this.value)" autocomplete="off">
<span class="input-group-addon">
<span class="glyphicon glyphicon-search"></span>
</span>
</div>
<div id="result"></div>
<!--</form>-->
<?php
if ($recordType=='book'){
?>
<strong>Item:</strong><br>
<input type="text" name="addBookItem" value="e-math (K to 12)"> <input type="text" name="searchID" value="<?php echo $_SESSION['addBorrowID'];?>"><br>
<strong>Description:</strong> <br>
<input type="text" name="addBookDescription" value="Worktext in Mathematics"><br>
<strong>Author:</strong> <br>
<input type="text" name="addBookAuthor" value="Orlando A. Orence & Marilyn O. Mendoza"><br>
<strong>Publisher:</strong> <br>
<input type="text" name="addBookPublisher" value="REX Book Store"><br>
<strong>ISBN:</strong> <br>
<input type="text" name="addBookISBN" value="9789712361982"><br>
<?php
}
else{
?>
<strong>Item:</strong> <br>
<input type="text" name="addBookItem" value="e-math (K to 12)"><br>
<strong>Model:</strong> <br>
<input type="text" name="addBookAuthor" value="Orlando A. Orence & Marilyn O. Mendoza"><br>
<strong>Serial:</strong> <br>
<input type="text" name="addBookPublisher" value="REX Book Store"><br>
<?php
}
?>
<br>
</div>
<button class="btn btn-success btn-block btn-large" name="addRecordButton" >Save Changes</button>
</form>
的search.php
<?php
session_start();
include("../db/dbCon.php");
if(isset($_GET['search']) && $_GET['search'] != ''){
$search=$_GET['search'];
$qry = $conn->prepare("
SELECT e.enrld_id, CONCAT(i.lastName,', ', i.firstName,' ',i.middleName)
AS fullName
FROM user_info i
JOIN enrolled e ON e.userID=i.userID
WHERE i.lastName LIKE '%$search%' OR i.firstName LIKE '%$search%'
");
$qry->execute();
$result = $qry->fetchAll(PDO::FETCH_ASSOC);
foreach($result as $row){
if ($row['enrld_id']!=0){
//$_SESSION['addBorrowID']=(int)$row['enrld_id'];
$fullName = $row['fullName'];
echo '<div id="result" onclick="getSearchID("'.$row['enrld_id'].'")">'.$fullName.'</div>';
}
}
}
?>
<?php
function getSearchID($enrldID){
$_SESSION['addBorrowID'] = $enrldID;
}
?>
此方案仅用于测试$ _SESSION ['addBorrowID']是否具有值
if (isset($_POST['addRecordButton'])){
echo '<script type="text/javascript">alert("'.$_SESSION['addBorrowID'].'");</script>';
}
主要问题
我的问题是,每当我点击搜索栏下方的结果时,我都无法将enrld_id存储在searchID文本框中...我使用鼠标事件但它不起作用:
foreach($result as $row){
if ($row['enrld_id']!=0){
//$_SESSION['addBorrowID']=(int)$row['enrld_id'];
$fullName = $row['fullName'];
echo '<div id="result" onclick="getSearchID("'.$row['enrld_id'].'")">'.$fullName.'</div>';
}
}
<?php
function getSearchID($enrldID){
$_SESSION['addBorrowID'] = $enrldID;
}
?>
但结果是空的。我想将$ _SESSION ['addBorrowID']的值传递给此文本框
------- END -------
这是可选来回答
这是我的小问题:
如何使用LIKE
查询阻止SQL注入?我知道如何使用bindParam
,但我不知道我的理论是否正确:
lastName LIKE '%?%' OR firstName LIKE '%?%'");
$qry->bindParam(1, $find);
$qry->bindParam(2, $find);
这是对的吗?
答案 0 :(得分:1)
回答主要问题
以下是您遇到的问题。您尝试以无法正常工作的方式连接前端代码和服务器端代码。服务器端代码处理PHP,然后将生成的代码交给浏览器。此时只有前端或客户端代码可用。这是我正在谈论的代码段:
<?php
session_start();
include("../db/dbCon.php");
if(isset($_GET['search']) && $_GET['search'] != ''){
$search=$_GET['search'];
$qry = $conn->prepare("
SELECT e.enrld_id, CONCAT(i.lastName,', ', i.firstName,' ',i.middleName)
AS fullName
FROM user_info i
JOIN enrolled e ON e.userID=i.userID
WHERE i.lastName LIKE '%$search%' OR i.firstName LIKE '%$search%'
");
$qry->execute();
$result = $qry->fetchAll(PDO::FETCH_ASSOC);
foreach($result as $row){
if ($row['enrld_id']!=0){
//$_SESSION['addBorrowID']=(int)$row['enrld_id'];
$fullName = $row['fullName'];
echo '<div id="result" onclick="getSearchID("'.$row['enrld_id'].'")">'.$fullName.'</div>';
}
}
}
?>
<?php
function getSearchID($enrldID){
$_SESSION['addBorrowID'] = $enrldID;
}
?>
您正在添加onclick="getSearchId...
,但您在<?php ... >?
标记中定义了该功能。页面传送到浏览器时无法再访问此页面。如果你有时间并且看到自己做了很多前端开发,我强烈建议你带上quick course;它会为你节省很多麻烦,是一项很好的投资。
如果您已经检查了页面上的HTML,那么这个问题就会变得很明显,等等。在代码的顶部,我看到你已经包含了一个非常准确的AJAX调用。在这种情况下,你会想要利用类似的东西...这是对你想要做的事情的粗略概念。
<script>
var xmlhttp;
function ajaxCall (string, callback) {
if(window.XMLHttpRequest){
xmlhttp = new XMLHttpRequest();
}else{
xmlhttp = new ActiveXObject("XMLHTTP");
}
xmlhttp.onreadystatechange = callback
xmlhttp.open("GET", , true);
xmlhttp.send(null);
}
function searchResult(string){
ajaxCall("search.php?search="+string, function(){
if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
document.getElementById("result").innerHTML = xmlhttp.responseText;
}
});
}
function getSearchId(id) {
ajaxCall( 'path_to_php_file_that_returns_search_id?searchId=' + id, function() {
if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
//code here to put the id in the right spot
}
});
}
</script>
这将是file_that_returns_search_id.php
<?php
session_start();
echo $_SESSION['addBorrowID'] = $_GET['searchId'];
现在我看这个,我不知道你想要完成什么。这看起来更像是searchId的设置,但我只是在这里做什么。
对选项问题的回答
我读到这个吗? 99%的这些东西与你的问题没有关系吗?我觉得这是一个棘手的问题,他们告诉你几个人上下车的交流,然后问你公交车司机的年龄。
如果我对你的问题只需要这部分:
$qry = $conn->prepare("
SELECT userID, lastName, firstName, middleName
FROM user_info WHERE lastName LIKE '%".$find."%' OR firstName LIKE '%".$find."%'
");
$qry->execute();
回答你的问题。我将假设您的$conn
变量正在使用PDO来查询数据库。如果是这种情况,那么您要查找的信息是here。但是你的新代码可能看起来像这样。
$qry = $conn->prepare(
"SELECT userId, lastName, FirstName, MiddleName
FROM user_info where lastName LIKE '%?%' OR firstName LIKE '%?%'"
);
$qry->execute([$find, $find]);