javascript - 选择更改时更改 SQL 语句

标签 javascript php jquery html sql-server

我有两个 div

第一个 div

具有输入,例如checkboxselect

<div>Events Selection</div>
Events <input type="checkbox" id="Option-1" checked="true">
Leaves <input type="checkbox" id="Option-2" checked="true">
Meetings <input type="checkbox" id="Option-3" checked="true">
Travels <input type="checkbox" id="Option-4" checked="true">

<div>Station Selection</div>           
<select id="Filters1">
<option value="0">All Stations</option>
<option value="1">Main Station</option>
<option value="2">Sub Station</option>
<option value="3">Sub Station Main Office</option>
</select>

第二个 div

有一个 SQL 语句 $sql = "SELECT * FROM events"; 我想回显所有那些来自 First div 的检查和选择的选项。

所以,我的问题是如何在 First div 中的选择或复选框发生变化时动态更改 SQL 语句。

喜欢:当页面加载时,它应该是这样的:

$sql = Select * From events Where (every checkboxes are 
checked and `All Stations` are selected.)

当用户想要从 First div 中过滤结果时,$sql 语句应该更改为用户选择和检查的内容。

喜欢:我想通过 Main Station 选择检查 EventsMeetings 复选框,所以现在我想要 $ sql 语句应该更改为我在 Second div 中的选择。

最佳答案

首先使用参数化查询,不要动态构造它们。关于 MSDN 的示例和解释.

编写将接收 value 的存储过程选择的选项,并会带给你你需要的数据。例如:

CREATE PROCEDURE dbo.getevents
    @value int
AS
SELECT * 
FROM events
WHERE somecolumn = @value

这是简化版,我猜你需要一些if类似 IF @value = 0...SELECT this ... IF @value = 1 的语句

在这种情况下,您可以使用:

$sql = "EXEC dbo.getevents ?";
$stmt = sqlsrv_query($conn, $sql, array($value));

然后获取结果并将其显示在您的页面上。

编辑#1

使用 XAMP 和 SQL Server 2014

免责声明:我发布此代码仅用于演示目的。参数以字符串形式传递,没有样式,可能有些错误。

我安装了 XAMP。下载 sqlsrv库,在 php.ini 中启用它们.

我得到了带有数据库的本地 SQL Server Test . SQL Server 有一个名为 sqldev 的实例.我的计算机名称是 workshop .所以,而不是 SERVER\INSTANCE应该是 workshop\sqldev .而不是 DATABASE - Test .这就是我写的连接。

一开始我是这样创建表的:

CREATE TABLE dummy (
    id int identity(1,1),
    [Desc] nvarchar(max),
    [Type] nvarchar(100)
)

INSERT INTO dummy VALUES
('Do something already','Events'),
('Congrats!','Events'),
('Meet up at six PM','Meetings'),
('To Amsterdam','Travels'),
('goodbye!','Leaves')

表格包含一些可以玩的虚拟数据。

下一步:

https://jquery.com/download/下载jQuery (我用了 jquery-3.1.1.js )

index.php

<html>
<head>
    <script src="jquery-3.1.1.js"></script>
    <style>
        table {
            width:20%
        }
        table, td, th {
            border-collapse: collapse;
            border: 1px solid gray;
        }
    </style>
</head>
<body>
    <div>Events Selection</div>
    Events <input type="checkbox" id="option" class="options" name="options[]" value="Events"> 
    Leaves <input type="checkbox" id="option"  class="options" name="options[]" value="Leaves">
    Meetings <input type="checkbox" id="option" class="options" name="options[]" value="Meetings">
    Travels <input type="checkbox" id="option" class="options" name="options[]" value="Travels">
    <div id="response"></div>

    <script>

    $('input:checkbox').click(function() {

    $.ajax({
        url: "sql_page.php",
        type: "post",
        data: $('.options:checked').serialize(),
        success: function(data) {
        $('#response').html(data);
        }
    });

    });

    </script>
</body>
</html>

sql_page.php

<?php
header('Content-Type: text/html; charset=utf-8');
$serverName = "SERVER\INSTANCE";
$connectionInfo = array("Database"=>"DATABASE");
$conn = sqlsrv_connect( $serverName, $connectionInfo);

if(isset($_POST['options'])) {

    if( $conn === false ) {
        echo "Unable to connect.</br>";
        die( print_r( sqlsrv_errors(), true));
    }

    $values = $_POST['options'];
    $valuelist = "'" . implode("', '", $values) . "'";
    $tsql = "SELECT * FROM dummy WHERE [Type] IN (".$valuelist.");";

    $stmt = sqlsrv_query($conn, $tsql);

    if( $stmt === false ) {
        echo "Error in executing query.</br>";
        die( print_r( sqlsrv_errors(), true));
    }

    echo "<table>";
    while ($obj = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_NUMERIC)) {
    echo "<tr>
            <td>".$obj[0]."</td>
            <td>".$obj[1]."</td>
            <td>".$obj[2]."</td>
        </tr>\n";
    }
    echo "</table>";

    sqlsrv_free_stmt( $stmt);
    sqlsrv_close( $conn );
}
?>

那我继续index.php在我的浏览器中:

how it works

如果您使用的是 MySQL,则需要使用其他库和命令,但它们与我写的类似。主要思想是连接到数据库并运行一些带参数的查询,它是一个 sql_page.php。主意。

index.php部分将 Ajax 请求发送到 sql_page.php单击复选框时。然后在带有 id=response 的 div 中显示来自此页面的数据(从 SQL Server 获得) .

编辑#2

使用 EasyPHP Devserver 16.1.1here 下载

我在默认文件夹中安装了 EasyPHP,启动它,转到 http://127.0.0.1:1111 , 在端口 8888 上启动 Apache + PHP , 启动了 MySQL。

我创建了一个名为 air-hr 的数据库, 名为 events 的表在里面。下表的脚本和结构:

CREATE TABLE `events` (
  `eventid` int(11) NOT NULL,
  `eventname` varchar(100) NOT NULL,
  `eventcategory` varchar(100) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

INSERT INTO `events` (`eventid`, `eventname`, `eventcategory`) VALUES
(1, 'Go now!', 'Leaves'),
(2, 'Meet some new people', 'Meetings'),
(3, 'Travel to Amsterdam', 'Travels'),
(4, 'PARTY HARD!', 'Events');

我还创建了用户 test可以连接到数据库并从表中选择。

我在 C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www 中创建了 2 个文件项目文件夹(它们的描述如下)并复制jquery-3.1.1.js .

index.php 和上面一样

sql_page.php

<?php
header('Content-Type: text/html; charset=utf-8');

if(isset($_POST['options'])) {

    $values = $_POST['options'];
    $valuelist = "'" . implode("', '", $values) . "'";
    $query = "SELECT * FROM events WHERE eventcategory IN (".$valuelist.");";

    $link = mysqli_connect("localhost", "test", "testpass", "air-hr");
    if (!$link) {
        echo "Error: Unable to connect to MySQL." . PHP_EOL;
        echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;
        echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;
        exit;
    }

    echo "<table>";
    if ($result = mysqli_query($link, $query)) {
        while ($row = mysqli_fetch_row($result)) {
            echo "<tr>
                <td>".$row[0]."</td>
                <td>".$row[1]."</td>
                <td>".$row[2]."</td>
            </tr>\n";
        }
        mysqli_free_result($result);
    }
    echo "</table>";

    mysqli_close($link);
}

?>

结果在这里:

easyphp

希望对你有帮助!

关于javascript - 选择更改时更改 SQL 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40068536/

相关文章:

javascript - 根据第一个值在第二个 Select2 下拉列表中显示选项

javascript - ASP.NET MVC 5 ajax 错误 statusText 始终为 "error"

php - WHMCS支付网关: recurring but not credit card

php - 在 php 后台运行控制台应用程序的最佳方法是什么?

javascript - 在加载和更改时执行 jQuery 函数

javascript - 有人已经编写过 JavaScript 版本的 Zend Validators 了吗?

javascript - angular js渲染如果

javascript - react : How to redirect

javascript - React Native 抛出 ' 6 stack frames were collapsed.' 错误

php - INSERT 语句不起作用! (PHP+MYSQL)