• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

if empty wird nicht korrekt ausgeführt

Tobi44

Mitglied
Prüfung auf Eintrag in Datenbank wird nicht korrekt ausgeführt

Hallo,

ich als Anfänger habe hier eben was kleines gebastelt. Dabei wird die ein vom User eingegebener Wert auf Eintrag in der Datenbank geprüft.

Leider wird immer angezeigt, dass die Mailadresse verfügbar ist, auch wenn der eingegebene Wert in der Spalte "owner_mail" vorhanden ist und demnach die "ist vergeben"-Meldung ausgegeben werden sollte.

Kann mir jemand helfen?

PHP:
$mailname = $_GET['mailname'];
$selectdom = $_GET['selectdom'];

if($_GET['check']) {
	if (empty($_GET[$mailname])){
        echo "<font color=\"red\">Bitte gib einen Wert ein.</font><br><br>";
    }elseif ($mcheck = mysql_query("SELECT * FROM email"));
  while($row = mysql_fetch_array($mcheck)){
$mailname = ($row['owner_mail']);
}
	if($row["owner_mail"] == "$mailname"){ 
	echo "<font color=\"red\">$mailname @ $selectdom ist bereits vergeben.</font><br><br>"; 
} else { 
	echo "<font color=\"green\"><strong>$mailname</strong> @ <strong>$selectdom</strong> ist verf&uuml;gbar!</font><br><br>";
}
}

Danke & Gruß
 
Zuletzt bearbeitet:
Die Prüfung in deinem Snippet ist viel zu kompliziert und zudem vergleichst Du das falsche miteinander und mit falschen Variablennamen. Mach sowas über SQL direkt.

PHP:
if (empty($_GET[$mailname])){
        echo "<font color=\"red\">Bitte gib einen Wert ein.</font><br><br>";
}elseif ($mcheck = mysql_query("SELECT * FROM email WHERE owner_mail = '".mysql_escape_string($_GET["mailname"])."'"));
if(mysql_num_rows($mcheck) >= 1 ){
 echo "<font color=\"red\">$mailname @ $selectdom ist bereits vergeben.</font><br><br>";
}
else {
 echo "<font color=\"green\"><strong>$mailname</strong> @ <strong>$selectdom</strong> ist verf&uuml;gbar!</font><br><br>"; 
}

Hinweis: ich würde auch die Ausgabe ohne <font>-Attribut machen, das ist hässlich im HTML-Code. Gestaltung der Ausgabe bitte per CSS vornehmen.
 
Hallo,

danke für Deine Antwort.

Leider klappt auch Dein Vorschlag nicht. Nun wird direkt beim Seitenaufruf angezeigt:
"Bitte gib einen Wert ein.
@ domain.tld ist bereits verfügbar."

Weißt Du, woran das liegt?

Edit:

Habe es nun so geändert:
PHP:
if($_GET['check']) {
if (empty($mailname)){
        echo "<font color=\"red\">Bitte gib einen Wert ein.</font><br><br>";
}elseif ($mcheck = mysql_query("SELECT * FROM email WHERE owner_mail = '".mysql_escape_string($_GET["mailname"])."'"));
	if(mysql_num_rows($mcheck) >= 1 ){
 echo "<font color=\"red\"><strong>$mailname</strong>@<strong>tld.de</strong> ist bereits vergeben.</font><br><br>";
}
else {
 echo "<font color=\"green\"><strong>$mailname</strong>@<strong>tld.de</strong> ist verf&uuml;gbar!</font><br><br>"; 
}
}
und nun wird bei einem leeren Absenden die Meldung "Bitte gib einen Wert ein." und die grüne Meldung "@domain.tld ist verfügbar!" angezeigt.
Wenn ich nun einen in der DB vorhandenen Wert eintrage, wird die korrekte Meldung ausgegeben, bei einem nicht vorhandenen auch.
Das Problem ist halt nur, dass beim leeren Absenden zwei Meldungen ausgegeben werden.

Danke & Gruß
 
Zuletzt bearbeitet:
Dann hast Du jetzt nur ein Problem mit deinen if-Bedingungen, das SQL-Statement ist so richtig(er als vorher).

An welchem Merkmal merkt die Programmierung, dass Du das Formular abgeschickt hast? An $_GET["check"]? Weiterhin weiß ich nicht woher "$mailname" nun wieder kommt, du setzt es ja nirgends. Solltest Du damit ein Formularfeld meinen, dann schreib $_GET["mailname"] oder $_POST["mailname"].

Schema:
Code:
if(isset($_GET["check"])) {
 // Verarbeitung bei Versand von Formular
 if( strlen($_GET["mailname"]) == 0 ) {
  // Ausgabe, dass nichts eingegeben wurde
 } elseif( $mcheck = mysql_query("SELECT * FROM email WHERE owner_mail = '".mysql_escape_string($_GET["mailname"])."'") ) {
  // Überprüfung von Statement-Ergebnis:
  if( mysql_num_rows($mcheck) >= 1 ) {
    // ist schon vergeben
  } else {
    // ist nicht vergeben
  }
 }
}
 
Hallo,

danke - so klappt es nun. Denke, ich habs nun verstanden :-)

$mailname hatte ich außerhalb der if _get check definiert: $mailname = $_GET['mailname'];

Gruß
 
Hallo,

habe nun noch ein anderes kleines Problem.

Habe hier ein
PHP:
elseif (!check_emailsyntax($_POST['owner_altmail'])) {
	echo "<font color=\"red\">Eingegebene Mailadresse ungültig</font><br><br>";
	}
und möchte ein weiteres $_POST einfügen, welches auch auf korrekten E-Mail Syntax geprüft werden soll. Nur wie? Habe es mir OR und && probiert, aber es wird einfach ignoriert.

Gruß
 
PHP:
elseif (!check_emailsyntax($_POST['owner_altmail']) && (!check_emailsyntax($_POST['mail'])) ) { 
    echo "<font color=\"red\">Eingegebene Mailadresse ungültig</font><br><br>"; 
    }
und halt statt && mit OR.

Gruß
 
Wenn ich das richtige sehe musst Du rein inhaltlich beide Prüfungen mit UND verknüpfen (also &&, nicht OR und nicht ||). So gesehen ist das was Du hier gezeigt hast eigentlich korrekt, auch wenn um die letzte Funktion eine Klammer zuviel ist, aber das stört nicht weiter. Wenn das nicht so klappt wie Du willst, hinterfrage inhaltlich was Du hier prüfen willst. Formuliere es für dich mit Worten und schreibe es auf. Dann programmierst Du das was Du aufgeschrieben hast.
 
Naja, ich komme da nicht weiter - ohne das && (!check_emailsyntax($_POST['mail'])) klappt es ja - aber mit diesem Teil wird das check_emailsyntax für 'mail' einfach ignoriert.
Wieso Klammer zu viel? Wenn ich die letzte Klammer rausnehme, steht die erste hinter dem elseif allein und ich erhalte eine weiße Seite.

Gruß
 
Ignoriert wird es nicht. Indem Du die beiden Bedingungen mit && (also UND) verknüpfst, müssen beide Wahr sein damit das was in den dann folgenden geschweiften Klammern steht ausgeführt wird. Daher auch mein Hinweis, wie Du es inhaltlich haben willst. Sollen beide Mails korrekt sein oder nur eine. Wenn letzteres, musst Du mit OR oder || arbeiten statt &&.
 
Habe es ja nun mit &&

PHP:
elseif (!check_emailsyntax($_POST['owner_altmail'])) && (!check_emailsyntax($_POST['mail']))
Das gibt aber nun eine weiße Seite zurück, warum weiß ich nicht.

Mache ich es so, zwar keine weiße Seite, aber das !check_emailsyntax($_POST['mail'] wird ignoriert.......:
PHP:
elseif (!check_emailsyntax($_POST['owner_altmail']) && (!check_emailsyntax($_POST['mail'])) )

Ich weiß nicht, wie eine doppelte Prüfung auszusehen hat - dass ich && nehmen muss, habe ich ja jetzt verstanden.
 
Zuletzt bearbeitet:
Da Du nur einen Ausschnitt aus einer komplexen if-Bedingung zeigst, kann man das Problem auch nicht genauer beurteilen.
 
PHP:
if($_POST['absenden']) {
    if (empty($_POST['owner']) OR empty($_POST['owner_altmail']) OR empty($_POST['owner_mail']) OR empty($_POST['mail'])){
        echo "<font color=\"red\">Du hast nicht alle mit * gekennzeichneten Felder ausgef&uuml;llt.</font><br><br>";
    }elseif (!check_emailsyntax($_POST['owner_altmail']) && !check_emailsyntax($_POST['mail'])) {
	echo "<font color=\"red\">Die von Dir eingegebenen E-Mail Adressen stimmen nicht.</font><br><br>";
	}else {
        $ok=TRUE;
        if($ok){
		....
Das ist nun der Teil... Danach folgt nur noch die Eintragung der Werte in die Datenbank.

So wie ich es nun in diesem Beispiel hier drin habe, klappt es übrigens auch nicht:
elseif (!check_emailsyntax($_POST['owner_altmail']) && !check_emailsyntax($_POST['mail']))
- Prüfung auf mailsyntax bei 'mail' wird wieder ignoriert.
 
Wenn ich das in dem Zusammenhang sehe musst Du es mit OR verbinden.

Code:
if($_POST['absenden']) {
    if (empty($_POST['owner']) OR empty($_POST['owner_altmail']) OR empty($_POST['owner_mail']) OR empty($_POST['mail'])){
        echo "<font color=\"red\">Du hast nicht alle mit * gekennzeichneten Felder ausgef&uuml;llt.</font><br><br>";
    }elseif (!check_emailsyntax($_POST['owner_altmail']) [COLOR="red"]OR[/COLOR] !check_emailsyntax($_POST['mail'])) {
    echo "<font color=\"red\">Die von Dir eingegebenen E-Mail Adressen stimmen nicht.</font><br><br>";
    }else {
        $ok=TRUE;
        if($ok){...
 
Leider klappt auch das nicht - nun wird immer, ob korrekte Mailadresse eingetragen oder nicht - die Meldung "Die von Dir eingegebenen E-Mail Adressen stimmen nicht." ausgegeben.

Ich kann mir nicht erklären, wieso das nicht funktionieren mag.
 

Neueste Beiträge

Zurück
Oben