【问题标题】:PHP array implode keys and values to functionPHP数组内爆键和值以发挥作用
【发布时间】:2016-04-02 04:40:00
【问题描述】:

我对 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'];,它根据以前的 form POST 方法 收集值,该方法具有带有 name=store[] 的复选框。

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

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

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

谢谢

编辑:

<?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>";

【问题讨论】:

  • 你能发布你的html吗
  • 好的,等一下
  • 天哪,这会很有趣。让我指出,您正在将用户输入注入 MySQL 查询的 program 部分,这可能比将它们注入“值”部分更糟糕。你真的,真的不应该这样做。
  • 题外话,停止使用mysql_*函数,学习PDO。

标签: php mysql arrays checkbox implode


【解决方案1】:
$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

【讨论】:

    猜你喜欢
    • 2013-05-27
    • 1970-01-01
    • 1970-01-01
    • 2013-12-15
    • 2019-07-26
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    相关资源
    最近更新 更多