Zur Navigation

Mehrere Fehlermeldungen anzeigen

1 andehrl

super , funktioniert prima :-)

ich hab zur registrierungsseite noch eine letzte frage. in diesem script hier sind 3 mögliche fehlermeldungen:

session_start();
$error = '';
if (isset($_SESSION['captcha_spam']) && $_POST["sicherheitscode"] == $_SESSION['']) {
    $error = '';
} else {
     if (isset($_SESSION['captcha_spam']) && $_POST["sicherheitscode"] != $_SESSION['captcha_spam']) {
    $error = 'Der Sicherheitscode ist falsch';
} else {

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "einfache registrierung")) {

mysql_select_db($database_Registrierung, $Registrierung);
$result = mysql_query("SELECT nutzername FROM login WHERE nutzername = '" . mysql_real_escape_string($_POST['nutzername']) . "'");
if (mysql_num_rows($result) > 0) {
    $error = 'Dieser Nutzername ist bereits vergeben. Bitte versuchen Sie es mit einem anderen Namen.';
} else {
    $result = mysql_query("SELECT mail FROM login WHERE mail = '" . mysql_real_escape_string($_POST['mail']) . "'");
    if (mysql_num_rows($result) > 0) {
        $error = 'Diese Emailadresse ist bereits vergeben. Bitte versuchen Sie es mit einer anderen E-Mail.';
    }
	}
	}
	echo mysql_error();
}
echo mysql_error();

diese werden dann alle bzw nach irgendeiner rangfolge??? hier ausgegeben:

<?php
if ($error != '') { 
    echo '<p>' . $error . '</p>';
}
?>

kann ich $error aufteilen in $error1, $error2, $error3 und dadurch die fehlermeldungen ggfs alle gemeinsam angezeigt bekommen?

11.12.2010 22:43

2 Jörg Kruse

Bei dir wird wohl aufgrund der verschachtelten if-else Struktur nur die erste Fehlermeldung angezeigt. Die Struktur ist ja im Prinzip diese:

$error = '';
if (! $condition1) {
    $error = 'Fehler1';
} else {
    if (! $condition2) {
        $error = 'Fehler2';
    } else {
        // etc.
    }
}

Du musst die Bedingungen stattdessen nacheinander abarbeiten und die Fehlermeldungen mit ".=" aneinanderketten, damit alle angezeigt werden. Einen Umbruch würde ich auch noch mit reinpacken, damit die Fehlermeldungen nicht alle in einer Zeile stehen.

$error = '';
if (! $condition1) {
    $error .= 'Fehler1<br/>';
}
if (! $condition2) {
    $error .= 'Fehler2<br/>';
}
if (! $condition3) {
    $error .= 'Fehler3<br/>';
}

11.12.2010 23:04 | geändert: 11.12.2010 23:05

3 andehrl

ich habe das script nach deinen angaben verändert. es hat dann bei zwei, drei versuchen funktioniert und dann plötzlich bekam ich wieder die fehlermeldung einer fehlenden datenbankanknüpfung. ich hab einfach alles nochmal gemacht und die reihenfolge der fehlermeldung noch verändert. bin jetzt aber sehr verunsichert ob nach ein paar registrierungsversuchen wieder eine fehlermeldung bzgl der datenbank kommt. der code schaut jetzt so aus. siehst du vieleicht noch irgendeinen fehler?

session_start();
$error = '';
if (isset($_SESSION['captcha_spam']) && $_POST["sicherheitscode"] == $_SESSION['']) {
    $error = '';
} else {
     
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "einfache registrierung")) {

mysql_select_db($database_Registrierung, $Registrierung);
$result = mysql_query("SELECT nutzername FROM login WHERE nutzername = '" . mysql_real_escape_string($_POST['nutzername']) . "'");
if (mysql_num_rows($result) > 0) {
    $error .= 'Dieser Nutzername ist bereits vergeben. Bitte versuchen Sie es mit einem anderen Namen.<br/><br/>';
} 
    $result = mysql_query("SELECT mail FROM login WHERE mail = '" . mysql_real_escape_string($_POST['mail']) . "'");
    if (mysql_num_rows($result) > 0) {
        $error .= 'Diese Emailadresse ist bereits vergeben. Bitte versuchen Sie es mit einer anderen E-Mail.<br/><br/>';
    
	
	}
	if (isset($_SESSION['captcha_spam']) && $_POST["sicherheitscode"] != $_SESSION['captcha_spam']) {
    $error .= 'Der Sicherheitscode ist falsch<br/>';
} 

	echo mysql_error();
}
echo mysql_error();

if (isset($_POST['nutzername'])) {
    $nutzername = htmlspecialchars($_POST['nutzername']);
} else {
    $nutzername = '';
}
if (isset($_POST['passwort'])) {
    $passwort = htmlspecialchars($_POST['passwort']);
} else {
    $passwort = '';
}
if (isset($_POST['passwort2'])) {
    $passwort2 = htmlspecialchars($_POST['passwort2']);
} else {
    $passwort2 = '';
}
if (isset($_POST['handy'])) {
    $handy = htmlspecialchars($_POST['handy']);
} else {
    $handy = '';
}
if (isset($_POST['mail'])) {
    $mail = htmlspecialchars($_POST['mail']);
} else {
    $mail = '';
}


if ($error == "") {
    $insertSQL = sprintf("INSERT INTO login (vornachname, nutzername, passwort, mail, handy) VALUES (%s, %s, %s, %s, %s)",
                       GetSQLValueString($_POST['vornachname'], "text"),
                       GetSQLValueString($_POST['nutzername'], "text"),
                       GetSQLValueString($_POST['passwort'], "text"),
                       GetSQLValueString($_POST['mail'], "text"),
                       GetSQLValueString($_POST['handy'], "text"));
  
  $Result1 = mysql_query($insertSQL, $Registrierung) or die(mysql_error());

  $insertGoTo = "8cSieSindEingeloggt.php";
  if (isset($_SERVER['QUERY_STRING'])) {
    $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
    $insertGoTo .= $_SERVER['QUERY_STRING'];
  }
  header(sprintf("Location: %s", $insertGoTo));
}
}

12.12.2010 00:28

4 Jörg Kruse

es hat dann bei zwei, drei versuchen funktioniert und dann plötzlich bekam ich wieder die fehlermeldung einer fehlenden datenbankanknüpfung.

Ich hatte dir ja schon an anderer Stelle gesagt, dass du mysql_select_db() außerhalb irgendeines if-Konstruktes aufrufen solltest, möglichst direkt nach dem Include der Datei, in welcher die Datenbankverbindung aufgebaut wird. Dann kommt es nicht zu solchen Fehlern.

Das hier ist übrigens irgendwie sinnfrei:

$error = '';
if (isset($_SESSION['captcha_spam']) && $_POST["sicherheitscode"] == $_SESSION['']) {
    $error = '';
} else {

Du überschreibst einen leeren String mit einem leeren String - das kannst du dann auch gleich sein lassen.

Und den Code vernünftig einrücken wäre auch nicht schlecht ;) - ich steig da nämlich auch immer nur sehr schwer durch (hier speziell der Abschnitt mit den Fehlermeldungen). Siehe hierzu auch dieses Tutorial:

http://tut.php-q.net/de/indent.html

12.12.2010 13:15 | geändert: 12.12.2010 13:23

5 andehrl

Ich hatte dir ja schon an anderer Stelle gesagt, dass du mysql_select_db() außerhalb irgendeines if-Konstruktes aufrufen solltest, möglichst direkt nach dem Include der Datei, in welcher die Datenbankverbindung aufgebaut wird. Dann kommt es nicht zu solchen Fehlern.

bin nicht sicher ob ich das richtig verstehe. ich hab jetzt mysql_select_db() fast ganz an den anfang gesetzt:

<?php require_once('Connections/Registrierung.php');?>
<?php
mysql_select_db($database_Registrierung, $Registrierung);
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  if (PHP_VERSION < 6) {
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
...



Und den Code vernünftig einrücken wäre auch nicht schlecht ;) - ich steig da nämlich auch immer nur sehr schwer durch (hier speziell der Abschnitt mit den Fehlermeldungen).


danke für den hinweis. ich werde in zukunft darauf achten :-)

12.12.2010 15:07

6 Jörg Kruse

Ja, so sollte die Datenbankauswahl für alle Queries in dem Script verfügbar sein.

12.12.2010 15:53

7 andehrl

wunderbar, ich danke dir vielmals :-)

12.12.2010 19:16

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]