Ankündigung

Einklappen
Keine Ankündigung bisher.

Keine datenbank verbindung

Einklappen

Neue Werbung 2019

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

  • Keine datenbank verbindung

    Hallo ich bin noch ein kleiner Anfänger aber ich weiß schon einige Grundlagen von HTML und PHP nun möchte ich aber ein Regierungsprotokoll auf meiner Hompage einbringen und den neuen User gleich auf einer Datenbank speichern. der Login läuft Fehler frei nur seit Tagen hänge ich schon an der Registrierung für neue Mitglieder fest. Nun ist meine frage kann mich einer von diesen Leid erlösen und mir Typs geben oder den Code umschreiben das er Funktioniert ich bin echt am verzweifeln und ich habe schon alle möglichen Varianten ausprobiert.
    Wenn ich das ausgefüllte Formular abschicke kommt das dieser fehler:
    1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Alter,Geschlechz,PLZ)VALUES('tester','e22a63fb768 74c99488435f26b117e37','test@go' at line 1
    PHP-Code:
    <?php
    $link 
    mysql_connect("localhost""XxX""XxX");

    mysql_select_db("zeliosprofil"$link);
    echo 
    mysql_errno($link) . ": " mysql_error($link). "\n";
    require(
    "connect.inc.php");
    error_reporting(-1);
    ini_set('display_errors'1);
        
    $username $_POST['username'];
        
    $pass md5($_POST['password']);
        
    $pass2 md5($_POST['password2']);
        
    $mail $_POST['email'];
        
    $mail2 $_POST['email2'];
        
    $jahr $_POST['alter'];
        
    $postleit $_POST['stadtname'];
        
    $anrede $_POST['sex'];

    if(
    $pass != $pass2 OR $mail != $mail2 OR $username == "" OR $pass == "" OR $mail == "")
        {
        echo 
    "Eingabefehler. Bitte alle Felder korekt ausfüllen. <a href=\"eintragen.html\">Zurück</a>";
        exit;
     }else{

     
    $result = @mysql_query("SELECT id FROM login WHERE Username LIKE '$username'"$link);
     echo 
    mysql_errno($link) . ": " mysql_error($link) . "\n";
     
    $menge mysql_num_rows($result);
     if(
    $_POST['username'] == $result['Username']) {
     echo 
    '<p align="center">Sorry, dieser Benutzername ist leider schon vergeben!<br /><br /><a href="registrierung.php">Zurück</a></p>';
     die;
     }else{

     
    $eintrag "INSERT INTO login(Username,Userpasswort,Email,Alter,Geschlechz,PLZ)VALUES('$username','$pass','$mail','$jahr','$anrede','$postleit',)";
     
    $eintragen = @mysql_query($eintrag);

     if(
    $eintragen == true)
         {
     echo 
    '<p align="center">Der neue Benutzer wurde erfolgreich angelegt!<br /><br /><a href="index.php">Zelios Gaming Community</a></p>';
         }
     else{
     echo 
    '<p align="center">
     Beim Anlegen des neuen Benutzers trat leider ein Fehler auf!<br /><br /><a href="AGBs.html">Titel</a></p>'
    ;
     echo 
    mysql_errno($link) . ": " mysql_error($link). "\n";
     }
     }
     }
     
    ?>

  • #2
    Stichwort "reservierte SQL-Wörter" ... Alter ist ein Befehl an die Datenbank und sollte daher nicht als Spaltenname verwendet werden ... außerdem macht die Altersangabe datenbank-technisch sowieso keinen Sinn, weil sich das Alter ja ständig ändert (wenn auch nur um Sekunden/Minuten ....)
    Sinnvoller wäre also die Angabe des Geburtsjahres - das ändert sich nämlich nicht

    außerdem solltest du gerade JETZT, wo du mit PHP beginnst, nicht mehr die uralte mysql_-Erweiterung lernen, sondern besser mysqli oder besser gleich pdo
    "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste [IMG]http://www.php.de/core/images/smilies/icon_lol.gif[/IMG]

    Kommentar


    • #3
      Erst einmal danke für die schnelle Antwort ich hatte in der Nacht die Frage gestellt und jetzt ist schon eine Antwort da.
      Das mit dem Alter habe ich jetzt echt nicht gemerkt obwohl ich mir schon soviel darüber belesen habe.
      Wie sieht es mit den Rest vom Code aus ist der in Ordnung so oder muss da noch was geändert werden.
      Wäre toll wenn lieber gleich alles aufgedeckt wird weil ich erst heute Abend wieder am Laptop rankomme.
      Danke noch mal für die Antwort

      Kommentar


      • #4
        oder muss da noch was geändert werden
        ja, so einiges, auch wenn er funktioniert.

        - mysql_ Erweiterung ist veraltet, nutze mysqli_ oder besser PDO http://php.net/manual/en/migration55.deprecated.php

        - @ Zeichen weg damit, nicht Fehler unterdrücken sondern behandeln

        - SQL injection Gefahr, du übernimmst Daten völlig ungefiltert von aussen in deine query rein http://php-de.github.io/jumpto/sql-injection/ Dazu am besten gleich prepared statments ansehen (mysqli_ / PDO)

        - md5() ist schnee von gestern, nutze besser die sha() Hash-Funktionen
        http://tomdalling.com/blog/security/...than-a-second/
        http://de.wikipedia.org/wiki/Secure_...m#Empfehlungen

        - Codeformatierung (Einrückung) ist nicht ideal, mMn so schlecht lesbar

        - Error Reporting am besten ganz zu Beginn des Scriptes aktivieren, da Fehler nur ab dann angezeigt werden.

        - Und das du die Spaltennamen am besten mit `backticks` versiehst um mysql klarzumachen das es um eben solche geht hast du jetzt ja schon mitbekommen (`Alter`).

        Das wäre mir soweit mal aufgefallen.

        LG
        The string "()()" is not palindrom but the String "())(" is.

        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


        • #5
          Zitat von hausl Beitrag anzeigen
          - md5() ist schnee von gestern, nutze besser die sha() Hash-Funktionen
          http://tomdalling.com/blog/security/...than-a-second/
          http://de.wikipedia.org/wiki/Secure_...m#Empfehlungen
          Die Empfehlung ist quatsch. MD5 ist genauso gut geeignet oder wenig geeignet wie SHA. Beide Algorithmen sind einfach zu schnell. Die anderen derzeit bekannten Problem spielen keine Rolle für Passwörter.

          Siehe: http://php.net/manual/de/faq.passwords.php

          Kommentar


          • #6
            ich möchste noch wissen was die connect.php beinhaltet.

            die passwörter vor dem hashen vergleichen, mach ich jedenfalls so,.
            den geposten code nicht zufällig einrücken.

            nach dem möglichen verbindungsfehler in zeile 4 nicht einfach den code weiterlaufen lassen.

            ich weiss nicht ob LIKE geeignet ist um useranmen zu vergeleichen.

            Kommentar


            • #7
              Zitat von erc Beitrag anzeigen
              Die Empfehlung ist quatsch. MD5 ist genauso gut geeignet oder wenig geeignet wie SHA. Beide Algorithmen sind einfach zu schnell. Die anderen derzeit bekannten Problem spielen keine Rolle für Passwörter.

              Siehe: http://php.net/manual/de/faq.passwords.php
              Vermutlich einfach alt/überholt, danke für den Hinweis/Link, dh in dem Fall dann password_hash() und password_verify().

              Die Funktion password_hash() generiert ein zufälliges Salt sollte beim Aufruf der Funktion keines übergeben werden. Dies ist generell der einfachste und sicherste Ansatz.
              Hab den Link in meiner Signatur ergänzt, der ist lesenswert!

              LG
              The string "()()" is not palindrom but the String "())(" is.

              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
                Ok die Typs werde ich heute Abend mal umsetzen und euch ein feedback aber was meint ihr mit cods einrücken ?


                MOMA in der connection php war vorher der Zugang zur Datenbank drin durch das ganze rum probieren und ersetzen ist mir gar nicht aufgefallen das ich das jetzt doppelt drin habe

                Kommentar


                • #9
                  Jetzt habe ich das alles geändert ausser das Hashen das mach ich später erstmal möchte ich endlich das hinbekommen. Ich bin auf mysqli umgestiegen weil PDO meine Datenbank nicht angenommen hat jetzt bekomme ich aber wieder ein anderen Fehler ausgespuckt was läuft denn jetzt wieder falsch?

                  Fehler:
                  Notice: Undefined variable: eintragen in C:\xampp\htdocs\Zelios\eintragen.php on line 32

                  Warning: mysqli::query(): Empty query in C:\xampp\htdocs\Zelios\eintragen.php on line 32

                  Beim Anlegen des neuen Benutzers trat leider ein Fehler auf!


                  Zeile 32 ist
                  ist die if anweisung unter $eintragen.



                  PHP-Code:
                  <?php
                  error_reporting
                  (-1);
                  $db = new mysqli(........);
                  if (
                  mysqli_connect_errno()) {
                      die (
                  'Konnte keine Verbindung zur Datenbank aufbauen: '.mysqli_connect_error().'('.mysqli_connect_errno().')');
                  }


                  ini_set('display_errors'1);
                      
                  $username $_POST['username'];
                      
                  $pass md5($_POST['password']);
                      
                  $pass2 md5($_POST['password2']);
                      
                  $mail $_POST['email'];
                      
                  $mail2 $_POST['email2'];
                      
                  $jahr $_POST['alter'];
                      
                  $postleit $_POST['stadtname'];
                      
                  $anrede $_POST['sex'];

                  if(
                  $pass != $pass2 OR $mail != $mail2 OR $username == "" OR $pass == "" OR $mail == "")
                      {
                      echo 
                  "Eingabefehler. Bitte alle Felder korekt ausfüllen. <a href=\"eintragen.html\">Zurück</a>";
                      exit;
                   }else{
                   
                  $sql "SELECT ID FROM login WHERE Username ='$username'";
                   
                  $result $db->query($sql);
                   
                  $menge mysqli_num_rows($result);
                   if( 
                  $menge != 0) {
                   echo 
                  '<p align="center">Sorry, dieser Benutzername ist leider schon vergeben!<br /><br /><a href="registrierung.php">Zurück</a></p>';
                   die;
                   }else{
                   
                  $eintrag "INSERT INTO login(Username,Userpasswort,Email,Bday,Geschlechz,PLZ)VALUES('$username','$pass','$mail','$jahr','$anrede','$postleit',)";
                  if(
                  $db->query($eintragen))
                       {
                   echo 
                  '<p align="center">Der neue Benutzer wurde erfolgreich angelegt!<br /><br /><a href="index.php">Zelios Gaming Community</a></p>';
                       }
                   else{
                   echo 
                  '<p align="center">
                   Beim Anlegen des neuen Benutzers trat leider ein Fehler auf!<br /><br /><a href="AGBs.html">Titel</a></p>'
                  ;
                   echo 
                  mysqli_errno($db) . ": " mysqli_error($db). "\n";
                   }
                   }
                   }
                   
                  ?>

                  Kommentar


                  • #10
                    Notice: Undefined variable: eintragen in C:\xampp\htdocs\Zelios\eintragen.php on line 32
                    Steht doch da, $eintragen gibt es nicht. Was ist daran unklar?

                    PHP-Code:
                    $eintrag "INSERT INTO ..."
                    if($db->query($eintragen)) 
                    $eintrag ... $eintragen

                    Bitte lerne Fehlermeldungen zu lesen, das ist nicht so schwer, vor allem wenn man sowas programmiert, ist das nicht mehr schwer.
                    The string "()()" is not palindrom but the String "())(" is.

                    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


                    • #11
                      sql injection?
                      sonst haste ja - bis aufs einrücken - alles gepostete beachtet, sagt ein flüchtiger blick.

                      Kommentar


                      • #12
                        leider ist es nicht das einziege was noch anliegt ich bekomme jetzt ein neuen Fehler

                        1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1

                        anscheint fehlt eine klammer oder ich habe das falsch interpretiert wiest ihr wo jetzt der Teufel wieder drin steckt
                        ich mache echt 3 kreuze wenn ich das abgeschlossen habe

                        Kommentar


                        • #13
                          ich halte ja am ende das ,) für falsch.

                          Kommentar


                          • #14
                            Wow ein einziges Koma macht alles unbrauchbar jetzt läuft es endlich und ich freu mich wie bolle das es endlich läuft ich danke allen die mir geholfen haben vielmals.

                            Kommentar


                            • #15
                              Wow ein einziges Koma macht alles unbrauchbar
                              An der falschen Stelle.. natürlich
                              The string "()()" is not palindrom but the String "())(" is.

                              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