簡體   English   中英

在postgres查詢中發布未傳遞數組

[英]Post not passing array in postgres query

我的目標是從html表單中發布多個選定的選項作為php查詢中的變量。 我相信將選擇標記ID設置為使用方括號的數組應允許通過多個選擇,但是我擔心的是,它們的格式設置不符合查詢將數據識別為數組的方式。 當前結果僅顯示帖子中最后選擇的選項的響應。

這是表單中的select標記(請注意,它是由一個單獨的查詢填充的,也許有人可以在此處說明如何將格式添加到菜單變量中……應采用這種格式……“ 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;
}

$media是一個數組。 您不能將數組直接替換為字符串(它只是將單詞Array放在此處)。 您應該使用implode()將其轉換為逗號分隔的列表。 您還需要在每個名稱周圍加上引號,並對其進行轉義以防止SQL注入。

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

然后,您可以將media_names替換為查詢,而不是$media

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM