PHP SQL mit 2 Bedingungen verknüpfen
Hallo zusammen,
ich versuche schon seit einigen Stunden meine Datenbank über 2 Bedingungen zu filtern.
Jedoch ohne Erfolg!
Ihr könnt mir bestimmt helfen bzw. mir sagen wo mein Fehler liegt.
Geplant ist das ich über 2 verschiedene Dropdownlisten eine Auswahl sowohl einer
Artikelnummer und auch einer Variante machen kann.
Der Code läuft wenn zumindest eine Bedingung erfüllt wird.
Aber die zweite Bedingung wird nicht berücksichtigt bzw. habe ich das Gefühl, dass sich
eine Bedingung immer wieder löscht, wenn die andere Bedingung gewählt wird.
Das liegt bestimmt an den beiden "show-Funktionen".
Wie muss ich diese zusammenfassen, damit beide Werte ($a und $v) richtig übergeben werden?
Danke vielmals
Hier nun der Code meiner index.html und der db.php:
index.html
db.php
ich versuche schon seit einigen Stunden meine Datenbank über 2 Bedingungen zu filtern.
Jedoch ohne Erfolg!
Ihr könnt mir bestimmt helfen bzw. mir sagen wo mein Fehler liegt.
Geplant ist das ich über 2 verschiedene Dropdownlisten eine Auswahl sowohl einer
Artikelnummer und auch einer Variante machen kann.
Der Code läuft wenn zumindest eine Bedingung erfüllt wird.
Aber die zweite Bedingung wird nicht berücksichtigt bzw. habe ich das Gefühl, dass sich
eine Bedingung immer wieder löscht, wenn die andere Bedingung gewählt wird.
Das liegt bestimmt an den beiden "show-Funktionen".
Wie muss ich diese zusammenfassen, damit beide Werte ($a und $v) richtig übergeben werden?
Danke vielmals
Hier nun der Code meiner index.html und der db.php:
index.html
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<script>
function showArtikel(str) {
if (str == "") {
document.getElementById("txtHint").innerHTML = "";
return;
} else {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("txtHint").innerHTML = this.responseText;
}
};
xmlhttp.open("GET","db.php?a="+str,true);
xmlhttp.send();
}
}
function showVariante(str) {
if (str == "") {
document.getElementById("txtHint").innerHTML = "";
return;
} else {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("txtHint").innerHTML = this.responseText;
}
};
xmlhttp.open("GET","db.php?v="+str,true);
xmlhttp.send();
}
}
</script>
</head>
<body>
<form>
<select name="Artikel" onchange="showArtikel(this.value)">
<option value="">Artikel auswaehlen:</option>
<option value="TX1080000">TX1080000</option>
<option value="TX1080100">TX1080100</option>
<option value="TX2020001">TX2020001</option>
<option value="TX2020101">TX2020101</option>
</select>
<select name="Variante" onchange="showVariante(this.value)">
<option value="">Variante auswaehlen:</option>
<option value="SHB">SHB</option>
<option value="INDKO">INDKO</option>
</select>
</form>
<br>
<div id="txtHint"><b>Artikeldaten werden hier aufgelistet...</b></div>
</body>
</html>
db.php
<!DOCTYPE html>
<html>
<head>
<style>
table {
width: 100%;
border-collapse: collapse;
}
table, td, th {
border: 1px solid black;
padding: 5px;
}
th {text-align: left;}
</style>
</head>
<body>
<?php
$a = $_GET['a'];
$v = $_GET['v'];
$con = mysqli_connect('xxxx');
if (!$con) {
die('Could not connect: ' . mysqli_error($con));
}
mysqli_select_db($con,"ajax_demo");
$sql="SELECT * FROM ArtikelDBTest WHERE Artikelnummer = '".$a."' AND Variante = '".$v."'";
$result = mysqli_query($con,$sql);
echo "<table>
<tr>
<th>ID</th>
<th>Artikelnummer</th>
<th>Variante</th>
<th>Preis</th>
</tr>";
while($row = mysqli_fetch_array($result)) {
echo "<tr>";
echo "<td>" . $row['ID'] . "</td>";
echo "<td>" . $row['Artikelnummer'] . "</td>";
echo "<td>" . $row['Variante'] . "</td>";
echo "<td>" . $row['Preis'] . "</td>";
echo "</tr>";
}
echo "</table>";
mysqli_close($con);
?>
</body>
</html>
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 588236
Url: https://administrator.de/contentid/588236
Ausgedruckt am: 24.11.2024 um 16:11 Uhr
5 Kommentare
Neuester Kommentar
Moin,
guck dir bitte unbedingt mal prepared statements an... Du bastelst dir da sonst ein schönes Sicherheitsdesaster zusammen.
Ist über PDO ein bisschen hübscher als per mysqli.
Viele Grüße
guck dir bitte unbedingt mal prepared statements an... Du bastelst dir da sonst ein schönes Sicherheitsdesaster zusammen.
Ist über PDO ein bisschen hübscher als per mysqli.
Viele Grüße
Hallo
"Der Code läuft wenn zumindest eine Bedingung erfüllt wird." FALSCH
Die SQL abfrage ergibt einen Treffer, wenn BEIDE Filter in Zeile 31 zutreffen.
Du wirst den SQL-Code dynamisch zusammenstellen müssen oder dein DB Model überdenken müssen.
Mögliche einfache Lösung:
- OR im SQL , Alternativ gewünscht. Dann funktionieren aber BEIDE zusammen nicht.
- Wildcard im nicht gesetzem Teil als Defaultwert (Performance)
- Abfrage einbauen (zu empfehlen)
Servus
"Der Code läuft wenn zumindest eine Bedingung erfüllt wird." FALSCH
Die SQL abfrage ergibt einen Treffer, wenn BEIDE Filter in Zeile 31 zutreffen.
Du wirst den SQL-Code dynamisch zusammenstellen müssen oder dein DB Model überdenken müssen.
Mögliche einfache Lösung:
- OR im SQL , Alternativ gewünscht. Dann funktionieren aber BEIDE zusammen nicht.
- Wildcard im nicht gesetzem Teil als Defaultwert (Performance)
- Abfrage einbauen (zu empfehlen)
Servus
Zitat von @juhu01:
Hallo
"Der Code läuft wenn zumindest eine Bedingung erfüllt wird." FALSCH
Die SQL abfrage ergibt einen Treffer, wenn BEIDE Filter in Zeile 31 zutreffen.
Stimmt, ich hatte da gar nicht soo genau drauf geachtet -.-Hallo
"Der Code läuft wenn zumindest eine Bedingung erfüllt wird." FALSCH
Die SQL abfrage ergibt einen Treffer, wenn BEIDE Filter in Zeile 31 zutreffen.
Du wirst den SQL-Code dynamisch zusammenstellen müssen oder dein DB Model überdenken müssen.
Es ginge auch...
WHERE
(Artikelnummer = '".$a."' OR ".$a. "IS NULL)
AND (Variante = '".$v."' OR .$v. "IS NULL)";
Man muss natürlich dafür sorgen, dass die variablen auch ein NULL beinhalten, ansonsten ginge ja noch ein NULLIF()
Mögliche einfache Lösung:
- OR im SQL , Alternativ gewünscht. Dann funktionieren aber BEIDE zusammen nicht.
s.o.- OR im SQL , Alternativ gewünscht. Dann funktionieren aber BEIDE zusammen nicht.
- Wildcard im nicht gesetzem Teil als Defaultwert (Performance)
- Abfrage einbauen (zu empfehlen)
Servus
Servus