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-Key: 588236

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

Printed on: April 18, 2024 at 09:04 o'clock

Member: falscher-sperrstatus
falscher-sperrstatus Jul 16, 2020 at 20:28:26 (UTC)
Goto Top
sieht auf den ersten Blick ok aus zumindest die query, was sagt denn die Ausgabe direkt in der cli oder per phpmyadmin?
Member: em-pie
em-pie Jul 16, 2020 at 20:38:58 (UTC)
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
Member: ottinho
ottinho Jul 16, 2020 updated at 21:30:11 (UTC)
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
Member: juhu01
juhu01 Jul 17, 2020 at 06:25:11 (UTC)
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
Member: em-pie
em-pie Jul 17, 2020 at 07:23:03 (UTC)
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