2012-07-09 68 views
0

我試圖創建一個網頁,用戶可以提交他們知道的信息並選擇他們想要返回的信息。例如,如果他們知道他們提交的ID號碼,他們可以輸入它並要求返回的值是ID號和產品名稱。輸入值和選擇返回數據

正在檢索的信息存儲在MySQL數據庫中,並且HTML頁面佈局了選擇菜單,文本框和複選框(以便用戶可以選擇名稱或輸入其他信息,然後使用複選框選擇他們想要返回的其他信息)。

下面是相關的HTML:

<table><tr> 
<form name="input" method="post" action="next.php"> 
<td width="120">Flowcell ID:<br /> 
<select name = "Flowcell_ID"> 
<option disabled="disabled" selected="selected"> 
Select... 
</option> 
<?php 
$link = mysqli_connect("localhost","user","pass","db"); 
$query = "SELECT DISTINCT ID FROM table"; 
$result = mysqli_query($link, $query); 
while ($row = mysqli_fetch_array($result)){ 
$id = $row['ID']; 
echo "<option value=\"$id\">$id</option>"; 
} 
mysqli_close($link); 
?> 
</select></td> 
</tr><tr> 
<td width="120">Name:<input type="text" name="Name" /></td> 
</tr><tr> 
<td width="120">Date:<input type="text" name="Date" /></td> 
</tr><tr> 
<td width="120">Group:<input type="text" name="Group" /></td> 
</tr><tr> 
<td width="120"><input type="checkbox" name="options[]" value="ID">ID</input></td> 
<td width="120"><input type="checkbox" name="options[]" value="Name">Name</input></td> 
<td width="120"><input type="checkbox" name="options[]" value="Date">Date</input></td> 
<td width="120"><input type="checkbox" name="options[]" value="Group">Group</input></td> 
</tr></table> 

我迄今爲止唯一的PHP是:

$id = $_POST['ID']; 
$name = $_POST['Name']; 
$date = $_POST['Date']; 
$group = $_POST['Group']; 

我怎麼會產生一個MySQL查詢,看起來像

SELECT [checked checkboxes] FROM table WHERE [information field] = [user-entered information] 

謝謝!

回答

0

可以逐步構建查詢:

$fields = array(
    'ID' => 'id', 
    'Name' => 'name', 
    'Date' => 'date', 
    'Group' => 'group', 
); 

$query = 'SELECT'; // Optional fields to be displayed may go here 
$comma = ' ';  // and if they do, start with $comma = ', '; 

$where = array(); 

foreach($fields as $post => $mysql) 
{ 
    // here we have $post equal to 'ID', our POST field, and 
    // $mysql equal to, say, 'Id' -- the MySQL field name. 
    // Check whether options['ID'] is set. If so, we must get 
    // the _POST[ID] field and check its contents against "Id" field in DB. 
    if (in_array($post, $_POST['options'])) 
    { 
     $query .= "$comma$mysql"; 
     $comma = ', '; 
     // Add WHERE condition 
     $where[] = "$mysql = '" . mysql_real_escape_string($_POST[$post]) . "'"; 
    } 
} 
// $comma, the separator between option fields, also doubles up as a check 
// to see whether we have conditions. 
// another possibility would be, "if (empty($where))" 
if (' ' == $comma) 
    die("You must select at least one checkbox!"); 

$query .= ' FROM table WHERE '; 
// Build WHERE condition 
$query .= '(' . implode(' AND ', $where).')'; 

// Other conditions may go here (e.g. " AND record_valid = 1 ") 

$query .= ';'; 
+0

出於某種原因,它不接受'作爲'for'聲明$後=> $ mysql'。而不是「foreach」? – user1504538 2012-07-09 18:42:20

+0

好的,對不起評論兩次。它適用於一個'foreach'聲明(我敢肯定,只有他們使用'$ x作爲$ y => $ z'),並且它沒有返回任何錯誤。但是,即使選中了複選框,它也會死亡,並且在我註釋掉該部分時忽略它們。 'if(''== $ comma)...'實際上做了什麼?它是如何工作的?謝謝! – user1504538 2012-07-09 18:47:57

+0

@ user1504538'if('== == $ comma)'將在沒有選項被選中時返回true。請注意'$ comma'作爲循環前的空格開始,如果字段數組中的某個鍵具有與其關聯的值(即,被選中),則它被設置爲「','」。所以這個條件只是檢查'$逗號'是否仍然保留其原始值(沒有用戶輸入會改變它)。 – FlyingMolga 2012-07-09 20:10:16