使用mysql query PDO

时间:2016-01-29 00:27:46

标签: php pdo searchbar

我的脸盒上有搜索栏。每次用户在文本框中输入字符或名称时,它都会搜索lastName或firstName。

有关详细说明,请点击此处截图:

enter image description here

这是代码:

更新

这是我在网上发现的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']的值传递给此文本框

enter image description here

------- END -------

这是可选来回答

这是我的小问题:

如何使用LIKE查询阻止SQL注入?我知道如何使用bindParam,但我不知道我的理论是否正确:

lastName LIKE '%?%' OR firstName LIKE '%?%'");
$qry->bindParam(1, $find);
$qry->bindParam(2, $find);

这是对的吗?

1 个答案:

答案 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]);