gpt4 book ai didi

php - 使用 $_GET 中的多个变量来更改页面布局和 MySQL 结果

转载 作者:行者123 更新时间:2023-11-29 10:14:30 26 4
gpt4 key购买 nike

我试图构建一个过滤系统来从 MySQL 数据库检索信息,

我在互联网上搜索了几个小时,几乎一整天,但现在我要在这里碰碰运气。

我的解决方案从 PHP 中的 $_GET 函数开始,但在接近我想要的功能时,它产生了一个新问题。
现在发生的情况是,当应用新的过滤器时,另一个过滤器会神奇地切换回默认值。我做了一些测试,似乎它认为 $_GET 是空的,但由于情况显然不是这样,我无法弄清楚。

if (isset($_GET['select'])) {
if ($_GET['select'] == "allitems") {
$select = "SELECT * FROM items";
} else if ($_GET['select'] == "available") {
$select = "SELECT * FROM items WHERE available='1'";
}
} else if (empty($_GET['select'])) {
$select = "SELECT * FROM items";
}
if (isset($_GET['order'])) {
if ($_GET['order'] == "id_asc") {
$order = "`items`.`item_id` ASC";
} else if ($_GET['order'] == "id_desc") {
$order = "`items`.`item_id` DESC";
}
} else if (empty($_GET['order'])) {
$order = "`items`.`item_id` ASC";
}
if (isset($_GET['layout'])) {
if ($_GET['layout'] == "row") {
$layout = "row";
} else if ($_GET['layout'] == "grid") {
$layout = "grid";
}
} else if (empty($_GET['layout'])) {
$layout = "row";
}

$s = $_GET['select'] ?? 'allitems';
$o = $_GET['object'] ?? 'id_asc';
$l = $_GET['layout'] ?? 'row';

上面的代码是从 URL 检索信息的地方,看起来像这样:store?select=allitems&order=id_desc它看起来到处都是,但是在我开始的地方进行良好的编码并没有真正帮助,并且在尝试一些东西时它最终出现在这里。

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
//what to show
if (isset($_POST['allitems'])) {
$s = "allitems";
}
if (isset($_POST['available'])) {
$s = "available";
}
//order to show it in
if (isset($_POST['id_asc'])) {
$o = "id_asc";
}
if (isset($_POST['id_desc'])) {
$o = "id_desc";
}

if (isset($_POST['allitems']) || isset($_POST['available']) || isset($_POST['id_asc']) || isset($_POST['id_desc'])) {
$data = ['select' => $s, 'order' => $o];
$query_string = http_build_query($data);
header('Location: store' . (FALSE === empty($query_string) ? '?'.$query_string:''));
exit;
}

上面的代码是我设置变量值的地方,现在我几乎肯定这不是问题所在,因为它仍然有效。由于它能够设置一个值,例如,当您按 id_descent 时,它会获取该值并且仅当您需要两个过滤器 id_ascent 且仅当 available = true 时才会发生更改。它将第一个切换回默认状态。 (当$_GET为空时设置)

我希望这是有道理的,否则我很乐意重新表述我的问题。

最后但并非最不重要的一点是,如果有人知道一种完全不同的方法来做到这一点,那就很好,然后以下内容可能会有所帮助:

                $getItems = ("$select ORDER BY $order");
$result = $connection->query($getItems);
if ($result->num_rows > 0) { //do stuff

谢谢!

ps:我尝试了几种其他方法来做到这一点,但我遇到了更多问题和错误。大多数都是使用 $_SESSIONs 或 JavaScript,我的主要问题是在刷新页面两次之前更改不会应用...

编辑:

我不知道这是否有帮助,但这是同一页面上我的 html 表单的精简版本,

页面也会重定向到自身。

                        <form action="store" method="post"> 
<button class="a" name="allitems">
</button>

<button class="a" name="available">
</button>

<button class="a" name="id_<?php if ($o === "id_asc") {echo'desc';} else {echo'asc';}?>">
</button>

<button class="a" name="row">
</button>

<button class="a" name="grid">
</button>
</form>

**编辑2:**

*示例1:*
[因此,当我选择一个过滤器时,一切正常,所有其他选项的默认状态都会被设置][1]

*示例2:*
[但是一旦我选择了第二个,之前选择的过滤器就会设置回默认状态][2]

最佳答案

也许有点偏离主题,但你可以大大简化你的代码:

                if (isset($_GET['select']) && $_GET['select'] == "available") {
$select = "SELECT * FROM items WHERE available='1'";
} else {
$select = "SELECT * FROM items";
}
if (isset($_GET['order']) && $_GET['order'] == "id_desc") {
$order = "`items`.`item_id` DESC";
} else {
$order = "`items`.`item_id` ASC";
}
if (isset($_GET['layout']) && $_GET['layout'] == "grid") {
$layout = "grid";
} else {
$layout = "row";
}

另一个改进:

                    if (isset($s) || isset($o)) {
$data = ['select' => $s, 'order' => $o];
$query_string = http_build_query($data);
header('Location: store' . (FALSE === empty($query_string) ? '?'.$query_string:''));
exit;
}

您想重定向到 management?select=allitems&order=id_desc 还是 store?select=allitems&order=id_desc(您编写了 management在您的问题中,但正在重定向到代码中的 store)

关于php - 使用 $_GET 中的多个变量来更改页面布局和 MySQL 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50319071/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com