PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wahre Bedingung abbrechen



schuelsche
29-11-2003, 19:00
Hallo Ihrs,

ich habe ein Problem, bei dem ich einfach nicht weiterkomme. Es geht um den Abbruch einer zunaechst wahren elseif-Bedingung.

Ich habe ein PHP-Formular-Skript geschrieben, das grob so aussieht:

<- Skriptanfang ->

PHP-Anfang
if(!isset($HTTP_POST_VARS['submit']))
{
PHP-Ende

<html - Tabelle mit zu uebergebenden Variablen>

PHP-Anfang
} //if-Abfrage von oben schliesst sich

//Fehlerabfangroutinen
elseif($HTTP_POST_VARS['submit'] && $HTTP_POST_VARS['vorname'] == "")
{
tu irgendwas;
}

elseif (...)
{
...
}

//wenn alles fehlerfrei, dann in DB eintragen

else
{
//Passwort generieren

//Daten in DB eintragen
$sql = "INSERT INTO ...";
$result = ...

echo 'Erfolgreicher Eintrag';
}

PHP-Ende

<- Skript-Ende ->

Nun moechte ich in das Skript noch eine Fehlerabfangroutine eintragen, die ueberprueft, ob der Loginname schon vorhanden ist.
Dazu habe ich eine elseif-Bedingung gebastelt, in die auf alle Faelle reingesprungen wird, weil die Bedingung immer wahr ist. In der Bedingung gleicht er nun den vom User eingegebenen Wert mit der Datenbank ab. Wenn ein Datenbankergebnis vorliegt, soll er eine Fehlermeldung ausgeben.
Soweit funktioniert das ganze auch.
Nun soll aber die elseif-Schleife abgebrochen werden, wenn kein Ergebnis vorliegt.

Folgendermassen sieht mein Versuch aus, der aber nicht funktioniert :-(

elseif (wahreBedingung)
{
$select = "SELECT * FROM ...";
$abfrage = mysql_query(...) or die ("Ungültige Abfrage: " .mysql_error());
$ergebnis = mysql_fetch_row($abfrage);
if ($ergebnis)
{
echo 'Wert existiert.';
}

else (empty($ergebnis))
continue;
}

Kann mir jemand helfen, das so zu aender, dass es geht?! Irgendwie komme ich nicht auf die Loesung. Funktionieren denn continue oder break nur mit while bzw. switch-Abfragen?

Wuerde mich ueber Hilfe freuen,
schuelsche

PS: diesmal suche ich schon eine ganze Weile nach der Loesung... vielleicht habe ich aber auch irgendwo einen Denkfehler und man kann die Abfrage einfacher darstellen...

Stanislaus
30-11-2003, 05:26
Moin!

Also ich würde das ganze ein wenig anders aufbauen. Um zu überprüfen, ob User xy bereits existiert schreibts Du Dir eine Funktion:


function userExists($strUserName)
{
$select = "SELECT * FROM ...";
$abfrage = mysql_query(...) or die ("Ungültige Abfrage: " .mysql_error());
$ergebnis = mysql_fetch_row($abfrage);
if ($ergebnis)
{
return true;
}
else
{
return false;
}
}

Dann lässt Du die "immer wahre" else if Bedingung weg und prüfst stattdessen auf:


...
else if ( userExists($_POST['username']) )
{ ...

Wenn der Benutzer existiert gibt die Funktion true zurück und der else if Bereich wird ausgeführt. Existiert der User nicht wird die nächste else Bedingung ausgewertet.

Hoffe geholfen zu haben.

Viel Erfolg!

schuelsche
30-11-2003, 13:17
Vielen Dank für den Funktions-Tip, das werde ich auf alle Fälle testen ;-)

Mein Problem ist jetzt nur - wo baue ich die Funktion ein, dh. an welcher Stelle des Skripts? Gehen kann das ja erst nach der ersten if-Abfrage (if(!isset(...)). Nur wenn ich es einfach mittenrein setze, also zwischen die erste if-Abfrage und die nächste elseif-Abfrage, dann bringt mir das Skript doch einen Fehler? Also müsste die Funktion doch in eine elseif-Abfrage, die wahr sein muss?! Oder ganz am Ende in den else-Teil, der auf alle Fälle ausgeführt wird, da hier keine Bedingung erforderlich ist?!

Grüsse
schuelsche

Stanislaus
30-11-2003, 17:44
Pack die Funktion an den Anfang oder ans Ende Deines Scriptes. Wenn Du magst auch in eine extra Datei, die Du dann includieren kannst.
Im Prinzip ist es Wursch wo die Funktion steht, nur mitten in einer if {} else {} Bedingung wird das nicht funktionieren.

Bis neulich ...