2011-02-14 73 views
2

我是一個初學者在SQL,但我相信這應該工作。我一步一步做,所以這不是完整的代碼,但我遇到了一個問題。基本上我試圖做的是使用從窗體創建的陣列:試圖使用複選框創建一個SQL查詢

<form action="search.php" method="post"> 
<input type="checkbox" name="features[]" value="Texture" >Textures<br /> 
<input type="checkbox" name="features[]" value="Items" >Items<br /> 
<input type="checkbox" name="features[]" value="GUI" >Gui<br /> 
</form 

並創建什麼將最終成爲我的數據庫的查詢。以下是PHP代碼:

<?php 

    $button = $_POST['submit']; 
    $features = $_POST['features']; 

    if ($button){ 

    //connect 
    mysql_connect("server","username","password"); 
    mysql_select_db("rdm"); 

    foreach ($features){ 

    $x++; 

    if ($x=1) 
    $construct .= "feature LIKE '$features[$x]'"; 
    else 
    $construct .= " OR feature LIKE '$features[$x]'"; 
    } 

    $construct = "SELECT * FROM Textures WHERE '$construct'; 

    echo $construct; 

    ?> 

我的理解是這應該回聲出變量$結構,其中將包含文字「SELECT * FROM紋理WHERE功能LIKE ...然後特徵數組中的第一個值,其次是其他值。

任何幫助,爲什麼這是行不通的將是太棒了!正如我說的,我是很新,這很抱歉,如果這是一個愚蠢的錯誤。

謝謝提前!

+0

你忘記了你的回聲之前的行結束雙引號。 – drudge 2011-02-14 19:41:37

回答

0

試試這個:

// implode the features array into a string, adding quotes 
$featuresString = "'".implode("','", $features)."'"; 
// build the query 
$construct = "SELECT * FROM Textures WHERE feature IN (".$featuresString.")"; 
0

您在那裏有幾個語法錯誤。值得注意的是,帶SQL的行不會關閉雙引號或在行尾使用分號。您的if區塊末尾還有一個缺失的支架。

該代碼將完成的任務,因爲聲明:

$button = isset($_POST['submit']) ? true : false; 
$features = isset($_POST['features']) ? $_POST['features'] : false; 

if ($button && is_array($features)) { 
     $construct = 'SELECT * FROM Textures WHERE feature IN ("'.implode('","', $features).'")'; 
    echo $construct; 
} 
3

您的查詢字符串將是錯誤的產生:

if ($x=1) 

這是不是一個比較,它的x設置爲1,那麼您查詢將沒有「或」條件。一個更好的方法來做你的查詢生成是:

$query_conditions = array() 
foreach($_POST['features'] as $feature) { 
    $query_conditions[] = "'" . mysql_real_escape_string($feature) . "'" 
} 
$where_in_clause = implode(',', $query_conditions); 
$query = "SELECT * FROM Textures WHERE feature IN ($where_in_clause)";