Array bleibt nach auslesen aus Datenbank Leer
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfragen
array
audi
ausgabe
boxen
code
datei
datensatz
datum
derzeitigen code
ergebnis
fehler
fehlermeldung
grad
mercedes
problem
schleife
stunden
weiteren code
zweiten tabelle
-
Hiho liebe Lima-Community
eins vorneweg: sry wenn ich nciht anworte, bin übers we weg und weis nicht ob ich antworten kann^^
Also hier mein Problem: Um immer alle MySQL-Abfragen in einer Datei zu haben schreibe ich immer alle abragen als function in einer datei.
Hat bis jetzt immer problemlos geklappt. Vll liegt es daran dass ich JOIN benutzt habe...
Die ausgabe soll später in einer verschachtelten Drop-Down-Box dargestellt werden.
Es kommen bei dem Code auch keine fehlermeldung, die dropdown-Box bleibt einfach leer...
Datei mit der datenbankfunktion
$db_table_prefix = $db_pref.\"__pre\"; $db_table_state = $db_pref.\"__state\"; function db_CountryPrefixes() { global $db_table_prefix; global $db_table_state; $id = 1; $sqlstring = \"SELECT * FROM $db_table_state AS a JOIN $db_table_prefix AS b ON a.stateid = b.prestate ORDER BY a.statepriority, b.prenr\"; $query = mysql_query($sqlstring) or die(\"Konnte die Länderprefixe nicht Laden! \".mysql_error()); while($resultLine=mysql_fetch_array($query)) { $return = array(); $return[\"id\"] = $id; $return[\"state\"] = $resultLine[\"statename\"]; $return[\"priority\"] = $resultLine[\"statepriority\"]; $return[\"prefix\"] = $resultLine[\"statepre\"]; $return[\"number\"] = $resultLine[\"prenr\"]; $id ++; } }
Datei in der die Datenbankfunktion gebraucht wird:
<?php $prefix_data = db_CountryPrefixes(); print \" <form name=\'thisform\' action=\'\".$_SERVER[\'PHP_SELF\'].\"\' method=\'post\' enctype=\'text/plain\'> <select> <optgroup label=\'Nichts Gewählt\'> <option></option> \"; for($id = 1; $id <= count($prefix_data[\'id\']) ; $id++) { if($prefix_data[\'state\'] != $laststate) { $laststate = $prefix_data[\'state\']; print \"</optgroup><optgroup label=\'$laststate\'>\"; } print \"<option value=\'\".$prefix_data[\'prefix\'].$prefix_data[\'number\'].\"\'>\".$prefix_data[\'number\'].\"</option>\"; } //Angehängt: Test Dropdownausgabe print \" </optgroup> <optgroup label=\'German Cars\'> <option value =\'mercede\'>Mercedes</option> <option value =\'audi\'>Audi</option> </optgroup> </select> </form> \"; ?>
Ich bedanke mich schonmal^^
Beitrag geändert: 7.3.2008 6:04:11 von mergener -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Gibt er nen fehler aus oder kommt da einfach mal nix???
sowas hilf auchmal weiter.
MfG
The-EDEN -
Keine Fehlermeldung da sie ja leer ist!
-
ich nehme mal an, dass du schon überprüft hast, ob das zurückgebene Array wirklich leer ist (zB mit print_r).
wenn ich mir den Code ansehe, finde ich zwei Probleme, an denen es liegen könnte. Zum einen machst du ja einen JOIN über die stateid der ersten Tabelle a und prestate der zweiten Tabelle b. Diese werden ja für die Zuordnung, für das Zusammenfassen benutzt. Jede Reihe enthält so die Daten beider Tabellen, für die diese beiden Werte übereinstimmen.
Hast du dort keine Übereinstimmungen, solltest du auch keine Ergebnisse erhälten.
Zum anderen erstellst du ein Array $return, welches jedoch nie zurückgegeben wird. Es fehlt also
return $return;
nach deiner While-Schleife.
Dies sollte wohl das Problem sein.
Ein weiteres Problem bekommst du aber auch noch durch dein
innerhalb der While-Schleife. Damit wird jedesmal ein neues Array erzeugt und das alte überschrieben. Somit kannst du mit dem derzeitigen Code sowieso nur maximal einen Datensatz erhalten.$return = array();
Mit dem folgenden Code sollte dies funktionieren:
<?php function db_CountryPrefixes() { ... $id = 0; $return = array(); ... while($resultLine=mysql_fetch_array($query)) { $return[$id] = array(); $return[$id][\"state\"] = $resultLine[\"statename\"]; $return[$id][\"priority\"] = $resultLine[\"statepriority\"]; $return[$id][\"prefix\"] = $resultLine[\"statepre\"]; $return[$id][\"number\"] = $resultLine[\"prenr\"]; $id++; } return $return; } ?>
Bei ... hab ich einfach nur bestimmtes weggelassen, was wie in deinem Code erhalten bleibt.
Du musst dann natürlich den weiteren Code soweit anpassen, dass du über die ID der Einträge auf die Werte zugreifst.
Außerdem hast du in deinem weiteren Code auch noch einige Fehler.
for($id = 1; $id <= count($prefix_data[\'id\']) ; $id++)
Das Count wird dir hier immer 0 zurück geben, da du nicht die Anzahl der Datensätze des ganzen Arrays abfragst, sondern die Größe des Arrays $prefix_data[\'id\'], was bei dir ja nur der ID-Wert war.
Mit dem veränderten Code müsste die Zeile zu
geändert werden. Falls du den ID-Wert nicht brauchen solltest wäre auch eine foreach-Schleife möglich. Anschließend greifst du dann zB mit $prefix_data[$id][\'state\'] auf die entsprechenden Daten zu.for ($id = 0; $id < count($prefix_data); $id++)
Damit sollte dein Problem hoffentlich gelöst sein.
-
Danke für die hilfe,
merke grad das dummheit weh tut ^^
mit den return hätt ich ja selber drauf kommen können, die MySQL-Abfrage stimmt aber, diese hab ich in phpmyadmin getestet, mit der ausgabe muss ich mal schaun wie ich das mache, also die id brauch ich eigentlich nicht beim benutzen.
Naja ich teste mal das ganze wenn ich ausgepennt habe (grad n 12 stunden höllentrip mit der deutschen gehabt...) und die userseiten wieder funzen... -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage