2016-10-16 6 views
2

Ich habe zwei divs.Change SQL-Anweisung bei Änderung am seclection

Erste div

Hat inputs wie checkbox und 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> 

Zweite div

Hat eine SQL-Anweisung $sql = "SELECT * FROM events";, die ich alle diese geprüft und ausgewählten Optionen aus First div Echo möchten.

Also meine Frage ist, wie die SQL-Anweisung dynamisch ändern, wenn die Auswahl oder das Kontrollkästchen in First div geändert.

Like:

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

und wenn ein Benutzer das Ergebnis von First div filtern will dann die $sql Anweisung geändert werden soll, was der Benutzer ausgewählt und geprüft: Wenn die Seite geladen wird, es so sein sollte.

wie: Ich möchte die Events und Meetings Checkbox mit Main Station Auswahl überprüfen, so jetzt möchte ich, dass die $sql Aussage Änderung der Second div meiner Auswahl sein sollte.

+0

Verwenden Sie Ajax, um die Post-Elemente zu senden, dann Ihre where-Anweisung sollte foreach sein post_name = post_value –

+0

Danke für Ihren Kommentar, liebe @SamirNabil, aber ich habe Pech :) weil ich im zweiten Semester bin und kein Experte in diesem. Ich kann Daten von MySQL holen, aber ich kann die '$ sql'-Anweisung bei Änderung nicht ändern, und wenn Sie mich dann leiten, würde ich mich freuen. Vielen Dank. –

Antwort

0

hier Sie Code

Erstgenannten Ihre Eingaben und wählen Sie wie folgt:

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

und in Ihrem sql_page.php hier PHP-Code

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

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


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


} 
+0

Danke @Samir. Ich habe und Fehler 'Undefinierte Variable: whare' –

+0

add vor foreach' $ wo = '' 'aber ist geben Sie Ihre richtige SQL-Anweisung? –

+0

Sorry, ich konnte es nicht bekommen. Kannst du es in deiner Antwort beheben? Vielen Dank. –

1

Beim ersten Gebrauch parametrisierte Abfrage, don Konstruiere sie nicht dynamisch. Beispiele und Erläuterungen zu MSDN.

Schreiben Sie die gespeicherte Prozedur, die value der ausgewählten Option erhalten wird und Ihnen die Daten bringen wird, die Sie benötigen. Fe:

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

Es Version vereinfacht ist, ich denke, Sie brauchen etwas if Aussage wie IF @value = 0...SELECT this ... IF @value = 1

In diesem Fall können Sie verwenden:

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

Und dann Ergebnisse holen und zeigen Sie es auf Ihrem Seite.

EDIT # 1

Mit XAMP und SQL Server 2014

Haftungsausschluss: Ich poste diesen Code nur zu Demonstrationszwecken. Parameter werden als String übergeben, kein Styling, vielleicht einige Fehler.

Ich habe eine XAMP installiert. Heruntergeladene sqlsrv Bibliotheken, aktivieren Sie sie in php.ini.

Ich habe lokalen SQL Server mit Datenbank Test. SQL Server hat eine Instanz mit dem Namen sqldev. Mein Computername lautet workshop. Also, anstelle von SERVER\INSTANCE sollte workshop\sqldev sein. Anstelle von DATABASE - Test. Das habe ich geschrieben, um mich zu verbinden.

Zunächst erstelle ich Tabelle wie folgt aus:

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

Tabelle enthält einige Dummy-Daten zu spielen.

Der nächste Schritt:

Herunterladen jQuery von https://jquery.com/download/ (I verwendet 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); 
} 
?> 

Dann gehe ich auf index.php in meinem Browser:

how it works

Wenn Sie MySQL verwenden Sie einen anderen Bibliotheken benötigen und Befehle zu verwenden, aber sie sind ähnlich zu dem, was ich geschrieben habe. Die Hauptidee besteht darin, eine Verbindung zur Datenbank herzustellen und eine Abfrage mit Parametern auszuführen, es ist eine sql_page.php Idee.

Der Teil index.php sendet die Ajax-Anforderung an sql_page.php, wenn die Kontrollkästchen angeklickt werden. Und dann zeigen Sie die Daten von dieser Seite (die von SQL Server stammt) in div mit id=response.

EDIT # 2

Mit EasyPHP devserver 16.1.1 von here

dowloaded I EasyPHP in Standardordner installiert haben, starten Sie es, ging zu http://127.0.0.1:1111 begann Apache + PHP auf Port 8888, gestartet MySQL.

Ich erstelle eine DB mit dem Namen air-hr, Tabelle mit dem Namen events drin. Das Skript und die Struktur der Tabelle unten:

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

Auch erstelle ich Benutzer test, die auf DB eine Verbindung herstellen können, und wählen Sie aus der Tabelle.

Ich habe 2 Dateien in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www Projektordner erstellt (ihre Beschreibung ist unten) und kopieren jquery-3.1.1.js.

Index.php wie oben und

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

?> 

und Ergebnisse hier:

easyphp

Hoffnung, dies hilft Ihnen!

+0

Vielen Dank, aber ich bin im zweiten Semester, also ist es ein bisschen schwierig für mich zu bekommen. Kannst du bitte erklären, wie, ein bisschen. Ich meine, ich habe die Form und Divs. Wie kann ich die Filter und die $ SQL-Anweisung tatsächlich verbinden? –

+0

Ich habe eine verbundene Datenbank mit $ Conn und es funktioniert gut mit statischen $ SQL-Anweisung, aber nicht mit dynamischen $ SQL-Anweisung wie die Frage. –

+0

Vielen Dank @gofr1, ich würde mich freuen. :) –

Verwandte Themen