tobmes
Goto Top

PHP Funktionen

Hi,

ich bin es mal wieder ;)

Ich habe jetzt glaube ich ein kleines Verständnisproblem mit Funktionen und Rückgabewerten

Ich hab diese beiden Funktionen:

protected function getMinBest() {
  //echo '<script type=text/javascript language=javascript> alert("Test") </script>'; 
  $sql = $this->_database->query("SELECT minBestand FROM MinBestand WHERE id=1");  
  //$result = mysqli_query($this->_database,$showMinBest);
  while ($showBestand = $sql->fetch_assoc()) {
    echo "Der mindest Bestand ist: ";  
    echo "<p>" . $showBestand['minBestand']. "</p>";  
  }
  //echo '<script type=text/javascript language=javascript> alert("Result=  '.$ergebnis.'") </script>'; 
  return ($showBestand);
}

und

protected function showStock() {
  $bestand = lager::getMinBest();
  $sql=$this->_database->query("SELECT ArtikelNr,Lagerort,Artikel,Bestand FROM Artikel WHERE Bestand < '$bestand'");  
  echo "<table border='1'>";  
  echo "<th>Artikel</th><th>Lagerort</th><th>Bestand</th>";  
  while($ergebnis = $sql->fetch_assoc()) {
    echo "<tr><td>" . htmlspecialchars($ergebnis["Artikel"]) . "</td>"  
    . "<td>" . htmlspecialchars($ergebnis["Lagerort"]) . "</td>"  
    . "<td>" . htmlspecialchars($ergebnis["Bestand"]) . "</td>"  
    . "</tr>";  
  }
  echo "</table>";  
}

Jetzt möchte ich den in getMinBest() ermittelten Wert gerne in der showStock-Funktion weiter verarbeiten. Diese soll mir dann alle Waren mit einem Bestand kleiner als dem Mindestbestand ausgeben. Doch das klappt so leider nicht. Wenn ich in der SQL-Abfrage die Variable durch eine Zahl ersetzte, dann klappt alles.

Was mache ich denn da Falsch? Danke euch schon mal für die Aufklärung

Gruß
-TobMes

Content-ID: 307650

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

Ausgedruckt am: 22.11.2024 um 22:11 Uhr

LordGurke
LordGurke 19.06.2016 um 18:45:26 Uhr
Goto Top
Wenn ich das richtig sehe, ist $showBestand was aus der getMinBest() zurückgegeben wird ein Array.
Verwendet wird es in showStock() aber wie eine reguläre Variable.
Du musst entweder in deiner SQL-Query $bestand['minBestand'] verwenden oder gleich dieses Array-Feld aus getMinBest() zurückliefern.

Bei der Gelegenheit sei der Hinweis auf http://php.net/manual/de/security.database.sql-injection.php noch gestattet - ist in deinen beiden Methoden offenbar ein eher überschaubares Risiko - aber mir kräuseln sich immer die Fußnägel wenn ich Variablen in SQL-Queries sehe ;)
tobmes
tobmes 19.06.2016 um 19:13:10 Uhr
Goto Top
Hi,

danke für die Hinweise. Werde ich mir auf jeden Fall mal anschauen. face-smile
Sheogorath
Sheogorath 19.06.2016 um 22:15:06 Uhr
Goto Top
Moin,

das Problem ist, du gibst bei deiner Funktion `getMinBest()` false zurück.

Die Funktion `fetch_assoc()` gibt dir immer die nächste Zeile zurück, bis alles gelesen ist, dann wir False zurück gegeben. (So die Dokumentation)

Deshalb bricht auch dein Schleife ab. Somit hat `$showBestand` auch im Rückgabewert false und du bekommst keine zufriedenstellende Antwort.

Deine Variable `$bestand` ist also auch false.

Ganz davon abgesehen ist `fetch_assoc()` schon "seit PHP 5.5.0 als veraltet markiert und wird in der Zukunft entfernt werden.". In Zeiten von PHP 7.0 also nicht wirklich zukunftsfähig ;)

Gruß
Chris