Undefinierte Variable in Funktion

pnx

Mitglied
Hi beisammen,

leider kommen ich hier nicht weiter.
In einer Funktion die eine Navi nach "Rang" des Benutzers erstellt, wird die Variable die ich "returne" als Undefiniert ausgewiesen.

PHP:
function doNavigation($user_level)
   {
   $tab_navi  = "bs_navigation";
   
   $query  = "SELECT
             linkname,pfad
             FROM $tab_navi
             WHERE lvl = '$user_level' or lvl < 'user_level'
             ORDER by sort";
                 
   $result = mysql_query($query);
       
   while($nav = mysql_fetch_array($result))
     {
     $show_navi[] = $nav;
     }
   return $show_navi;   // <- Diese Variable ist Undefiniert
   }

Die Fehlermeldung:
Notice: Undefined variable: show_navi in ... on line 44

Sry, wenns zu einfach ist, aber nach 8 Stunden Frühschicht bin ich nicht merh so fit :)

PS: register_globles = off
 
Ok der Fehler ist doch weg, allerdings scheint die Variable nun leer zu sein.
Hab mal ein paar Checks eingebaut.

PHP:
function doNavigation($user_level)
   {
   echo "FUNKTION";
   
   $show_navi = array();
   $tab_navi  = "bs_navigation";
   
   $query  = "SELECT
             linkname,pfad
             FROM $tab_navi
             WHERE lvl = '$user_level' or lvl < 'user_level'
             ORDER by sort";
                 
   $result = mysql_query($query);
   
   if(!$result) {echo "error";}
   
   while($nav = mysql_fetch_array($result))
     {
     echo "$nav[pfad]";
     $show_navi[] = $nav;
     echo "1";
     }
   return $show_navi;
   }

Da "FUNKTION" ausgegeben wird, muss also die funktion aufgerufen werden. Und da "error" nicht erscheint muss auch die Verbindung zur db gelungen sein.
allerdings scheint er alles was in der while-Schleife stattfindet nicht zu machen.

Wenn ich das nicht als Funktion mache geht es, obwohl ich am Prinzip nichts verändere.

Naja ich leg mich nu aufs Ohr, vielleicht fällt einem noch was ein. gn8
 
Versuch mal folgendes:
PHP:
function doNavigation($user_level) {
	$output = array();

	$query  = "
		SELECT
		        `linkname`,
		        `pfad`
		  FROM
		        `bs_navigation`
		  WHERE
		        `lvl` = '".$user_level."'
		     OR `lvl` < 'user_level'
		  ORDER BY
		        sort
	";
	if( !$result = mysql_query($query) ) {
		echo '<p><strong>MySQL Error <tt>'.mysql_errno().'</tt>:</strong> '.htmlspecialchars(mysql_error()).'<pre>'.$query.'</pre></p>';
		exit;
	}

	while( $output[] = mysql_fetch_array($result) ) {
	}
	return $output;
}
Wenn das auch nicht funktioniert, wird wohl an deiner Abfrage etwas nicht stimmen.
 
Sooooo.
Also eiegntlich hab ich an dem Ding nix groß geändert und es geht auf einmal, zumindest wenn man nicht eingeloggt ist.
Nur kann ich mich nun nicht mehr einloggen :(

Die Variablen werden per
PHP:
$login_nick = isset($_POST['nick1']);
$login_pass = isset($_POST['password1']);
beigeholt. Allerdings wird in beide Variablen nur "1" eingespeichert.
Langsam dreh ich hier am Rad.
Wenn ich Nick und Pass im Code setze, also
PHP:
$login_nick = "xxx",
$login_pass = "xxx";
klappt es auch so wie es soll.

Nochmal die Kurzfassung:
PHP-Script erstellt Navi und gibt diese in einem Template (Smarty) aus. In dem Template ist ein Formular zum Login. Wenn man die Daten eingibt wird wieder das PHP-Script aufgerufen und mit den neuen Werten die angepasste Navi erstellt.

Hier die 1. Zeile des Formulars:
Code:
<form method="POST" action="../souler/smartynewtest.php">
 
Dein isset ist auch völlig falsch. Die 1 ist logisch, da alles ungelich 0 den boolschen Wert TRUE symbolisiert der auch von isset zurückgeliefert wird.
Daher die Frage was soll das isset da.
Willst du überprüfen ob die beiden überhaupt gesetzt sind mach ein if drum al a if( !isset($variable) ) { die("Variable fehlt!"); }
Oder benutze einfach $_POST['nick1'] direkt oder weise es eben, wenn es denn sein muss.

Zu deiner While-Schleife 2 Posts weiter oben, kann auch sein, dass dein Query erfolgreich war aber eben keine Datensätze zurückgeliefert wurden, dann wird die Schleife auch nicht durchlaufen....
 
Fehlt da im Query nicht schlicht ein Dollar-Zeichen?

Code:
$query  = "SELECT 
             linkname,pfad 
             FROM $tab_navi 
             WHERE lvl = '$user_level' or lvl < '$user_level' 
             ORDER by sort";
...ist ohne zwar kein fehlerhaftes Query, liefert wahrscheinlich aber nicht das gewünschte Ergebnis...:-)
 
Zuletzt bearbeitet:
Es scheint nun zu funktionieren.

PHP:
if(isset($_POST['nick1']))
   { $login_nick = $_POST['nick1'];}
else
   { $login_nick = '';}
   
if(isset($_POST['password1']))
   { $login_pass = $_POST['password1'];}
else
   { $login_pass = '';}

Danke an alle
 
Zurück