PHP数组内插键和值以实现

时间:2016-04-01 20:30:20

标签: php mysql arrays checkbox implode

我对PHP数组不太熟悉,我有以下代码生成查询以输出所需的结果。

$allstore = $_POST['store'];


 function createSelect($allstore)
{
    if (empty($allstore))
        return "";

    $querySelect = "";
    $queryJoin = "";
    $baseTable = "";
    foreach ($allstore as $store => $value) {
        if (!$querySelect) {
            $baseTable = $store;
            $querySelect = "SELECT " . $store . ".item_no, " . $store . ".actual_price, " . $store . ".selling_price, " . $store . ".qty as " . $store;
        } else {
            $querySelect .= ", " . $store . ".qty as " . $store;
            $queryJoin .= "
             INNER JOIN " . $store . " ON " . $baseTable . ".item_no = " . $store . ".item_no";
        }
    }
    $querySelect .= " FROM " . $baseTable;
    $query = $querySelect . $queryJoin;

    return $query;
}

//Stores to be shown
$allstore = ['s_M9' =>0 , 's_M10' =>1];

$query = (createSelect($allstore));
$result = mysql_query($query);
//rest of code...

如上所示,在最顶部有$allstore = $_POST['store'];根据之前的表单POST方法收集值,其中包含name=store[]复选框。

现在根据显示的功能,如果我创建自己的键和值

$allstore = ['s_M9' =>0 , 's_M10' =>1];

输出显示了我正在寻找的内容。但问题在于如何让$allstore根据用户在上一页选择的内容(复选框)内爆 s_M9,s_M10 这些商店?我的意思是,用户可以选择其中一个商店或两个商店。如何在不手动插入支架的情况下将检查结果内爆?

谢谢

修改:

<?php
echo "<form action='somewhere.php' method='POST'>";

$query = "SELECT * from stores_list ORDER BY short Asc";
$result = mysql_query($query);
if(mysql_num_rows($result)>0){
    $num = mysql_num_rows($result);
    for($i=0;$i<$num;$i++){
    $row = mysql_fetch_assoc($result);
    echo "<input type=checkbox name=store[] value={$row['short']} style='width:20px; height:20px;'>{$row['short']}";
    }
}

else{
    //No Stores Available
    echo "No Stores Found !";
}


echo "</td><input type='submit' value='Search'/></form>";

1 个答案:

答案 0 :(得分:2)

$allstore = [];
if (!empty($_POST['store'])) {
    foreach ($_POST['store'] as $value) {
         $allstore[$value] = 1; // or 0, it doesn't matter because your function adds all the keys
    }
}

$query = (createSelect($allstore));
$result = mysql_query($query);

当然,你必须处理你的createSelect函数以避免SQL注入,请阅读here