Login mit Hilfe von PHP und mySQL

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #31
    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.

    Kommentar


    • #32
      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).

      Kommentar


      • #33
        Zitat von sebbb Beitrag anzeigen
        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.

        Kommentar


        • #34
          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.

          Kommentar


          • #35
            Stichwort: SQL-Injection

            Kommentar


            • #36
              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.

              Kommentar


              • #37
                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?
                Zuletzt geändert von sebbb; 13.05.2009, 21:04.

                Kommentar


                • #38
                  Zitat von sebbb Beitrag anzeigen
                  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.

                  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.

                  Kommentar


                  • #39
                    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:
                    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.
                    Wir werden alle sterben

                    Kommentar


                    • #40
                      Auf die Idee bin ich gar nicht gekommen. Jetzt ist es auf jeden Fall besser. Danke!

                      Kommentar

                      Lädt...
                      X