Undefined Index umgehen (array und abfrage)

bazlivec

Mitglied
Hallo,

bei einer WHERE .. IN .. Abfrage befinden sich die Variablen in einem Array (10 Felder). Es müssen nicht alle Felder genutzt werden, also ist auch eine Abfrage mit nur zwei Bedingungen/Variablen möglich.
Es funktioniert auch alles, doch meckert das Script natürlich rum, wenn in den Feldern 2-9 dann nichts steht.
Kann man das irgendwie anders umgehen als mit einer if-Abfrage (if feld[2]==null ..)?
Oder kann man die Meldung "Undefined Index X" ausblenden, da das Script ja an sich funktioniert?

MfG
bazlivec
 
Ich versteh zwr nicht was du machst, aber du kannst den array doch kürzen
PHP:
$trimmedArray=array_filter($myArray);
 
Ich vermute er holt Werte aus der DB welche eventuell leer sind und befüllt ein Array damit.
Wenn man dann auf das Array zugreifen möchte kann es sein das dieses eben undefiniert ist.

Hatte gestern ein ähnliches Script erarbeitet. Wenn man die 10 Spalten mit NULL also 0 vordefiniert wird das Array auch mit 0 befüllt. Soll heissen das Array wird vollständig in deinen Fall bis 10 durch indiziert.

Ich vermute aber das sich das durchaus einfacher realisieren lässt.

EDIT: oder eben einfach mit isset() prüfen.
 
Zuletzt bearbeitet:
Also das hier ist meine Abfrage (Die Felder bzw. Variablen werden per URL übergeben und stammen aus einer Mehrfach-Select-Box:

PHP:
<? if ( isset($_GET['feld']) ){

  $feld= $_REQUEST['feld'];

  $abfrage = mysql_query("SELECT * FROM Sheet01 WHERE (
(b1 IN ('$feld[0]','$feld[1]','$feld[2]','$feld[3]')) + 
(b2 IN ('$feld[0]','$feld[1]','$feld[2]','$feld[3]')) + 
(b3 IN ('$feld[0]','$feld[1]','$feld[2]','$feld[3]')) + 
(b4 IN ('$feld[0]','$feld[1]','$feld[2]','$feld[3]'))) >= 2 ORDER BY Name DESC") or die (mysql_error());

...

Wenn an der Stelle feld[2] z.B. kein Inhalt steht, gibt es die Meldung "Undefined Index ..".
Das will ich umgehen! :)
 
1) Leere Werte ausfiltern
2) Die Werte mit ' umschliessen
3) Aus den Werten eine Liste erstellen
4) SQL zusammensetzen

Das ganze natürlich ungetestet.
PHP:
//Array mit nur abgefüllten werten erstellen
$felder= array_filter($_REQUEST['feld']);
//Den Array um die Anführungszeichen erweitern
foreach($felder as &$feld) $feld = "'{$feld}'";
//Die Inhalte in eine Liste setzen
$list = implode(',', $felder);

$sql = "
SELECT * 
FROM Sheet01 
WHERE 
	((b1 IN ({$list})) + (b2 IN ({$list})) + (b3 IN ({$list})) + (b4 IN ({$list}))) >= 2
ORDER BY Name DESC";

$abfrage = mysql_query($sql) or die (mysql_error());
 
Was spricht dagegen? Eigentlich nur eines: Bequemlichkeit ;-)

Ein guter Programmierer prüft alle eventuellen Probleme. Nicht nur die, die sich einfach prüfen lassen.
 
Zuletzt bearbeitet:
Zurück