mrroyal
Goto Top

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

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

Content-ID: 588236

Url: https://administrator.de/contentid/588236

Ausgedruckt am: 24.11.2024 um 16:11 Uhr

certifiedit.net
certifiedit.net 16.07.2020 um 22:28:26 Uhr
Goto Top
sieht auf den ersten Blick ok aus zumindest die query, was sagt denn die Ausgabe direkt in der cli oder per phpmyadmin?
em-pie
em-pie 16.07.2020 um 22:38:58 Uhr
Goto Top
Moin,

Baue mal in Zeile 23 eine
Echo $v <br> $a ;
Und in Zeile 32 ein
Echo <br>$sql;
Ein. Dann siehst du, ob die Variablen überhaupt einen Inhalt haben


Gruß
em-pie
ottinho
ottinho 16.07.2020 aktualisiert um 23:30:11 Uhr
Goto Top
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
juhu01
juhu01 17.07.2020 um 08:25:11 Uhr
Goto Top
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
em-pie
em-pie 17.07.2020 um 09:23:03 Uhr
Goto Top
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 -.-

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)";  
sind beide Variablen gesetzt, wird nur danach gesucht, ist eine der beiden gesetzt, wird auch nur nach dieser gesucht.
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.
- Wildcard im nicht gesetzem Teil als Defaultwert (Performance)

- Abfrage einbauen (zu empfehlen)


Servus