2017-05-25 3 views
-1

私の目標は、PHPフォームの変数としてHTMLフォームから選択された複数のオプションを投稿することです。大括弧を使用して配列として選択タグIDを設定すると、複数の選択肢を渡すことができるはずですが、私の懸念は、クエリが配列としてデータを認識するようにフォーマットされていないことです。現在の結果には、最後に選択したオプションの回答のみがポストから表示されます。postgresクエリで配列を渡さない投稿

フォームから選択タグがあります(別のクエリによって設定されていることに注意してください。誰かがここでメニュー変数に書式を追加する方法を述べる可能性があります)... 'COMM_0001 %」、 'COMM_0002の%' など:

<select multiple name="userMedia" class="form-control" id="userMedia[]" 
style="height:350px;"> 
<?php 
$conn = pg_connect("database login data deleted"); 
if (!$conn) { 
echo "Did not connect.\n"; 
exit; 
} 
$sql = "SELECT medias.name FROM public.medias where medias.startdate > '2015-01-01'"; 
$rs = pg_query($conn, $sql); 


if (pg_num_rows($rs) > 0) { 
// output data of each row 
while($row = pg_fetch_assoc($rs)) { 
$menu .= "<option value=".$row['name'].">" . $row['name']. "</option>"; 
} 
} 

echo $menu; 

pg_close($conn); 

?> 
</select> 

ここでは、このデータは、に掲載されることをクエリがある...

$datea= $_POST["userDatea"]; 
$media= $_POST['userMedia']; 
$datez= $_POST["userDatez"]; 

if(!empty($_SERVER['REQUEST_METHOD']) && 
(strcasecmp($_SERVER['REQUEST_METHOD'], 'post')===0) ) { 
// Create connection 
$conn = pg_connect("Connect Info Deleted"); 

// Check connection 
if (!$conn) { 
echo "Did not connect.\n"; 
exit; 
} 

$result = pg_query($conn, 
"SELECT 
date (b.starttime), 
Count(b.starttime) as Plays, 
Count(distinct(b.playerid)) as Stores 

FROM 
public.billing b, 
public.medias m, 
public.players p 

WHERE 
b.mediaitemid = m.id and 
p.id = b.playerid and 
m.name LIKE any (array['$media%']) and 
b.starttime >= date('$datea') and 
b.starttime < date('$datez')+1 and 
m.startdate > '2015-01-01' 

GROUP BY 
date (b.starttime) 

ORDER BY 
date (b.starttime);"); 

if (!$result) { 
echo "Query failed.\n"; 
exit; 
} 

答えて

2

$mediaは、配列であるあなたが代用することはできません。配列を直接文字列に変換します(単語はArrayとなります)。 se implode()をカンマ区切りのリストに変換します。 SQLインジェクションを防ぐために、それぞれの名前の前後に引用符を付ける必要があります。

$media_names = implode(',', array_map(function($n) use ($conn) { 
    return "'" . pg_escape_string($conn, $n) . "'"; 
}, $media); 

その後、あなたの代わりに$mediaの問合せにmedia_namesを置き換えることができます。

+0

ありがとうございます、これは正しい方向に動いているようです...しかし、コード内のどこに行くのか説明できますか? – KevMoe

+0

'$ media = $ _POST ['userMedia'];'と '$ result = pg_query(...)'の間のどこでも – Barmar

関連する問題