2012-01-09 11 views
0

私はオートコンプリートボックスのためのコードを持っています、私は選択の明確化のための画像を追加していますが、返されるtitleが一意であることを確認したいですが、配列をユニークにするコードを取得したとき、それ以外の領域ではユニークではないコードです。これを回避する方法はありますか?array_uniqueは1つのフィールドにしかありませんか?

$query = "SELECT $title, imageURL FROM PRprodINFO2 WHERE ((prodcatID = '$cat_id') 
      AND ($title LIKE \"%" . $_GET["q"] . "%\")) group by $title LIMIT 8"; 
} 

$result = mysql_query($query); 

// set the array 
$output_items = array(); 

while($row = mysql_fetch_array($result)) { 

    // clean after first non letter/number 
    $row[$title] = preg_replace('/[^\w\s].*$/', "", $row[$title]); 

    //trim spaces 
    $row[$title] = trim($row[$title]); 

    // add image src 
    $output_items[] = '<img src='.$row[imageURL].' style=max-width:50px;>' 
         .$row[$title]; 

} // while 

// here i need just $row[title] to be unique, 
// it is made non unique after regex strips off some characters 
$output = array_unique($output_items); 

print(implode("\n", $output)); 

mysql_close(); 
+0

あなたのコードは、最初の行のブラインドSQLインジェクションで脆弱です。外からすべてを解析する必要があります。 – rekire

+0

あなたはあなたのデータベースでタイトルをユニークにしたいと思っていますか? –

+0

@colighto質問を少し修正しましたが、データベースデータとは何も関係ありません。 –

答えて

1

私はおそらくあなたが求めているもので混乱している可能性があります。あなたがsqlのタイトルでグループ化しているので、あなたはすでにユニークなタイトルを持っているようです。しかし、たぶんあなたは正規表現でいくつかのユニークなタイトルを同じものにしている余分な英数字以外の文字を持っているかもしれません。その場合

は、代わりにあなたのようなあなたの$ output_itemsを構築する、してみてくださいされています

$output_items[$row['title']] = $row['imageURL']; 

これは、各タイトルがユニークであることを保証します。そのタイトルに一致する最後の行のimageURLが表示されます。あなたはマッチし、代わりに、最初のタイトルをしたい場合は、ちょうどそれが好きで上書きする前にissetをチェックしてください。

if (!isset($output_items[$row['title']])) $output_items[$row['title']] = $row['imageURL']; 

その後、ループの外で、あなたの出力文字列を構築します。

$output = ''; 
foreach ($output_items as $title => $image) { 
    $output .= '<img src='.$image.' ...>'.$title."\n"; 
} 
echo $output; 
+0

ありがとうございます。しかし、このソリューションのためにどのコードを置き換えるか/修正するのか分かりません。 –

関連する問題