PHP 数组内爆键和值以发挥作用
PHP array implode keys and values to function
我对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
根据用户 select 编辑的内容来爆破这些商店 s_M9、s_M10上一页(复选框)?我的意思是,用户可以 select 其中一家商店或两家商店。如何在不手动插入的情况下在这些括号之间内爆检查结果?
谢谢
编辑:
<?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>";
$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
我对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
根据用户 select 编辑的内容来爆破这些商店 s_M9、s_M10上一页(复选框)?我的意思是,用户可以 select 其中一家商店或两家商店。如何在不手动插入的情况下在这些括号之间内爆检查结果?
谢谢
编辑:
<?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>";
$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