Variable wird nicht erkannt

jdgf

Mitglied
Hallo,
ich bestimme in dem Script die Variable $varNeu in der If-Abfrage und lese sie dann in der Zeile 98 ein. Trotzdem erhalte ich die Fehlermeldung, dass die Variable $varNeu in der Zeile 98 nicht definiert sei.
Code:
Notice: Undefined variable: varNeu in 
/var/www/web69/html/joomla/images/scripts/raetsel_kurz.php on line 98
Kann mir jemand helfen?

PHP:
if ($datum2 == $var2) {
$test1="SELECT id, titel, frage, datum FROM raten WHERE datum=$var2";
$res=mysql_query($test1);
    while ($dsatz = mysql_fetch_assoc($res))
    {
		echo "<p>" .substr($dsatz["frage"], 0, 65) . " ...</p>";
    	$varNeu = $dsatz["id"];
    }
}
else {
	$test1="SELECT id, titel, frage, datum FROM raten WHERE datum=0 ORDER BY RAND() LIMIT 1";
	$res=mysql_query($test1);
		while ($dsatz = mysql_fetch_assoc($res))
		{
		echo "<p>" .substr($dsatz["frage"], 0, 65) . " ...</p>";
		$varNeu = $dsatz["id"];
		}
	}
$sql = "UPDATE raten SET datum=$datum2 WHERE ID=$varNeu"; //(<< Zeile 98)
mysql_query($sql);

Danke für die Hilfe und schöne Grüsse aus der Oberpfalz!
Dietmar
 
Ich denke mal das was in Deinen SQL-Statements nicht stimmt. Arbeite hier bitte mit

PHP:
mysql_query($test1) or die (mysql_error());
mysql_query($sql) or die (mysql_error());

was für ein Feldtyp ist das Feld "datum"?
In der "else" anweisung wird es nämlich mit "0" abgefragt, kann mir nicht vorstellen das es so gewollt ist. Wenn der else-Fall eben zutrifft, aber die SQL-Abfrage nicht stimmt, wird auch die Variable $varNeu nicht gesetzt und das Update des Datensatzes schlägt fehl.
 
Vielleicht spuckt er das schon auf einer Syntax oder einer statischen Semantik aus.
Das heißt du müsstest noch vor der if die Variable ordentlich initialisieren:
PHP:
$varNeu = "";
if ...
 
@loomes
wird in der while-Schleife, etwas per echo ausgegeben
in der echo-Zeile wird der Text ausgegeben. Webseite = http://web69.alfa1023.alfahosting-server.de/joomla/

@Maniac_81
Arbeite hier bitte mit
PHP:
mysql_query($sql) or die (mysql_error())
;
Den Code habe ich eingefügt.

was für ein Feldtyp ist das Feld "datum"?
In der "else" anweisung wird es nämlich mit "0" abgefragt,

"datum" hat die Feldtyp int(4) und als Standard 0 erhalten. 4 Zeichen reichen, da ich nur 0617 (in der Spalte steht 617) für 17. Juni benötige. Am Scriptanfang lese ich alle Zeilen aus, in denen noch eine Null bei "datum" steht; aus der Auswahl wird eine Zeile per Zufall ausgewählt. Am Ende des Scripts wird in die beanstandete Zeile das aktuelle Datum eingetragen, damit die Zeile bei der nächsten Auswahl nicht mehr zur Verfügung steht.
Die anderen Variablen "datum2" bzw "var2" habe ich deswegen so definiert:
PHP:
$datum2 = date("md", $timestamp);
 
Hallo ZodiacXP,
danke für den Tip; nach Einfügen der Variablen vor der If-Anweisung gibt es keine Fehlermeldung mehr.

@loomes und Maniac_81
Danke für eure Hilfe!

Schöne Grüsse aus der Oberpfalz!
Dietmar
 
Hallo ZodiacXP,
danke für den Tip; nach Einfügen der Variablen vor der If-Anweisung gibt es keine Fehlermeldung mehr.

@loomes und Maniac_81
Danke für eure Hilfe!

Schöne Grüsse aus der Oberpfalz!
Dietmar

Hi
für die Zukunft: Eine Variable ist nur in dem Bereich sichtbar, wo sie deklariert wurde: (nennt man auch scope)
PHP:
$a = 1; //beginn von a
if( $a == 1 ){ // a sichtbar
  $b = 1; //beginn von b
  if( $b == 1 ){ // a+b sichtbar
    $c = 1; //beginn von c 
    //a+b+c sichtbar
  } //ende von c
  echo '$b ist noch sichtbar';
}//ende von b
echo 'nur noch $a ist sichtbar';
 
Eine Variable ist nur in dem Bereich sichtbar, wo sie deklariert wurde: (nennt man auch scope)

Was man sich für PHP allerdings nicht merken muss, da es den Gültigkeitsbereich noch nicht so genau nimmt. Erst bei Funktionen, Objekten etc. fängt es an zu unterscheiden.

Sollte man sich aber z.B. für JAVA schon mal merken ;)
 
Zuletzt bearbeitet:
Was man sich für PHP allerdings nicht merken muss, da es den Gültigkeitsbereich noch nicht so genau nimmt. Erst bei Funktionen, Objekten etc. fängt es an zu unterscheiden.

Sollte man sich aber z.B. für JAVA schon mal merken ;)

Naja... eigentlich nimmt PHP das schon sehr ernst...

Nur wenn man im prozeduralen Stil arbeitet, definiert man halt fast alle Variablen auf dem globalen Scope.
Und der ist nun mal gültig, bis ein neuer Scope betreten wird... Innerhalb einer Funktion oder Klasse z. B.
 
Verstehe ich nicht.
Bei den Funktionen und Objekten sind wir uns einig.
Aber PHP ist doch schon lockerer z.B. gegenüber JAVA bei dem Zähler einer for-Schleife.

IMO gibt es keine Begrenzungen des Gültigkeitsbereichs innerhalb / durch / bei Kontrollstrukturen in PHP.

Oder meintest du gerade das? ^ ^
 
Zuletzt bearbeitet:
Zurück