Warum funktioniert IF nicht ?

BlauesLicht

Grünschnabel
Hallo,
ich bin am verzweifeln :(
ich versuche 2 variablen miteinander zu vergleichen (siehe im code : HIER !) Leider wird meine IF Abfrage von php einfach ignoriert als währe sie garnicht da. Habe mir auch schon die variablen-inhalt und typ ausgeben lassen und die sind jedesmal identisch (gleicher Inhalt und beide string). somit müsste eigentlich die IF Abfrage greifen. tut sie aber nicht :(
Währe euch sehr dankbar falls der fehler gefunden wird :)
PHP:
<?php
include("mysql_db.php");
include("router_cfg.php");

$name = $HTTP_POST_VARS["name"];
$mac_eingabe = $HTTP_POST_VARS["mac"];
$bandbreite = $HTTP_POST_VARS["bandbreite"];
$kontigent = $HTTP_POST_VARS["kontigent"];

$bandbreite_router = ($bandbreite * 8);

$mac_neu_a = explode(":",$mac_eingabe);
$mac_neu_b = implode("",$mac_neu_a);
$mac_neu_c = explode("-",$mac_neu_b);
$mac = implode("",$mac_neu_c);

$abfrage_vorhanden = "SELECT name, mac FROM r_user";
$ergebnis_vorhanden = mysql_query($abfrage_vorhanden);
while($row_vorhanden = mysql_fetch_assoc($ergebnis_vorhanden))
        {
	$name_mysql = $row_vorhanden["name"];
                      $mac_mysql = $row_vorhanden["mac"];

                      //  HIER ! 
	if($name==$name_mysql){
		header("Location: index.php?aktion=false&fehler=Name");
		break;
		}
	else if($mac==$mac_mysql){
		header("Location: index.php?aktion=false&fehler=MAC-Adresse");
		break;
		}
	}

$laenge = strlen($mac);
if ($laenge != 12)
	{
	header("Location: index.php?aktion=false&fehler=MAC-Adresse");
	}
else
	{
	$time_now = time();
	$eintrag = "INSERT INTO r_user (name, mac, kontigent, seit_zeit_stamp, bandbreite) VALUES ('$name', '$mac', '$kontigent','$time_now', '$bandbreite')";
	$eintragen = mysql_query($eintrag);

	$usenet = fsockopen($cfgServer, $cfgPort, &$errno, &$errstr, $cfgTimeOut);
	fputs ($usenet, "$cfgpw\r\n");
	fputs ($usenet, "cd setup/ip-router-modul/firewall/regel-tabelle\r\n");
	fputs ($usenet, "set $name\r\n");
	fputs ($usenet, "exit\r\n");
	fclose($usenet);

	header("Location: index.php?aktion=true");
	}
?>
 
Ich weiß nicht ob es daran liegt, aber "elseif" wird zusammengeschrieben.

Ebenso sollte man sich von $HTTP_POST_VARS trenne. Bin mir nicht sicher, habe ich gehört.
 
elseif kannst du auch getrennt schreiben.

[PHPHANDBUCH]
Es kann mehrere elseif-Anweisungen innerhalb einer if-Anweisung geben. Die erste elseif-Bedingung (falls vorhanden), die TRUE ist, wird ausgeführt. In PHP kann man auch 'else if' schreiben (zwei Wörter). Das Verhalten ist identisch zu 'elseif' (ein Wort). Die Bedeutung der Syntax ist leicht unterschiedlich (falls Sie mit C vertraut sind, das ist das gleiche Verhalten) aber der Grundtenor ist der, dass beide Schreibweisen, bezogen auf das Ergebnis, sich exakt gleich verhalten.
[/PHPHANDBUCH]

Dass man sich von $HTTP_POST_VARS trennen sollte, habe ich auch schon mal gehört.
 
Hmm...
- Gibt es irgendwelche Fehlermeldungen?
- Hast du dir denn schon den Inhalt der betreffenden Variablen per var_dump() ausgeben lassen?
- Hast du mal versucht, einen echo()-Befehl in die If-Abfrage zu schreiben, um zu testen, ob PHP durch die If-Abfrage kommt und es möglicherweise am header() liegt?

PS: Zum Testen solltest du error_reporting(E_ALL) setzen!
 
Original geschrieben von Backdraft
Ich weiß nicht ob es daran liegt, aber "elseif" wird zusammengeschrieben.

Ebenso sollte man sich von $HTTP_POST_VARS trenne. Bin mir nicht sicher, habe ich gehört.

elseif gibt es technisch gar nicht.

elseif ist nichts anderes als else if. Nur das es laut interpreter zur vereinfachung auch elseif geschrieben werden kann. Wenn er aber else if schreibt dann macht er das besser, da in den anderen Sprachen else if die richtige Syntax ist, und hat es etwas leichter beim Umstieg.

Zu dem Fehler:
Ein String kann auch nicht sichtbare Zeichen haben. Sprich \n \r usw.
Diese siehst du dann dann einfach nicht, und so können solche komischen Dinge passieren ;)
Arbeite lieber mit einem Regulären Ausdruck falls es möglich ist das dein String auch Steuerzeichen beheimaten kann.
 
Hallo und danke schonmal für die Antworten.
habe nun folgendes "echo" eingefügt um die Ausgabe zu bekommen :

PHP:
$abfrage_vorhanden = "SELECT name, mac FROM r_user";
$ergebnis_vorhanden = mysql_query($abfrage_vorhanden);
while($row_vorhanden = mysql_fetch_assoc($ergebnis_vorhanden))
        {
	$name_mysql = $row_vorhanden["name"];
        $mac_mysql = $row_vorhanden["mac"];
	
	echo "EINGABE ".$name.var_dump($name)." MYSQL ".$name_mysql.var_dump($name_mysql)."<br>";
	echo "EINGABE ".$mac.var_dump($mac)." MYSQL ".$mac_mysql.var_dump($mac_mysql)."<br>";

	if ($name == $name_mysql)
		{
		header("Location: index.php?aktion=false&fehler=Name");
		break;
		}
	else if ($mac == $mac_mysql)
		{
		header("Location: index.php?aktion=false&fehler=MAC-Adresse");
		break;
		}

	
	}

Ausgabe ist folgende :
string(7) "tester3" string(7) "tester1" EINGABE tester3 MYSQL tester1
string(12) "002654141739" string(12) "002654141739" EINGABE 002654141739 MYSQL 002654141739

Warning: Cannot modify header information - headers already sent by (output started at /srv/www/htdocs/set.php:25) in /srv/www/htdocs/set.php on line 35

Warning: Cannot modify header information - headers already sent by (output started at /srv/www/htdocs/set.php:25) in /srv/www/htdocs/set.php on line 60
tester3 ist aus $name und tester1 aus $name_mysql
002654141739 (string12) ist aus $mac und 002654141739 (string12) aus $mac_mysql
da die variablen $mac und $mac_mysql in meinen Augen inhaltlich identisch sind verstehe ich das nicht.
Warning: Cannot modify header information - headers already sent by (output started at /srv/www/htdocs/set.php:25) in /srv/www/htdocs/set.php on line 35
diese fehlermeldung lässt schliessen das er nun die überprüfung gemacht hat.... er kann aber nichts mehr am header ändern weil schon echos gesendet worden sind (weiss nicht obs richtig interpretiert is ?!).
Und da er nicht bei diesem Punkt aus dem Script spingt und wieder die index.php öffnet kommt auch gleich die nächste meldung :
Warning: Cannot modify header information - headers already sent by (output started at /srv/www/htdocs/set.php:25) in /srv/www/htdocs/set.php on line 60
Wenn ich nun die echos wieder entferne wird die IF Abfrage einfach wieder ignoriert :sad:
 
Sobald du einmal eine Ausgabe (hier:echo) machst, wird schon ein Standard-Header geschickt, deswegen kannst du dann keine header()-Anweisung mehr geben. Das ist schon alles
 
ja das ist richrig :) die habe ich auch nur eingebaut um eine ausgabe zum menschlichen vergleich zu bekommen. Im normalfall sollen die echos garnicht drinne sein :) (siehe code ganz oben)
 
Zurück