Benutzername und Email in DB überprüfen

Hallo,

irgendetwas stimmt nicht, er überprüft mir nicht den User bzw. die Emailadresse gleichzeitig!

Möchte wenn sich ein user neu anmeldet neu registriert möchte ich das die datenbank abgefragt wird ob der user bzw. die Emailadresse schon vorhanden ist.

register.php (teil davon)

if ($form == 1) {
include ("config.php");
$user_result = mysql_query("SELECT * FROM $user_tabelle WHERE name = '$reg_name' OR '$reg_mail'", $mysql_ce);
if (mysql_affected_rows($mysql_ce) > 0){
     $fehlen = $fehlen."<LI>Benutzername odrer Mailadresse vorhanden";
	 echo'<div align="center"><font color="#FF0000" size="2" face="Arial, Helvetica, sans-serif">Der angegeben Benutzername oder mailadresse ist leider schon vorhanden</font></div>';
}

FEHLER FEHLER FEHLER FEHLERFEHLER FEHLER !!!


Wenn ich aber diesen code verwende funktioniert aber nur die USER abfrage aber nicht ob die Mail vorhanden ist:

if ($form == 1) {
include ("config.php");
$user_result = mysql_query("SELECT * FROM $user_tabelle WHERE name = '$reg_name'", $mysql_ce);
if (mysql_affected_rows($mysql_ce) > 0){
     $fehlen = $fehlen."<LI>Benutzername vorhanden";
	 echo'<div align="center"><font color="#FF0000" size="2" face="Arial, Helvetica, sans-serif">Der angegeben Benutzername ist leider schon vorhanden</font></div>';
}

also mache ich noch was Falsch mit der ‘$reg_name’ OR ‘$reg_mail’", $mysql_ce

aber was ???

Fehlermeldungen nicht unterschlagen. Diese gibt es nicht um dich zu ärgern, sondern um dir Mitzuteilen wo was falsch gelaufen ist. Also diese bitte mitposten :wink:

und php-code bitte in phptags posten:
[noparse]

code

[/noparse]

[QUOTE=mitch24]also mache ich noch was Falsch mit der ‘$reg_name’ OR ‘$reg_mail’", $mysql_ce

aber was ???[/QUOTE]
Statt

"SELECT * FROM $user_tabelle WHERE name = '$reg_name' OR '$reg_mail'"

sollte es sein

"SELECT * FROM $user_tabelle WHERE name = '$reg_name' OR **[U]mail[/U]** = '$reg_mail'"

oder statt “mail” dann eben der entsprechende Spaltenname analog zu “name” beim Usernamen.

*** Edit ***

Wobei es für den User natürlich nicht so elegant ist, wenn er als Hinweis bekommt, dass Name ODER Adresse schon vergeben sind. Ich würde die Abfragen wohl getrennt machen.

Und bitte die Variablen escapen! Aktuell teilst du SQL nicht einmal mit das es sich um Strings handelt.

Ausgehend von deinen Variablen wäre nachfolgendes korrekt in der Annahme, dass deine Variablen vorher sanitized wurden.

$queryString = "SELECT * FROM {$user_tabelle} where `name` = '{$reg_name}' or `mail` = '{$reg_mail}'";

Falls dein Benutzername eine eMail sein kann, müsstest du die Abfrage wie folgt abändern.

$queryString = "SELECT * FROM {$user_tabelle} where `name` = '{$reg_name}' or `name` = '{$reg_mail}'";

Welche Schreibweise du für die Variablen nutzt ist natürlich dir überlassen. Auch ob du noch die veraltete MySQL Extension verwendest. Diese wird mit voraussichtlich PHP 5.6 nicht mehr funktionieren. Seit 5.5 ist sie bereits deprecated.

Benutzer stattdessen die PDO Library.

Schön wäre eine Verwendung von mysqli oder sogar PDO.
Wenn du Prepared Statements verwendest, brauchst du dir keine Gedanken über das Escapen machen, da die Parameter unabhängig von der eigentlichen Query an den Server gesendet werden.
http://php.net/manual/de/book.pdo.php

Ansonsten, du benutzt das li-Tag, aber keine ul? Du schließt li auch noch nicht einmal.


<ul>
    <li>1. Element</li>
    <li>2. Element</li>
</ul>

Die Verwendung von Late-Binding finde ich gut :slight_smile:


//Diese Zeile kannst du abkürzen:
$fehlen = $fehlen."<LI>Benutzername odrer Mailadresse vorhanden";

//Kurzer Weg:
$fehlen .= "<li>Benutername oder Mailadresse vorhanden</li>";

Das wars dann für den ersten Blick :slight_smile:

Ein Framework verwenden!

Was mir noch einfällt:
Speichere deine config.php bitte nicht im gleichen Ordner, sondern aus Sicherheitsgründen in einem Ordner, der nicht über die URL ereichbar ist.
@TheDarkRose , mach doch auch Vorschläge für Frameworks.

Symfony2, CakePHP, Yii, Zend, …

Wobei ich selbst mit Symfony2 arbeite.

Damit habe ich auch schon gute Ergebnisse erzielt.
Als O/R-M Lösung nutze ich gerne Doctrine, welches auch gut in Symfony2 integriert ist.
Für die View benutze ich twig.

Doctrine und Twig sind eh die Standardkomponenten in Symfony2 ^^

Dann noch FOSUserBundle für die Userverwaltung, FOSRestBundle falls man eine API macht, FOSCommentBundle, wenn man Kommentare braucht, …

Auf MySQLi würde ich nicht mehr setzen. Das wird in absehbarer Zeit sicherlich auch von PDO abgelöst.

Oder direkt Doctrine, wenn man schon nicht ein komplettes Framework einsetzt.

Man kann auch direkt Dynamit nehmen… Doctrine für eine kleine App ist eindeutig mit Kanonen auf Spatzen schießen.

Und nicht immer will man ORM nutzen. :wink: Da genügt plain PDO.