| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

12-10-2009, 12:35
|
|
Helix
Registrierter Benutzer
|
|
Registriert seit: Oct 2009
Beiträge: 5
|
|
For und If Schleifen machen Probleme
Hallo PHP Gemeinde!
Ich bin neu in PHP und versuche mich momentan an einer Registrierung mit einer MYSQL Datenbank.
Bisher hat alles geklappt und so wollte ich noch code einbauen der überprüft ob der Nick und dann ob die Mailadresse schon in der Datenbank vorhanden sind. Nur leider wird jedesmal angegeben das der Nick schon vergeben ist, obwohl das nicht stimmt.
ich versuche schon das ganze WE lang dem Fehler auf die schliche zu kommen, aber es klappt nicht.
Ich hoffe ihr könnt mir helfen!
Phpversion: 5
OS: Linux (Ubuntu)
PHP-Code:
//Läd die nicks und mails; läd sie in die arrays
$query = mysql_query ("SELECT user_name, user_mail FROM c_user");
$usern = array(); //usern(ame)
$userm = array(); //userm(ail)
while (list ($user_name, $user_mail) = mysql_fetch_row ($query)) {
array_push ($usern, $user_name);
array_push ($userm, $user_mail);
}
//vergleicht die nicks aus der DB mit der Eingabe
$anzahl = count($usern); //zählt die einträge in dem array
for ($i=0; $i <= $anzahl; $i++) {
//$usern[$i] = $usertest; //ist das nötig?
if ($usern[$i] = $nick) { //normalerweiße: if ($usertest = $nick) {
mysql_close();
header ("Location: register.php?fehler=1");
}
}
//Checkt die mails ab
$anzahl = count($userm);
for ($i=0; $i <= $anzahl; $i++) {
//$userm[$i] = $usermail;
if ($userm[$i] = $mail) {
mysql_close();
header ("Location: register.php?fehler=2");
}
}
|

12-10-2009, 12:44
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.309
|
|
PHP-Code:
if ($usern[$i] = $nick)
Du weist, wie man Variablen korrekt(!) vergleicht? Siehe auch hier
Peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
|

12-10-2009, 12:44
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
PHP-Code:
$sql = " SELECT user_name, user_mail FROM c_user WHERE user_name = '" . mysql_real_escape_string($nick) . "' OR user_mail = '" . mysql_real_escape_string($mail) . "' LIMIT 1 ";
$result = mysql_query($sql);
if ($row = mysql_fetch_assoc($result)) { if ($row['user_name'] == $nick) { header("Location: register.php?fehler=1"); exit; } if ($row['user_mail'] == $mail) { header("Location: register.php?fehler=2"); exit; } }
|

12-10-2009, 12:51
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Hallo,
erstmal zu dem Fehler: du verwendest das einfache = dort wo du das doppelte oder dreifache nehmen müsstest. Das einfache setzt die Variable links auf den Wert rechts und gibt diesen Wert zurück. Damit wird die Bedingung des if immer erfüllt, wenn der Wert rechts vom = nicht leer/falsch/null/0 ist. Zum Vergleichen immer mindestens das == nehmen!
Zur Herangehensweise: du rufst alle (!) in der DB befindlichen User ab, nur um dann alle einzeln hinsichtlich des Nicknames und der E-Mail-Adresse zu vergleichen? Warum benutzt du keine Where-Klausel, um nur die User abzurufen, die den gleichen Nickname oder (OR) die gleiche E-Mail-Adresse haben, dann würde dein Skript schon sehr viel schneller werden.
Warum prüfst du überhaupt, ob es diese Daten schon einmal gibt? Wenn du verhindern willst, dass in der DB etwas doppelt vorhanden ist, ist es viel besser, einen Unique Key zu vergeben. Immer wenn du dann was einfügen willst was schon da ist, wird der Vorgang abgebrochen und (je nach Schnittstelle) eine Fehlermeldung oder eine Exception hervorgerufen. Anhand des Fehlercodes weißt du dann "Aha, Unique Verletzung, also sag ich dem User, dass es das schon gibt"
Gruß,
Amica
|

12-10-2009, 12:51
|
|
Helix
Registrierter Benutzer
|
|
Registriert seit: Oct 2009
Beiträge: 5
|
|
Zitat:
Zitat von Kropff
PHP-Code:
if ($usern[$i] = $nick)
Du weist, wie man Variablen korrekt(!) vergleicht? Siehe auch hier
Peter
|
Das darf nicht wahr sein! Wie konnte ich nur so Blöd/blind sein!?
Der text ist jetzt geändert und es klappt wunderbar. Vielen dank. Vielen, vielen Dank!
@h3ll:
Sieht noch etwas verwirrend aus da ich mit dem MySql Syntax noch nicht sehr weit bin. Scheint aber unKomplizierter und einfach zu sein. Danke!
Edit:
Zitat:
Zitat von AmicaNoctis
Zur Herangehensweise: du rufst alle (!) in der DB befindlichen User ab, nur um dann alle einzeln hinsichtlich des Nicknames und der E-Mail-Adresse zu vergleichen? Warum benutzt du keine Where-Klausel, um nur die User abzurufen, die den gleichen Nickname oder (OR) die gleiche E-Mail-Adresse haben, dann würde dein Skript schon sehr viel schneller werden.
Warum prüfst du überhaupt, ob es diese Daten schon einmal gibt? Wenn du verhindern willst, dass in der DB etwas doppelt vorhanden ist, ist es viel besser, einen Unique Key zu vergeben. Immer wenn du dann was einfügen willst was schon da ist, wird der Vorgang abgebrochen und (je nach Schnittstelle) eine Fehlermeldung oder eine Exception hervorgerufen. Anhand des Fehlercodes weißt du dann "Aha, Unique Verletzung, also sag ich dem User, dass es das schon gibt"
Gruß,
Amica
|
Uff. Da hab ich jetzt noch viel zum nachdeken. Und zu lesen. Unique Key sagt mir garnichts. Ich werde mir das zu Herzen nehmen und versuchen das so zu machen wie du es beschrieben hast. Danke.
Geändert von Helix (12-10-2009 um 13:17 Uhr)
Grund: Ergänzung, Rechtschreipunk
|

12-10-2009, 13:09
|
|
Gunah
Registrierter Benutzer
|
|
Registriert seit: Oct 2009
Beiträge: 87
|
|
Zum Thema If-Schleife noch ein nützlicher Link ;-)
if-schleife.de
*scnr*
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|