Ankündigung

Einklappen
Keine Ankündigung bisher.

Script funktioniert nicht

Einklappen

Neue Werbung 2019

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

  • Script funktioniert nicht

    Hallo,

    mein Script will nicht wie ich. Habe schon einige Fehler gefunden aber nun bin ich ratlos, vielleicht fällt euch was auf? Den Aspekt Sicherheit und die Schnittstelle zur DB bitte ich zu übersehen. Jedenfalls sagt er mir immer "Fehler beim Speichern des Benutzernames. Bitte wende dich an den Administrator" Also muss es am Eintragen liegen, aber ich habe alles geprüft was mir ein fiel.

    DB = login
    Tabelle = user
    Spalten = user_id, user_name, user_password, user_email, user_level

    PHP-Code:
    <?php

    $verbindung 
    mysql_connect("localhost""root" ""
    or die(
    "Verbindung zur Datenbank konnte nicht hergestellt werden"); 

    mysql_select_db("login") or die ("Datenbank konnte nicht ausgewählt werden"); 

    /*$verbindung = mysql_connect("localhost", "root" , "", "login") 
     *or die("Verbindung zur Datenbank konnte nicht hergestellt werden"); 
     *
     *Gab ebenfalls den Fehler aus.
     */

    $username trim($_POST['account']);
    $password trim($_POST['password']);
    $password2 trim($_POST['password2']);
    $email trim($_POST['email']);

    if(
    $password == $password2)
        { 
            if (
    $username != "")
                {
                    if (
    $email == "")
                        {
                            
    header("Location: ".mailerror.php); 
                            exit(); 
                        }
                }
            else
                {
                    
    header("Location: ".usernameerror.php); 
                    exit();   
                }
        } 
    else
        {
            
    header("Location: ".passerror.php); 
            exit();  
        }
        
    $password md5($password); 

    $result mysql_query("SELECT user_id FROM user WHERE user_name LIKE '$username'"); 
    $menge mysql_num_rows($result); 

    if(
    $menge == 0
        { 
        
    $eintrag "INSERT INTO user (user_name, user_password, user_email, user_level) VALUES ('$username', '$password', '$email'. '0')"
        
    $eintragen mysql_query($eintrag); 

        if(
    $eintragen == true
            { 
            echo 
    "Benutzername <b>$username</b> wurde erstellt."
            } 
        else 
            { 
            echo 
    "Fehler beim Speichern des Benutzernames. Bitte wende dich an den Administrator"
            } 
        } 
    else 
        { 
            
    header("Location: ".usererror); 
            exit();
        } 
    ?>


  • #2
    Dreh mal dein error_reporting auf E_ALL.
    Gib dir das query doch mal per echo aus und führ es direkt in der db aus.

    Abgesehen davon ist das Script was du da hast wirklich sehr sehr mies vom Sicherheitsaspekt betrachtet.. lauter veraltete und nicht geprüfte Eingaben..
    No Sacrifice , no Glory--

    Kommentar


    • #3
      Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in C:\xampp\htdocs\lasvegas\neu\include\config.inc.ph p on line 13

      Danke das hilft schonmal, also nimmt er mein mysql nimmer an. Muss ich wohl oder übel auf mysqli umsteigen ^^ und ich hoffte es umgehen zu können

      Kommentar


      • #4
        na hab den fehler gefunden Danke dir, Query direkt in der DB ausführen hat geholfen da hat sich ein Punkt statt Komma eingeschlichen.

        Vielen Dank

        Kommentar


        • #5
          Nene.. dass diese Schnittstelle schlecht ist hast du hoffentlich selbst erkannt. Dafür gibt es eine neue:
          PDO http://php.net/manual/de/ref.pdo-mysql.php

          Dadurch stürzt dein Programm nicht ab, deprecated = Es wird bald entfernt werden. (Steht ja da auch)

          Gib dir mal das query an folgender Stelle mit einem echo aus:
          PHP-Code:
          $eintrag "INSERT INTO user (user_name, user_password, user_email, user_level) VALUES ('$username', '$password', '$email'. '0')"
          Und führ es direkt in deinem phpmyadmin aus.


          Zitat von lordhelix Beitrag anzeigen
          Muss ich wohl oder übel auf mysqli umsteigen ^^ und ich hoffte es umgehen zu können
          wohl oder übel ?
          Dein Script ist sicherheitstechnisch komplett für n Jockel..
          No Sacrifice , no Glory--

          Kommentar


          • #6
            @Sakron

            I know ^^

            Das Script bzw die komplette Seite, habe ich vor , noch einmal komplett checken zu lassen bzw zu korriegieren von Experten bevor sie Online geht. Ich möchte nur insoweit alles testen und vorbereitet haben. mysql werde ich dann austauschen lassen gegen mysqli. Da ich mit PDO genausowenig klar komme.

            Danke denoch für den Hinweis.

            Kommentar


            • #7
              Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in C:\xampp\htdocs\lasvegas\neu\include\config.inc.ph p on line 13
              http://php.net/manual/en/migration55.deprecated.php

              Und dein Script ist offen wie ein Scheunentor! http://php-de.github.io/jumpto/sql-injection/

              Nutze wie schon erwähnt PDO (oder mysqli) und "prepared Statements", damit erledigst du beide (depreciate und Injection).

              Und Frage noch:

              PHP-Code:
              $eintrag "INSERT INTO user (..., user_level) VALUES (... '0')"
              Warum ist dein Userlevel '0' ein String? Verwende doch die Zahl 0 als Zahl (zB TINYINT)

              LG
              Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
              PHP.de Wissenssammlung | Kein Support per PN

              Kommentar


              • #8
                "Durchzuchecken" reicht da nicht, eher komplett neu schreiben :P
                No Sacrifice , no Glory--

                Kommentar


                • #9
                  -.- Na mach ich mir die Mühe grad umsonst oder wie? Dachte mir da muss dann einfach nur jemand mysql in PDO umschreiben

                  Kommentar


                  • #10
                    userlevel habe ich als int in der DB

                    Kommentar


                    • #11
                      Zitat von lordhelix Beitrag anzeigen
                      -.- Na mach ich mir die Mühe grad umsonst oder wie? Dachte mir da muss dann einfach nur jemand mysql in PDO umschreiben
                      Jein, schau in die Doku und schau dir die Syntax an. Bei Prepared Statements bedarf es etwas mehr an Tipperei. http://php.net/manual/en/class.pdostatement.php

                      Zitat von lordhelix Beitrag anzeigen
                      userlevel habe ich als int in der DB
                      Dann nutze es in der query doch auch so und nicht als String also 1 statt '1'.

                      PHP-Code:
                      $password md5($password); 
                      Falls du das gerade neu machst, md5() ist auch veraltet (unsicher) siehe hier, da steht auch was man stattdessen nehem soll:
                      http://php.net/manual/de/faq.passwor...words.fasthash

                      Und was du hier bei header machst, ist auch interessant, wird so nicht funktionieren, wenn dann den Dateinamen auch als String angeben und gem. HTTP-Spezifikation wird eine komplette, absolute URI verlangt.
                      PHP-Code:
                      header("Location: ".mailerror.php);  
                      // ...
                                      
                      header("Location: ".usernameerror.php); 
                      LG
                      Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                      PHP.de Wissenssammlung | Kein Support per PN

                      Kommentar

                      Lädt...
                      X