Hallo PHP-Neuling,
$SUCHE = $db->query("SELECT ID, KERN_FELD1, ..... WHERE ");
$SUCHE .= implode("OR ", $selectvar);
Herzlich willkommen beim Juggler Of Death - PHP. Mutmaßlich gab's da eine Runtime-Warning oder Notice, keine Ahnung, hab ich jetzt nicht ausprobiert. Jedenfalls liefert $db->query(...) ein mysqli_statement mysqli_result Objekt zurück. Und offensichtlich ist der String-Wert dieses Objekts ein Leerstring. Das kann einfach am Objekt liegen, oder liegt daran, dass Du ein WHERE ohne Bedingung hingeschrieben hast, was ein SQL Fehler ist. Die query-Methode liefert dann FALSE an Stelle eines Objekts Ergebnisses.
Deshalb steht nach der Verkettung nur noch die Like-Bedingung da. Du musst erst verketten und dann das Statement-Objekt erzeugen. Und Du musst prüfen, ob Dir die Query-Methode FALSE geliefert hat.
$sql = "SELECT ID, KERN_FELD1, ..... WHERE " . implode("OR ", $selectvar);
$SUCHE = $db->query($sql);
if ($SUCHE === FALSE) {
// Fehlerbehandlung, Query-Aufruf ist gescheitert,
// weitere Operationen mit $SUCHE schlagen fehl
}
Was aber das $db für den Aufbau zur Datenbank dort zu suchen hat habe ich noch nicht verinnerlicht.
mysqli_real_escape_string braucht das mysqli-Objekt, das in $db steht, weil es nur eine Hülle um den Methodenaufruf auf dem Objekt ist, und weil im Objekt auch Optionen sind, die das escape-Verhalten beeinflussen. Du kannst statt des Funktions-Wrappers auch direkt die Methode verwenden, und das "real" ist ein Relikt aus mysql-Zeiten. Unter mysqli sind escape_string und real_escape_string synonym.
$selectvar[] = "KERN_FELD1 LIKE '"
. $db->escape_string($_POST['iKern_FELD1'])
. "% '";
Aber: Das ist immer noch nicht korrekt. Die Operatoren = und LIKE haben in SQL eine bestimmte Semantik, die insbesondere bei Columns mit fester Länge von Bedeutung ist. Der Operator = ignoriert abschließende Leerstellen, in beiden Operanden. Der Operator LIKE tut das nicht, für ihn ist jedes Leerzeichen signifikant. Eine Suche nach 'foo% '
erwartet also einen Spalteninhalt, der explizit auf eine Leerstelle endet. Bei VARCHAR-Spalten ist das aber zumeist nicht der Fall. Die Leerstelle hinter dem % muss weg.
//<?php IF ($Gesucht =='ja') { ?>
<?php while ($Ergebnis = $SUCHE->fetch_object()) { ?>
<input type="text" name="" value="<?= $Ergebnis->KERN_FELD1;?>">
<?php } ?>
//<? } ?>
Zwei Hinweise: Wenn Du <?= ... ?> verwendest, dann setze kein Semikolon. Es schadet nicht, soweit ich das erkennen kann, aber es braucht da auch nicht hin. In einem <?= ?> Block steht ein Wert (ein Ausdruck), kein Statement.
Wenn man intensiv zwischen Code und HTML hin- und herwechselt, sollte man eher die alternative Syntax für Kontrollstrukturen verwenden. Die geschweiften Klammern gehen im Gewusel gerne unter.
// Kommentare außerhalb von PHP funktionieren übrigens nicht, das // würde zum Client geschickt. Du musst innerhalb des PHP Blocks auskommentieren.
<?php // IF ($Gesucht =='ja'): ?>
<?php while ($Ergebnis = $SUCHE->fetch_object()): ?>
<input type="text" name="" value="<?= $Ergebnis->KERN_FELD1?>">
<?php endwhile; ?>
<?php // endif; ?>
Also, es wird geladen aber nichts angezeigt / ausgelesen
Debugging, debugging, debugging. Den Code anzustarren hilft oft nicht weit genug.
Ohne Debugger muss man den Code mit echos spicken, und dafür sorgen, dass PHP alle Meldungen ausgibt (error_reporting und display_errors, aber das hatten wir doch eigentlich schon).
Rolf
sumpsi - posui - obstruxi