2014-09-25 76 views
0

我正在爲學生創建一個頁面,他們可以通過三種不同的選項搜索他們的結果。我有問題。請指引我在哪裏,我在做什麼錯誤在搜索結果中遇到困難php

<form action="do_search.php" method="post"> 
<table width="540" border="0" align="center" cellpadding="0" cellspacing="0"> 
<tr> 
    <td height="30"><strong>Search Criteria</strong></td> 
    <td></td> 
    <td><label for="criteria"></label> 
    <select name="criteria" id="criteria"> 
     <option>Seach by Name</option> 
     <option>Search by Father Name</option> 
     <option>Search by Roll No.</option> 
    </select></td> 
</tr> 
<tr> 
    <td height="30">&nbsp;</td> 
    <td></td> 
    <td>&nbsp;</td> 
</tr> 
<tr> 
    <td width="150" height="30"><strong>Enter Value:</strong></td> 
    <td width="20"></td> 
    <td width="370"><input name="value" type="text" id="value" size="40" /></td> 
</tr> 
<tr> 
<td height="10" colspan="3"></td> 
</tr> 
<tr> 
<td height="30"></td> 
<td></td> 
<td> 
    <input name="submit" type="submit" value="Submit" id="submit_btn"/> 
    <input name="reset" type="reset" value="Reset" id="reset_btn" /> </td> 
</tr> 
<tr> 
<td colspan="3" height="10"></td> 
</tr> 
</table> 
</form> 

do.search.php

<?php 
include 'authentication.php'; 
include 'includes/dbConnect.php'; 
?> 

<?php 
    $criteria = $_POST['criteria']; 
    $value = $_POST['value']; 
    if ($value == '') 
    { 
     $myURL = 'error.php?eType=no_value'; 
     header('Location: '.$myURL); 
     exit; 
    } 
    if ($criteria == "search by name") 
    { 
    $result = mysql_query("SELECT * FROM students WHERE Name = '$value'") or die("SELECT Error: ".mysql_error()); 
    $num_rows = mysql_num_rows($result); 
    } 

    elseif ($criteria == "search by father name") 
    { 
    $result = mysql_query("SELECT * FROM students WHERE Father_Name = '$value'") or die("SELECT Error: ".mysql_error()); 
    $num_rows = mysql_num_rows($result); 
    } 

    elseif ($criteria == "search by roll no.") 
    $result = mysql_query("SELECT * FROM students WHERE Roll_No. = '$value'") or die("SELECT Error: ".mysql_error()); 
    $num_rows = mysql_num_rows($result); 
?> 

請指引我哪裏做錯了。

+2

一切存在於這個問題,我們需要,除了你的錯誤是什麼。請向我們提供您收到的錯誤。 – Ohgodwhy 2014-09-25 04:39:38

+1

要獲得多個搜索結果的名稱,你必須使用 like子句 - 「SELECT * FROM students WHERE Father_Name like'%$ value'」 – justrohu 2014-09-25 04:40:21

回答

2

由於<option>Seach by Name</option>永遠不會與$criteria == "search by name"匹配,因此您的下拉值永遠不會匹配。

在您的形式,我建議做這樣的事情:

<select name="criteria" id="criteria"> 
    <option value="1">Seach by Name</option> 
    <option value="2">Search by Father Name</option> 
    <option value="3">Search by Roll No.</option> 
</select> 

然後在PHP中,只是正常的,如果else塊或交換機對它們進行比較。

switch($criteria) { 
    case '1': 
     // do something 
    break; 
    case '2': 
     // do something 
    break; 
    case '3': 
     // do something 
    break; 
} 

旁註:我強烈建議切換到改進版本的API,它是mysqli或使用PDO來代替,並使用預準備語句。

粗糙例子(未經測試):

所有兄弟 $_POST['criteria']
if(isset($_POST['criteria'], $_POST['value'])) { 
    $columns = array(1 => 'Name', 2, 'Father_Name', 3, 'Rol_No.'); 
    $db = new mysqli('localhost', 'username', 'password', 'database'); 
    $criteria = $_POST['criteria']; 
    if(!isset($columns[$criteria])) { 
     // column not found 
     exit; 
    } 
    $column_selected = $columns[$criteria]; 
    $value = '%' . $_POST['value'] . '%'; 
    $select = $db->prepare("SELECT * FROM students WHERE $column_selected LIKE ? "); 
    $select->bind_param('s', $value); 
    $select->execute(); 
    if($select->num_rows > 0) { 
     // found 
    } else { 
     // none found 
    } 
} 
0

首先得到空值,每當你寫一個搜索查詢時,總是使用LIKE條款。

這裏是解RIZWAN Sahib的:

<select name="criteria" id="criteria"> 
     <option name="name">Seach by Name</option> 
     <option name="father">Search by Father Name</option> 
     <option name"roll">Search by Roll No.</option> 
</select> 


<?php 
    $result = ''; 
    if ($criteria == "name") 
    { 
    $result = mysql_query("SELECT * FROM students WHERE Name LIKE '%$value'%") or die("SELECT Error: ".mysql_error()); 
    $num_rows = mysql_num_rows($result); 
    } 

    elseif ($criteria == "father") 
    { 
    $result = mysql_query("SELECT * FROM students WHERE Father_Name LIKE '%$value%'") or die("SELECT Error: ".mysql_error()); 
    $num_rows = mysql_num_rows($result); 
    } 

    elseif ($criteria == "roll"){ 
    $result = mysql_query("SELECT * FROM students WHERE Roll_No. LIKE '%$value%'") or die("SELECT Error: ".mysql_error()); 
    $num_rows = mysql_num_rows($result); 
} 
$row = mysql_fetch_array($result); 
?> 

的「%」符號用於定義前和圖案之後通配符(缺少字母)。

希望你找到你的解決方案