PHP Arrayquery zeigt Fehler

DarkRaver

Erfahrenes Mitglied
Hallo!
Ich möchte eine Navigation für eine Homepage machen, aber das ganze soll SQL-gestützt sein. Hier ist der Fehler:
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean give
Hier der Code:
Code:
	$sql_query = "SELECT * FROM ".$db['navigation']." SORT BY id";
	$sql_datenquery = mysql_query($sql_query);
	$sql_arrayquery = mysql_fetch_array($sql_datenquery);
	return "<ul><li><a href=\"".$sql_arrayquery['url']."\" title=\"".$sql_arrayquery['name']."\">".$sql_arrayquery['name']."</a></li></ul>";
Merkwürdigerweise geht es nicht, und ich hab schon alles ausprobiert, aber es will einfach nicht. Außerdem ist meine Frage auch, ob das so überhaupt geht, dass der für jeden Eintrag dann noch einmal das return macht.
Es sind derzeit 4 Einträge drin, und für jeden Eintrag soll <ul> und <li> noch einmal angelegt werden.
Ich hoffe ihr könnt mir helfen.

Mfg
 
Das beudetet, dass $sql_datenquery kein Resourceobjekt enthält, was darauf schließen lässt, dass beim mysql_query was schief gelaufen ist. Schaut man sich dann mal dein SQL Statement an, sieht man, dass das Schlüsselwort "ORDER BY id" heißen muss, statt "SORT BY".

Am besten fragst du vorher ab, ob der Query auch erfolgreich durchgeführt wurde.

PHP:
if ($sql_datenquery) {
  ...
}
 
Da die diese Art von Fragen sehr oft kommt, habe ich mal ein Tutorial geschrieben wie man am besten auf Fehlersuche geht.
PHP MySQL Debug Queries
Geh es doch mal durch und falls du die Lösung nicht findest, poste mal das ausgegebe SQL-Statement ins Forum.
 
Ok, mittlerweile hab ich es hinbekommen.
Jetzt habe ich 2 Fragen.
1. Das hier funktioniert nicht:
Code:
"SELECT * FROM ".$db['navigation']." ORDER BY id"
Der Fehler liegt bei:
Code:
".$db['navigation']."
So ist es definiert:
Code:
$sql_prefix = 'hq_';
$sql_host = 'localhost';
$sql_user =  'root'; 
$sql_pass = ''; 
$sql_db = 'dev_cms';

$prefix = $sql_prefix;
$db = array("host" =>           $sql_host,
            "user" =>           $sql_user,
            "pass" =>           $sql_pass,
            "db" =>             $sql_db,
            "navigation" =>        $prefix."navigation" );
Was ist daran falsch?

So 2. Frage wäre,
wenn ich es so mache:
Code:
"SELECT * FROM hq_navigation ORDER BY id"
mache dann zeigt er nur einen Eintrag an, mit dem hier:
Code:
"<ul><li><a href=\"".$sql_arrayquery['url']."\" title=\"".$sql_arrayquery['name']."\"><span>".$sql_arrayquery['name']."</span></a></li></ul>"
Somit steht nur "Startseite" da, also der erste Eintrag.
Wie mache ich das, dass alles ausgelesen wird und mit dieser Prefix genutzt wird(Es sind 4 Einträge)?

Danke schonmal für eure Hilfe.
 
dein Prefix heisst $sql_prefeix, nicht $prefix. Somit ists in der Definition von $db falsch...

Um alle Items anzuzeigen solltes du über mysql_fetch_array() mit einer while-Schleife alles auslesen
PHP:
$html = '<ul>';
while($sql_arrayquery = mysql_fetch_array($sql_datenquery)){
    $html .= "<li><a href='{$sql_arrayquery['url']}' title='{$sql_arrayquery['name']}'>{$sql_arrayquery['name']}</a></li>"
}
$html .= '</ul>';
retrun $html;
 
So siehst du innerhalb eines Strings klar und deutlich was der Variablenname ist und was nicht mehr. Man ist nicht dazu gezwungen, aber vor allem yaslaw ist ein großer Fan davon. :)
 
Schau mal hier http://ch2.php.net/manual/de/language.types.string.php#language.types.string.parsing unter 'Complex (curly) syntax'

Man kann damit sauber Variablen innerhalb eines Strings setzen und es ist klar, wo der Variablenname aufhört und der String weiter geht
PHP:
$foo = 'foo';
//folgendes gibt nix zurück
echo "$foobar";
//folgendes funktioniert
echo "{$foo}bar";

Zudem kann man innerhalb der {} aich auf Array-Inhalte und Object-Properties zugreiffen

zum prefix
PHP:
//Hier heisst die Prefix-Variable $sql_prefix
$sql_prefix = 'hq_';
$sql_host = 'localhost';
$sql_user =  'root'; 
$sql_pass = ''; 
$sql_db = 'dev_cms';
 
$prefix = $sql_prefix;
$db = array("host" =>           $sql_host,
            "user" =>           $sql_user,
            "pass" =>           $sql_pass,
            "db" =>             $sql_db,
//und hier nur noch $prefix
            "navigation" =>        $prefix."navigation" );
 
zum prefix
PHP:
//Hier heisst die Prefix-Variable $sql_prefix
$sql_prefix = 'hq_';
$sql_host = 'localhost';
$sql_user =  'root'; 
$sql_pass = ''; 
$sql_db = 'dev_cms';
 
$prefix = $sql_prefix;
$db = array("host" =>           $sql_host,
            "user" =>           $sql_user,
            "pass" =>           $sql_pass,
            "db" =>             $sql_db,
//und hier nur noch $prefix
            "navigation" =>        $prefix."navigation" );
Ja, aber schau mal was oben drüber sitzt:
PHP:
$prefix = $sql_prefix;
$db = array("host" =>           $sql_host,
            "user" =>           $sql_user,
            "pass" =>           $sql_pass,
            "db" =>             $sql_db,
//und hier nur noch $prefix
            "navigation" =>        $prefix."navigation" );
 
Zurück