簡體   English   中英

需要有關使用MySQL查詢PDO的下拉結果的搜索欄的幫助

[英]Need help about Search Bar with dropdown result using mysql query PDO

我的面板上有搜索欄。 每次用戶在文本框中輸入字符或名稱時,它將搜索lastName或firstName。

有關更多說明,請參見屏幕截圖:

在此處輸入圖片說明

這是代碼:

UPDATE

這是我在閑置的三天里在網上找到的代碼

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文本框中...我使用Mouse事件,但無法正常工作:

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']的值傳遞給此文本框

在此處輸入圖片說明

- - - - 結束 - - - -

這是可選的

這是我的小問題:

如何防止使用LIKE查詢進行SQL注入? 我知道如何使用bindParam但是我不知道我的理論是否正確:

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

這是正確的嗎?

回答主要問題

這是您遇到的問題。 您正在嘗試以無法正常工作的方式將前端代碼與服務器端代碼連接起來。 服務器端代碼處理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 ... >?標簽中定義函數。當頁面交付給瀏覽器時,將無法再訪問該函數。您自己需要做很多前端開發,所以我強烈建議您快速學習 ;它可以為您省去很多麻煩,並且是一筆巨大的投資。在代碼的頂部,我看到您包括了一個非常准系統的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查詢數據庫。 如果是這種情況,那么您正在尋找的信息就在這里 但是您的新代碼可能看起來像這樣。

$qry = $conn->prepare(
  "SELECT userId, lastName, FirstName, MiddleName
  FROM user_info where lastName LIKE '%?%' OR firstName LIKE '%?%'"
);

$qry->execute([$find, $find]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM