2011-11-21 73 views
1

我需要一些關於如何設置這個頁面的幫助。假設我有一個包含5個左右數據字段的mysql表(即id,firstname,lastname,favorite color,favorite number)。我想讓用戶能夠搜索表格,因此我創建了一個「搜索」頁面。設置一個mysql「搜索」頁面

在頁面上,我將有ID,姓氏和名字的文本字段。從這裏用戶將插入數據進行搜索。我想我感到困惑的是我如何編寫一個腳本,它可以從文本字段獲取不同的搜索條件,並忽略空白的字段。例如,如果用戶只輸入第一個或最後一個名字,則將顯示具有相同第一個/最後一個名字的所有條目。如果他們只插入id(將是唯一的),那麼將顯示該用戶的所有內容。如果他們同時輸入姓氏和姓氏,則會顯示具有姓氏和姓氏的條目的所有數據。

我想這是基本的,但我是新來的,所以任何幫助如何設置這將是不勝感激。

代碼更新:

<?php 
//Connect and select database 

//if user wants to search 
if(isset($_POST['submit'])) 
{ 

$sqlConditions = array(); 

if(isset($_POST['id'])){ 
$id = filter_var($_POST['id'], FILTER_VALIDATE_INT); 
$sqlConditions[] = 'id = ' . $id; 
} else { 
$id = 0; 
} 

if(isset($_POST['firstname'])){ 
$firstName = filter_var($_POST['firstname'], FILTER_SANITIZE_STRING); 
$sqlConditions[] = 'firstname = ' . $firstName; 
} else { 
$firstName = ''; 
} 

if(isset($_POST['lastname'])){ 
$lastName = filter_var($_POST['lastname'], FILTER_SANITIZE_STRING); 
$sqlConditions[] = 'lastname = ' . $lastName; 
} else { 
$lastName = ''; 
} 

$query = 'SELECT * FROM students WHERE ' . join (' AND ', $sqlConditions); 

//print query 
while ($row = $query->fetch_row()) 
{ 
    print "LastName = " . $row[0] . " FirstName = " . $row[1]. 
"Favorite Color = " . $row[2] . " Favorite Number = " . $row[3] . "<br /><br />\n"; 
} 

} 
?> 


<html> 
<body> 
<form method = "POST" action = "<?php echo $_SERVER['PHP_SELF']; ?>"> 
<p>ID:<input type = "id" id="id" name="id" size="20" maxlength="40" /></p> 
<p>First Name:<input type = "firstname" id="firstname" name="firstname" size="20" maxlength="40" /></p> 
<p>Last Name:<input type = "lastname" id="lastname" name="lastname" size="20" maxlength="40" /></p> 
<input type="submit" id="submit" name ="submit" value="Search" /> 

</form> 
</body> 
</html> 

回答

0

你可以試試下面的辦法:

第1步:從POST獲取數據,驗證它,撰寫未來的sql條件

$sqlConditions = array(); 

if(isset($_POST['Id'])){ 
    $id = filter_var($_POST['Id'], FILTER_VALIDATE_INT); 
    $sqlConditions[] = 'Id = ' . $id; 
} else { 
    $id = 0; 
} 

if(isset($_POST['FirstName'])){ 
    $firstName = filter_var($_POST['FirstName'], FILTER_SANITIZE_STRING); 
    $sqlConditions[] = 'FirstName = ' . $firstName; 
} else { 
    $firstName = ''; 
} 

if(isset($_POST['LastName'])){ 
    $lastName = filter_var($_POST['LastName'], FILTER_SANITIZE_STRING); 
    $sqlConditions[] = 'LastName = ' . $lastName; 
} else { 
    $lastName = ''; 
} 

第2步:撰寫查詢

$query = 'SELECT * FROM your_table WHERE ' . join (' AND ', $sqlConditions); 

當然,您將需要使用mysql_real_escape_string或一些現代的方法作爲PDO使s避免SQL注入。

+0

這是偉大的!我試過這種方法(請參閱上面我更新的代碼),但是我似乎無法獲得要在頁面上打印的結果。有什麼我做錯了嗎?謝謝:) –

+0

$查詢只是一個字符串。您需要執行查詢,然後您可以獲取結果。請閱讀:http://php.net/PDO –

+0

感謝您的幫助。我開始閱讀,雖然困惑,我想出了這個:$ result = $ connection-> query($ query); $ row = $ result-> fetch(PDO :: FETCH_ASSOC); print_r($ row); ...這是我需要的嗎?我試過這個,但是我被轉發到了一個空白頁面。 –

1

在什麼語言是你的 「搜索」 頁?

一般而言,您只需要首先找出用戶完成的哪些元素,即不是空的。如果您正在討論網頁,則可以使用javascript來確定字段是否爲空。

然後你應該有不同的查詢,這取決於例如在PHP中編寫的字段組合,以執行查詢並獲得結果。

if (lastnameStr!=null) 
{ 
    <?php 
    $result = mysql_query('SELECT lastname FROM tableName); 
    if (!$result) { 
    die('Invalid query: ' . mysql_error()); 
    ?> 
} 
else 
{ 
.... 
} 
} 
2

我正在寫這個給剛開始使用PHP的人。如果他們是PHP專業人員,我向OP道歉,但是這個網站適合每個人!

所以,這裏是我建議你做:

  1. 寫一個簡單的腳本能夠connect並選擇從人口表/顯示信息。
  2. 在瞭解瞭如何工作之後,請了解如何使用prepared statements。一旦你理解了這兩個東西是如何工作的,這將保護你之類的東西SQL injections   *

  3. 。所有你需要做的就是製作一個HTML表單(這對於Sir爵士來說很容易找到幫助),然後使用你的$ _GET或$ _POST來訪問用戶的輸入並獲得你的信息。 (如果您不瞭解GET和POST之間的區別,請查看它!)

如果你可以學習這些東西,你會很好的路上。同時,瞭解怎麼樣的作品對你也很好:

SELECT stuff FROM myTable WHERE someCondition LIKE '%Me%'

* (如果你學到了一兩件事從這個答案記住這一點)