Изменение инструкции SQL при изменении на выделение

У меня двое divs.

Первый div

Имеет , inputsкак checkboxи select.

<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.

Итак, мой вопрос заключается в том, как динамически изменять инструкцию SQL при изменении выбора или флажка First div.

Например: когда страница загружается, она должна выглядеть примерно так:

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

и когда пользователь хочет отфильтровать результат, First divтогда $sqlоператор должен быть изменен на то, что пользователь выбрал и проверил.

Например: я хочу проверить флажок Eventsи Meetingsфлажок с Main Stationвыбором, так что теперь я хочу, чтобы $sqlоператор был изменен на мой выбор в Second div.

javascript,php,jquery,html,sql-server,

2

Ответов: 2


1

Сначала используйте параметризованный запрос, не создавайте их динамически. Примеры и объяснения в MSDN .

Напишите хранимую процедуру, которая будет получать valueвыбранную опцию и принесет вам нужные данные. Fe:

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));

А затем получите результаты и покажите их на своей странице.

EDIT # 1

Использование XAMP и SQL Server 2014

Отказ от ответственности: я публикую этот код только для демонстрационной цели. Параметры передаются как строка, не стилизация, а может быть, некоторые ошибки.

У меня установлен XAMP . Загруженные sqlsrvбиблиотеки, включите их php.ini.

Я получил локальный SQL Server с тестом sqldev. SQL-сервер имеет экземпляр с именем workshop. Мое имя компьютера SERVERINSTANCE. Так, а не workshopsqldevдолжно быть DATABASE. Вместо 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 из https://jquery.com/download/ (я использовал jquery-3.1.1.js)

<html> <head> <script src = "jquery-3.1.1.js" > </ script> <style> таблица { width : 20% } table , td , th { border-collapse : collapse ; граница : 1px сплошной серый ; } </ style> </ head> <body> <div> Выбор событий </ div> События <input type = "checkbox" id = "опция" class = "options" name = "options []" value = "Events " > Листы <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>

<?php
header('Content-Type: text/html; charset=utf-8');
$serverName = "SERVERINSTANCE";
$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>
";
    }
    echo "</table>";

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

index.php

sql_page.php

Затем я продолжаю index.phpв своем браузере:

как это устроено

Если вы используете MySQL, вам нужны другие библиотеки и команды для использования, но они похожи на то, что я написал. Основная идея - подключиться к базе данных и запустить некоторый запрос с параметрами, это sql_page.phpидея.

index.phpЧасть отправляет запрос Ajax к sql_page.phpкогда Флажки щелкнул. А затем покажите данные с этой страницы (полученной от SQL Server) в div с id=response.

EDIT # 2

Использование EasyPHP Devserver 16.1.1 dowloaded от сюда

Я установил EasyPHP в папку по умолчанию, запустил его, поехал 8888, начал Apache + PHP на порт air-hr, запустил 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

Также я создаю пользователя, testкоторый может подключаться к БД и выбирать из таблицы.

Я создал 2 файла в C:Program Files (x86)EasyPHP-Devserver-16.1eds-wwwпапке проекта (их описание ниже) и скопируйте 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>
";
        }
        mysqli_free_result($result);
    }
    echo "</table>";

    mysqli_close($link);
}

?>

И результаты здесь:

EasyPHP

Надеюсь, это поможет вам!


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";


}
JavaScript, PHP, JQuery, HTML, SQL-сервер,
Похожие вопросы