Regi [PHP] prob

07/25/2012 18:46 Newbielein#1
Also, mein Problem ist, dass ich nicht weiß, wie ich abfragen kann ob eine ID bereits vorhanden ist...

Das jetzige Script lässt es zu, dass beliebig oft die gleiche ID eingetragen wird...

Script:


Kann mir wer helfen? Möglichst "einfach" bitte, so das auch ich das versteh ^_^

Danke
07/25/2012 18:54 . χaωe#2
Geht es um das user_id Feld ? Weil dann solltest du lieber bei der SQL-Tabelle das Feld auf 'Auto_Increment' stellen. Damit erhöt sich die ID bei jedem Eintrag um 1. Bei jeder Regestrierung einfach 0 reinzuschreiben ist doch sinnlos ?
Dennoch, um den Check zu machen ob der Benutzername schon vergeben ist einfach ne SQL-Abfrage starten und schauen ob er Werte zurück gibt.
Bsp:
PHP Code:
$userExists mysql_query("SELECT * FROM Users WHERE username = '".$username."'"); 
Dann schauen ob er ein Ergebniss zurück gibt :)
07/25/2012 19:10 kissein#3
Quote:
$username = mysql_escape_string($_POST['username']);
$password = mysql_escape_string(sha1($_POST['password']));
trim deine Post eingabe, ansonsten kann man den code mit einem leerzeichen killen


Quote:
$username = mysql_escape_string(trim($_POST['username']));
$password = mysql_escape_string(sha1(trim($_POST['password'])));
07/25/2012 19:16 . χaωe#4
Quote:
Originally Posted by kissein View Post
trim deine Post eingabe, ansonsten kann man den code mit einem leerzeichen killen
Wenn du mit der Sicherheit dieses Codes anfangen willst...
Er sollte einen HTML-Sonderzeichen Parser auf die empfangenen Variablen anwenden, ansonsten kann man dort sehr gut für Injections ansetzen.
(Zumindest) Das Passwort sollte schon vor dem Senden per JavaScript durch einen einfachen Algorhytmus (Blowfish o.Ä.) verschlüsselt werden, ansonsten kann man die Daten sehr leicht angeln. Das sollte man nebenbei vor allem bei LogIn-Skripts beachten...
Man sollte natürlich auch beachten das der Zeichensatz mit der Kollation der Tabelle übereinstimmt..
Aber ich denke das sind alles Dinge die man für den Anfang nicht braucht und sich früher oder später sowieso erarbeiten muss.
07/25/2012 19:22 NotEnoughForYou#5
Quote:
Originally Posted by . χaωe View Post
Wenn du mit der Sicherheit dieses Codes anfangen willst...
Er sollte einen HTML-Sonderzeichen Parser auf die empfangenen Variablen anwenden, ansonsten kann man dort sehr gut für Injections ansetzen.
(Zumindest) Das Passwort sollte schon vor dem Senden per JavaScript durch einen einfachen Algorhytmus (Blowfish o.Ä.) verschlüsselt werden, ansonsten kann man die Daten sehr leicht angeln. Das sollte man nebenbei vor allem bei LogIn-Skripts beachten...
Man sollte natürlich auch beachten das der Zeichensatz mit der Kollation der Tabelle übereinstimmt..
Aber ich denke das sind alles Dinge die man für den Anfang nicht braucht und sich früher oder später sowieso erarbeiten muss.
Schalte js aus und du sie werfen trotzdem unverschluesselt uebertragen
07/25/2012 19:27 . χaωe#6
Quote:
Originally Posted by NotEnoughForYou View Post
Schalte js aus und du sie werfen trotzdem unverschluesselt uebertragen
Sicher aber 97% der User im Internet haben ihr JS permanent aktiviert. Man kann nicht alles absichern, aber soweit wie man es kann sollte man es auch tuhen.
07/25/2012 19:37 Newbielein#7
ach ich hab mich schlecht ausgedrückt, mit id, meinte ich eig. Usernamen, (die id erhöht sich komischerweise bei jeder regi, trotz des scripts)
07/25/2012 19:40 . χaωe#8
Damit ist deine Frage jetzt geklärt ?
Ja ich denke mal das du bei der Tabelle das Feld auf Auto_Increment gestellt hast. Dann ist es egal ob das Skript etwas reinschreiben will, die Priorität von MySQL ist in dem Fall höher.
07/25/2012 19:42 Newbielein#9
nein ist sie nicht :S

Ich hatte mich nicht richtig ausgedrückt.

Ich möchte verhindern, das sich zwei User mit gleichem Namen registrieren
07/25/2012 19:59 . χaωe#10
Das habe ich doch in meinem ersten Post erwähnt, sogar mit teilcode. Einfach gucken ob er ein Ergebniss liefert, wenn ja nicht eintragen und Fehlermeldung ausgeben, wenn kein Ergebniss vorliegt eintragen...
07/25/2012 20:06 kissein#11
Quote:
Ich möchte verhindern, das sich zwei User mit gleichem Namen registrieren
Auf die Datenbanktabelle mit den usernamen dann den Index setzen um die suche zu beschleunigen/ db entlasten.

@. χaωe
das läuft bei mir automatisch mit ein um das Debugen möglichst gering zuhalten. Leerzeichen übersieht man leicht :/

PHP Code:
<?php
include ('mysql.php');

if (isset (
$_POST['submit'])) {
    
$username mysql_escape_string(trim($_POST['username']));
    
$password mysql_escape_string(sha1(trim($_POST['password'])));
    
    if (!empty (
$username) && !empty ($password)) {
        
$sql "SELECT username FROM Users WHERE username='".$username."'";
        
$nums mysql_num_rows(mysql_query($sql));
        if(!
$nums){
            
$sql "INSERT INTO Users (user_id,username,user_password,user_regdate) VALUES ('0','".$username."','".$password."','".time()."')";
            
$res mysql_query($sql);
            if(
$res)
                echo 
'You are now registered!';
        }
        else
            echo 
"username vorhanden";

    }else {
        echo 
'You must enter a username and a password!';}
}else {
    echo 
'<form action="register.php" method="post">
    Username: <input type="text" name="username" /><br />
    Password: <input type="password" name="password" /><br />
    <input type="submit" name="submit" value="Register" />
    </form>'
;

}
?>
07/25/2012 20:30 Newbielein#12
danke, funktioniert :) steige zwar noch nicht ganz dahinter, aber das kann ich mir daraus wohl alles erschließen :)

würd noch öfter thx drücken wenn ich könnt :)
07/25/2012 20:57 kissein#13
Das SQL Statement solltest du aber trotzdem anpassen, wie . χaωe bereits erklärt hat, macht es keinen sinn user_id jedesmal auf 0 zusetzen / autoincrement ist.


Quote:
$sql = "SELECT username FROM Users WHERE username='".$username."'";
Abfrage für den username
Quote:
$nums = mysql_num_rows( //liefert anzahl oder false
mysql_query( //liefert eine mysql resource oder false
$sql //Sql statment
));
die anweisung im quellcode einfach von rechts nach links lesen oder auf mehrere variable aufteilen, aber da es nur eine abfrage für die problemlösung reicht macht das vorhalten der rückgabewerte von mysql_query keinen sinn.
Quote:
if(!$nums){
in diesem fall wollen wir in $nums ein false haben -> username noch nicht vorhanden und mit negation wirds halt true
07/25/2012 22:15 tnd0#14
Quote:
Sicher aber 97% der User im Internet haben ihr JS permanent aktiviert. Man kann nicht alles absichern, aber soweit wie man es kann sollte man es auch tuhen.
versuchs einfach mal mit ssl, wozu gibts den mist denn wohl sonst.....
07/26/2012 08:00 Newbielein#15
danke, jetzt hab ichs verstanden :)