2016-01-20 88 views
2

我是PHP/MYSQLI的新手,我無法創建一個簡單的搜索來搜索我的數據庫。我的數據庫中的列是:'ID','姓名','年齡'。我的數據庫的名稱是'users',表名是'employees'。PHP/MYSQLI簡單搜索不起作用

下面是代碼:

<?php require('Connections/Localhost.php'); ?> 
<?php 
if (isset($_POST['Search'])) { 
    $search = $_POST['element']; 
    $sql = mysqli_query("SELECT * FROM employees WHERE Name = '$search' "); 
    if($sql->num_rows > 0) { 
     while($rows = $sql->fetch_assoc()) { 
      $id = $rows['ID']; 
      $name = $rows['Name']; 
      $age = $rows['Age']; 
      echo "ID: $id <br> Name: $name <br> Age: $age <br>"; 
     } 
    } 
    else { 
     echo "No Result Found!"; 
    } 
} 
?> 
<!doctype html> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>Untitled Document</title> 
</head> 
<body> 
<form method="post"> 
<input type="text" name="element" placeholder="Enter A Name"/> 
<input type="button" name="Search" value="Search" /> 
</form> 
</body> 
</html> 

它只是返回一個空白頁,沒有別的。我希望用戶在表單的文本區域輸入名稱,並單擊搜索按鈕,數據庫中對應於該名稱的所有數據應顯示在網頁上。請糾正我犯了錯誤的地方。

+0

函數['mysqli_query'](http://php.net/manual/en/mysqli.query.php)也需要連接參數(過程接口),它在手冊中說過,至少**轉on **你的錯誤報告 – Ghost

+0

你的mysqli_query函數有一個錯誤,你需要指定兩個參數。嘗試調試代碼第一個 – Pooya

+0

你需要使用預處理語句,以防止[SQL注入](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) 。因爲現在你的代碼開放給SQL注入。 – BRoebie

回答

3

您需要將按鈕類型更改爲submit

您的表格未發佈。

變化

<input type="button" name="Search" value="Search" /> 

要:

<input type="submit" name="Search" value="Search" /> 

此外,mysqli_query()需要數據庫連接資源。

您只給出了sql查詢。

$sql = mysqli_query($databaseConnection, "SELECT * FROM employees WHERE Name = '$search' "); 

混合mysqli_query(mysqli的$鏈路,字符串$查詢[摘要$ resultmode = MYSQLI_STORE_RESULT])

Reference

+0

謝謝!它像魅力一樣工作。 –

0

作爲每OP的請求這裏我將解釋如果您覺得我沒有詳細說明某個主題,請在mysqli中準備好的語句的一般概念隨意編輯。

  1. 你需要做的第一件事就是準備查詢(準備 查詢發送一個空數據庫查詢)。但不是定義參數 ,你會放一個問號。

    1. 之後,您需要將參數綁定到問號請按照查詢中的確切順序!您要做的第一件事就是定義參數字符串的類型是s整數是i,blob 是b。之後,您需要使用數據定義變量。

      1. 而你需要做的第三件也是最後一件事是執行查詢。我總是在if語句中使用它,因爲它會返回一個 true或false,並且像這樣可以檢查查詢是否失敗並處理錯誤。在這種情況下,你不需要別的東西,因爲如果查詢返回false,頁面將會死亡。

        /*1.*/ 
        $stmt = $databaseConnection->prepare("SELECT * FROM `employees` WHERE `name` = ?"); 
        /*2.*/ 
        $stmt->bind_param("s",$search); 
        /*3.*/ 
        if(!$stmt->execute()) 
        { 
        die("There went something wrong: " . $stmt->error); 
        } 
        

編輯:這裏解釋更多關於如何防止SQL-injections的問題。

+0

感謝您的幫助。我已經理解了mysqli中Prepared statement的概念。 –

+0

沒問題的隊友很高興幫助如果您有任何問題我很樂意幫助您 – BRoebie