| Tutorials In diesem Forum könnt Ihr euere Fragen zu unseren Tutorials stellen. Die Tutorials sind unter http://www.php-resource.de/tutorials/ zu finden. Tutorialgesuche bitte im Forum Off-Topic stellen! |
 |
|

12-05-2009, 22:38
|
|
sebbb
Registrierter Benutzer
|
|
Registriert seit: May 2009
Beiträge: 7
|
|
ok, nächster versuch:
PHP-Code:
<?php echo ' <form method="post" action="register.php"> Benutzername:<br /><input name="username" type="text"><br> Passwort:<br /><input name="userpass" type="password" id="userpass"></p> Passwort wiederholen:<br /><input name="userpass2" type="password" id="userpass2"></p> E-Mail:<br /><input name="usermail" type="text" id="usermail"></p> <input name="register" type="submit" value="Benutzer anlegen"> </form> '; if(!isset($_POST['username']) || $_POST['username'] == ""){ echo 'Bitte einen Benutzernamen angeben!';} if(!isset($_POST['usermail']) || $_POST['usermail'] == ""){ echo 'Bitte eine E-Mailadresse angeben!';} if(!isset($_POST['userpass']) || $_POST['userpass'] == ""){ echo 'Bitte ein Passwort angeben!';} if($_POST['userpass'] != $_POST['userpass2']){ echo 'Passwörter stimmen nicht überein!';} else{ gucken ob username noch frei ist dann in datenbank schreiben dann entweder Erfolg! oder Es trat ein Fehler auf! } ?>
Das ist der Code. Das Problem ist dieser Teil:
PHP-Code:
else{ gucken ob username noch frei ist dann in datenbank schreiben dann entweder Erfolg! oder Es trat ein Fehler auf! }
Keine Ahnung wie das gehn soll.
|

12-05-2009, 23:04
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
gucken ob username noch frei ist -> SELECT und schauen ob es einen Treffer gibt.
in datenbank schreiben -> INSERT
dann entweder Erfolg! -> wenn INSERT geklappt hat
oder Es trat ein Fehler auf! -> wenn INSERT nicht geklappt hat
Falls die Spalte mit den Usernamen unique ist, kannst du auf das SELECT verzichten. Das INSERT wird fehlschlagen, wenn der Username schon vergeben ist (wegen uniqueness kann der selbe Name nicht nochmal eingefügt werden).
|

12-05-2009, 23:15
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Zitat:
Zitat von sebbb
PHP-Code:
else{
gucken ob username noch frei ist
dann in datenbank schreiben
dann entweder Erfolg!
oder Es trat ein Fehler auf!
}
Keine Ahnung wie das gehn soll.
|
Kucken, ob der Username noch frei ist - könnte man mit einem SELECT machen. Fragen, ob ein Datensatz mit username = eingabe existiert, Ergebnis auswerten.
Geht allerdings auch einfacher - in dem man die Spalte in der DB-Tabelle gleich als unique definiert. Dann schlägt der INSERT einfach fehl, wenn es schon einen Datensatz mit diesem Namen gibt - und auch diese Ursache findet man heraus, in dem man den Fehlercode analysiert, dann kann man dem Nutzer entsprechende Rückmeldung geben.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

13-05-2009, 20:26
|
|
sebbb
Registrierter Benutzer
|
|
Registriert seit: May 2009
Beiträge: 7
|
|
Danke für die Hilfe. Meint ihr etwas in der Art?
PHP-Code:
else{ $username = $_POST['username']; $userpass = md5($_POST['userpass']); $usermail = $_POST['usermail']; if($insert = @mysql_query("INSERT INTO USERS SET UserName = '$username', UserPass = '$userpass', UserMail = '$usermail'")) { echo 'Erfolg!';} else{ echo 'Fehler!';} }
Wenn ichs versuch sagt er "Fehler". Die Spalte ist aber unique.
|

13-05-2009, 20:29
|
|
PHP-Desaster
PHP Expert
|
|
Registriert seit: Mar 2006
Beiträge: 3.104
|
|
Stichwort: SQL-Injection
|

13-05-2009, 20:31
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Das @ raus, Kontrollausgabe des generierten Query-Strings machen, und vor allem, mysql_error nutzen.
Sowas steht übrigens auch in guten Grundlagen-Tutorials - also solltest du deine Weigerung, ein solches mal durchzuarbeiten, wohl mal aufgeben.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

13-05-2009, 21:55
|
|
sebbb
Registrierter Benutzer
|
|
Registriert seit: May 2009
Beiträge: 7
|
|
Ok, vielen Dank. Jetzt klappts. Das @ war zu viel.
Ich hab aber noch eine Frage: Bei meiner gesicherten Seite benutze ich folgendes:
PHP-Code:
if (!logged_in()) echo '<meta http-equiv="refresh" content="0; URL=login.php">'
Wenn man diese Seite direkt über die URL aufruft und nicht eingeloggt ist, wird man zwar weitergeleitet aber erst nach kurzem Warten, so dass man schon einen Blick auf die Seite werfen kann.
header("location:") kann ich nicht benutzen, weil die sessionhelpers.inc.php schon die Headerangaben gesendet hat.
Gibt es noch eine andere Möglichkeit um auf die Login-Seite zu linken falls man nicht eingeloggt ist?
Geändert von sebbb (13-05-2009 um 22:04 Uhr)
|

13-05-2009, 23:44
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Zitat:
Zitat von sebbb
Wenn man diese Seite direkt über die URL aufruft und nicht eingeloggt ist, wird man zwar weitergeleitet aber erst nach kurzem Warten, so dass man schon einen Blick auf die Seite werfen kann.
|
Dann gebe "die Seite" in so einem Falle nicht aus.
Zitat:
|
Gibt es noch eine andere Möglichkeit um auf die Login-Seite zu linken falls man nicht eingeloggt ist?
|
Wozu überhaupt weiterleiten?
Das Loginformular kann an der Stelle angezeigt werden, an der sich der Nutzer gerade befindet.
if(!eingeloggt) {
// login-formular ausgeben
}
else {
// seiteninhalt
}
Natürlich muss der Rest der Seite nicht komplett per PHP ausgegeben werden - zum einen gibt es die Möglichkeit, den PHP-Bereich zu verlassen, und zum anderen täte es auch ein Beenden des Scriptes nach der Ausgabe des Formulars.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

14-05-2009, 10:44
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.925
|
|
Zitat:
|
header("location:") kann ich nicht benutzen, weil die sessionhelpers.inc.php schon die Headerangaben gesendet hat.
|
Das ist doch Unsinn!
Wieso sollten SessionHeader eine Weiterleitung verhinden?
Die Sorgen liegen ehr an sowas:
Zitat:
PHP-Code:
<?php
echo '
<form method="post" action="register.php">
Benutzername:<br /><input name="username" type="text"><br>
Passwort:<br /><input name="userpass" type="password" id="userpass"></p>
Passwort wiederholen:<br /><input name="userpass2" type="password" id="userpass2"></p>
E-Mail:<br /><input name="usermail" type="text" id="usermail"></p>
<input name="register" type="submit" value="Benutzer anlegen">
</form>
';
if(!isset($_POST['username']) || $_POST['username'] == ""){
echo 'Bitte einen Benutzernamen angeben!';}
if(!isset($_POST['usermail']) || $_POST['usermail'] == ""){
echo 'Bitte eine E-Mailadresse angeben!';}
if(!isset($_POST['userpass']) || $_POST['userpass'] == ""){
echo 'Bitte ein Passwort angeben!';}
if($_POST['userpass'] != $_POST['userpass2']){
echo 'Passwörter stimmen nicht überein!';}
else{
gucken ob username noch frei ist
dann in datenbank schreiben
dann entweder Erfolg!
oder Es trat ein Fehler auf!
}
?>
|
Ein ganz klarer Verstoß gegen das EVA Prinzip!!
V und A vertauscht.
|

14-05-2009, 15:15
|
|
sebbb
Registrierter Benutzer
|
|
Registriert seit: May 2009
Beiträge: 7
|
|
Auf die Idee bin ich gar nicht gekommen. Jetzt ist es auf jeden Fall besser. Danke!
|
|
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
|