2017-03-10 41 views
0

我有一個頁面,我想讓用戶從表中存在的select中選擇字段,然後在屏幕上顯示這些字段的內容。我已經設置了select像這樣從列表框生成查詢在PHP中

<select name="queryfields" size="12" multiple="multiple" tabindex="1"> 
<option value="firstname">firstname</option> 
<option value="lastname">lastname</option> 
<option value="address">address</option> 
<option value="phone">phone</option> 

而且我知道,發現選擇什麼樣的選擇,我可以用這個:

<?php 
    header("Content-Type: text/plain"); 

    foreach ($_GET['queryfields'] as $selectedOption) 
     echo $selectedOption."\n"; 
?> 

這一點讓我選擇的字段的數組。但是,如何解析數組以生成完整查詢?例如,假設名字,姓氏被選中。然後我會想建立我的查詢是這樣的:

Select firstname, lastname from employeedata 

未知對我來說,如何從陣列中的數據爲選擇statent像我上面的代碼片斷。

回答

0

試試這個:

$sql = ''; 
$selected_fields = array(); 
foreach ($_GET['queryfields'] as $selectedOption){ 
    //echo $selectedOption."\n"; 
    $selected_fields[] = $selectedOption; 
} 
if(!empty($selected_fields)){ 
    $fields = implode(',', $selected_fields); 
    $sql = 'SELECT '.$fields.' from employeedata'; 
} 

,如果它不是空

if(!empty($sql)){ 
    echo $sql; 
} 
+0

設計可以這樣在同一個頁面上實現W/O重定向?可能與一些JS? – IcyPopTarts

+0

這是php代碼,如果你想訪問這段代碼,你必須使用Ajax。但我現在不明白你的要求! – Bhaskar

+0

你的代碼按我的要求工作。我沒有意識到這是在同一頁面上做的獨立方法(AJAX)。我會谷歌阿賈克斯。 – IcyPopTarts

0

您可以使用PHP破滅()函數//打印查詢。

<?php 
    header("Content-Type: text/plain"); 
    $q = "SELECT ".implode(', ', $_GET['queryfields'])." FROM employeedata"; 
?> 

但是SQL注入有一些可能性。在繼續之前,您應該閱讀關於該內容的內容。 How can I prevent SQL injection in PHP?

您可以創建一個像下面

<?php 
    header("Content-Type: text/plain"); 
    $filter = array_filter($_GET['queryfields'], function($val) { 
     $allowedFields = array(
      'firstname', 
      'lastname', 
      'address', 
      'phone',   
     ); 
     return in_array($val, $allowedFields); 
    } 

    $q = "SELECT ".implode(', ', $filter)." FROM employeedata"; 
?> 
+0

你會把它放在與'select'相同的頁面,還是放在我將要使用'$ _GET'的頁面上 – IcyPopTarts