【问题标题】:Want to refresh page with updated SQL statement after choosing from dropdown menu从下拉菜单中选择后想要使用更新的 SQL 语句刷新页面
【发布时间】:2022-01-07 11:13:57
【问题描述】:

我尝试了很多谷歌,并在其他 stackoverflow 类似的帖子中进行了搜索,但我真的找不到对我有帮助的东西 -.-

我正在尝试让我的网站刷新并更新我的表格值,并且只显示与下拉菜单相同的值。 当我进入页面时,我希望它像现在一样显示所有内容,然后在选择 CustomerCountryCode 时更新站点和我的 SQL 语句 I only want to show the 'DK', when choosing from the dropdown menu

Menu shown here

History.php(WHERE 应该类似于 $_POST['SelectedValue'] 而不是 'DK')

if (isset($_POST['SelectedValue'])) {
$sql = "SELECT * FROM [CampaignModule].[dbo].[RetailCampaign] WHERE CampaignNo <> '' AND 
CustomerCountryCode like 'DK' ORDER BY ID DESC"
}else {
$sql = "SELECT * FROM [CampaignModule].[dbo].[RetailCampaign] WHERE 
CampaignNo <> '' ORDER BY 
ID DESC";
}

$sqlFilter = "SELECT DISTINCT CustomerCountryCode FROM [CampaignModule]. 
[dbo].[RetailCampaign]";
$params = array();
$options =  array("Scrollable" => SQLSRV_CURSOR_KEYSET);
$stmt = sqlsrv_query($conn, $sql, $params, $options);
$stmt2 = sqlsrv_query($conn, $sqlColumns, $params, $options);
$stmtFilter = sqlsrv_query($conn, $sqlFilter, $params, $options);

echo '<select name="Filter" id="FilterSelect" class="form-control">
<option>Choose Country Filter</option>';
while ($row = sqlsrv_fetch_array($stmtFilter, SQLSRV_FETCH_NUMERIC)) {
echo "<option value='$row[0]'>$row[0]</option>";
}
echo '</select>';

HistoryControl.js - 我尝试创建一个 post 函数来插入数据,并在菜单更新时重新加载页面 - 我尝试了其他一些东西。

$(document).ready(function () {
$("#FilterSelect").change(function () {
var value = $("#FilterSelect").val();
$.ajax({
  url: "../Model/History.php",
  type: "POST",
  data: { 'SelectedValue=': value },
  success: function () {
      location.reload();
  }
});
});
});

任何形式的优化和其他“最佳实践”都非常受欢迎。 如果需要更多信息或代码,请告诉我

更新 - 解决方案

在@Lam Tran Duc 和@Manashree Shah 的帮助和想法下

历史.php

 if (isset($_SESSION['SelectedValue'])) {
 $_POST['SelectedValue'] = $_SESSION['SelectedValue'];
 }

if (isset($_POST['SelectedValue'])) {
$_SESSION['SelectedValue'] = $_POST['SelectedValue'];

$sql = "SELECT * FROM [CampaignModule].[dbo].[RetailCampaign] WHERE 
CampaignNo <> '' 
AND CustomerCountryCode='" . $_POST["SelectedValue"] . "'";
} else {
unset($_SESSION['SelectedValue']);
$sql = "SELECT * FROM [CampaignModule].[dbo].[RetailCampaign] WHERE 
CampaignNo <> '' 
ORDER BY ID DESC";
}

HistoryControl.js

$(document).ready(function () {
$("#FilterSelect").change(function () {
var value = $("#FilterSelect").val();
$.ajax({
  url: "../Model/History.php",
  type: "POST",
  data: { SelectedValue: value }, // remove the '=' character
  success: function (data) {
    //alert(data)
    location.reload();
  }
});
});
});

当我这样做时它正在工作,但我需要它来清除我遇到很多麻烦的 $_SESSION 变量,并最终找到了清除我 historyPage.php 中的会话的解决方案

<?php
include "../Model/History.php";
session_unset();
?>

【问题讨论】:

    标签: php html jquery sql ajax


    【解决方案1】:

    据我了解,您正在经历:

    • 下拉列表(国家过滤器)
    • 数据显示表。

    当在下拉列表中选择了一个值时,表格中的数据将按照所选下拉列表的值进行过滤。

    如果我理解正确,那么我有几个想法给你如下:

    History.php

    我看到它有 2 个独立的部分与它无关:

    • 在第一个 if / else 中,您依赖 $_POST['SelectedValue'] 变量来定义一个查询来获取表格上显示的数据。

    • 其余代码用于获取下拉菜单的数据。一世 认为这段代码应该在另一个文件中。

    HistoryControl.js

    我认为这段代码不是很正确:data: {'SelectedValue =': value}。因为当您在 ajax 调用 History.php 文件时分配数据时,变量名称将是 $_POST['SelectedValue='] 所以在 if (isset($_POST['SelectedValue'])) 中将始终返回 false 。这会导致意想不到的结果。

    像这样编辑它:

    $.ajax({
        url: "../Model/History.php",
        type: "POST",
        data: { 'SelectedValue': value }, // remove the '=' character
        success: function () {
            location.reload();
        }
    });
    

    【讨论】:

    • 您正确理解了这个问题,并且帮助了很多! - 我发布了一个更新的工作版本谢谢你的帮助!
    • @BjarkeSkriverVilladsen 我已经看到您更新的代码。我认为您不需要 PHP 会话。这是我的建议,你可以试试这个link
    • 谢谢哥们!我一直在看你的代码,我有一些很好的想法!
    【解决方案2】:

    您如何使用 PHP 会话变量,如下所示:

    if (isset($_POST['SelectedValue'])) {
      $_SESSION['SelectedValue'] = $_POST['SelectedValue'];
      $sql = "SELECT * FROM [CampaignModule].[dbo].[RetailCampaign] WHERE CampaignNo <> '' AND 
    CustomerCountryCode like 'DK' ORDER BY ID DESC"
    }else {
      $_SESSION['SelectedValue'] = "";
      $sql = "SELECT * FROM [CampaignModule].[dbo].[RetailCampaign] WHERE 
    CampaignNo <> '' ORDER BY 
    ID DESC";
    }
    

    然后您可以使用会话变量来预选选项:

    echo '<select name="Filter" id="FilterSelect" class="form-control">
    <option>Choose Country Filter</option>';
    while ($row = sqlsrv_fetch_array($stmtFilter, SQLSRV_FETCH_NUMERIC)) {
      if($row[0] == $_SESSION['SelectedValue']){
       echo "<option value='$row[0]' selected>$row[0]</option>";
      }else{
       echo "<option value='$row[0]'>$row[0]</option>";
      }
    }
    echo '</select>';
    

    【讨论】:

    • 这是一种我没有想过的方法——在我第一次尝试时它似乎不起作用,但我一定会尝试更多!无论如何,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-13
    相关资源
    最近更新 更多