在更改seclection时更改SQL语句

时间:2016-10-16 08:49:50

标签: javascript php jquery html sql-server

我有两个divs

首先div

inputs checkboxselect。{/ p>

<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语句更改为用户选择并检查的内容。

赞:我想通过Events选项查看MeetingsMain Station复选框,现在我希望$sql语句应该更改为我的选择Second div

2 个答案:

答案 0 :(得分:1)

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

编写将接收所选选项value的存储过程,并为您提供所需的数据。 F.e:

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

中启用它们

我得到了带有数据库Test的本地SQL Server。 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') 。这就是我写的连接。

首先我创建这样的表:

jquery-3.1.1.js

表包含一些要播放的虚拟数据。

下一步:

https://jquery.com/download/下载 jQuery (我使用<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>

的index.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 );
}
?>

sql_page.php

index.php

然后我在浏览器中继续sql_page.php

how it works

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

sql_page.php部分在单击复选框时向id=response发送Ajax请求。然后使用http://127.0.0.1:1111在div中显示此页面中的数据(来自SQL Server)。

修改#2

使用从here下载的EasyPHP Devserver 16.1.1

我在默认文件夹中安装了 EasyPHP ,启动它,转到8888,在端口air-hr上启动了Apache + PHP,启动了MySQL。

我创建了一个名为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

另外,我创建了可以连接到DB并从表中选择的用户C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www

我在jquery-3.1.1.js项目文件夹中创建了2个文件(其说明如下)并复制<?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); } ?>

index.php 如上所述

sql_page.php

<?php $a = 1380; ?>
    <script>
<?php $b = document.write(month); ?>
    </script>
<div id="firstshow">

    <div id="test1">
       <div class="col-xs-5 text-right">
       <b><?php echo $a/$b; ?> &euro;/month</b><!-- the result I wish to divide $a from $b -->
       </div>
    </div>

    <div class="dropdown">
       <button class="btn btn-default dropdown-toggle" type="button" data-toggle="dropdown"><b class="pull-left">36</b>per month
       <i class="fa fa-chevron-down pull-right" aria-hidden="true"></i></button>
       <ul class="dropdown-menu">
          <li><a href="#">12</a></li>
          <li><a href="#">24</a></li>
          <li><a href="#">36</a></li>
       </ul>
    </div>

</div>

结果在这里:

easyphp

希望这能帮到你!

答案 1 :(得分:0)

这里是你的代码

首先命名您的输入并选择如下:

<form action="sql_page.php" method="post">
 <div>Events Selection</div>
   Events <input type="checkbox" id="Option-1" name="Option-1" checked="true">
   Leaves <input type="checkbox" id="Option-2" name="Option-2" checked="true">
   Meetings <input type="checkbox" id="Option-3" name="Option-3" checked="true">
   Travels <input type="checkbox" id="Option-4" name="Option-4" checked="true">

 <div>Station Selection</div>           
  <select id="Filters1" name="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>
  <input type="submit" id="submit">
</form>

并在你的sql_page.php这里php代码

if (isset($_POST)) {
foreach ($_POST as $col => $value) {

    $whare .= "$col = '$value' AND ";
}
$whare = rtrim($whare,'AND ');


$sql = "Select * From events Where $whare";


}