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:
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:
Hoffnung, dies hilft Ihnen!
Verwenden Sie Ajax, um die Post-Elemente zu senden, dann Ihre where-Anweisung sollte foreach sein post_name = post_value –
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. –