Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Anmeldemaske mit Weiterleitung

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Anmeldemaske mit Weiterleitung

    Sehr geehrte php-Gemeinde,

    seit mehreren Tagen, Büchern, Kaffee, Bier und Schnaps liegen nun meine Nerven endgültig blank! Ich habe folgendes Problem:

    Da ich im Rahmen einer Studienarbeit ein Onlineportal erstelle und das mit einem Anmeldeformular von statten gehen soll und ich jetzt am nervlichen Ende angekommen bin, brauche ich dringend Hilfe!

    Ich habe eine html geschrieben, in der die zwei Eingabefelde name="benutzer" und name="passwort" sind. Ein Button, der die ganze Sache losschickt, hier werden die Varbiablen an das php-Skript gesendet.

    Diese php soll die eingegebenen Daten mit den Einträgen der mysql-Datenbank vergleichen. Also Benutzer und dazugehöriges Passwort.

    PHP-Code:
    //Variablen-------------------------------
     
    $benutzer = ($_POST["benutzer"]);
    $passwort = ($_POST["passwort"]);
     
     
    //Verbindungsaufbau-----------------------
            
    $verbindung mysql_connect("localhost","root","");
            if (!
    $verbindung)
            {
            echo 
    " Verbindung unterbrochen!";
            }else{
            echo 
    "<h1>Verbindung besteht zur Datenbank!</h1>";
            }
     
    //Prüfung des Formulars-------------------
     
            
    if($benutzer == "")
            { echo 
    "<p>Bitte Benutzername eingeben</p>";
            }
            else
            {echo 
    "<p>Benutzername ist:$benutzer</p>";
            }
     
            if(
    $passwort == "")
            { echo 
    "<p>Bitte Passwort eingeben</p>";}
            else
            {echo 
    "<p>Passwort ist:$passwort</p>";}
    //Datenbank vergleich---------------------
                         
    $suche "
                                     SELECT Benutzer, Passwort
                                     FROM jos_mitwirkende   
                                     WHERE (Benutzer = 
    $benutzer AND Passwort = $passwort)";
     
                     
    $erg mysql_query($suche);
                     
    $row mysql_fetch_array($erg);
                          echo 
    $row;
     
    //Hier war mal ne if, die aber nicht ging, bzw nichts gemacht hat!
          
    mysql_close($verbindung);
     
    ?> 
    Dieses Skript gibt erstmal nur Fehlermeldungen aus und macht gar nichts, das mich weiterbringt!

    Ich muss dazu sagen, dass ich absoluter Neuling und Anfänger bin, was php und mysql angeht!

    Da muss doch ein if-Abfrage rein, streng nach dem Motto: "Wenn Benutzer und Passwort da, dann gehts weiter!

    Aber ich kriegs nicht auf die Reihe! Kann mir vielleicht jemand helfend und unter die virtuellen Arme greifen, oder "sinnvolle" für Anfänger brauchbare Links geben?

    Ich wäre sehr sehr sehr zum Dank verpflichtet!!!!!


    Bedanke mich schon im voraus für Eure Hilfe!

    Viele Grüße
    Groovemachine


  • #2
    Was denn für Fehlermeldungen?

    Kommentar


    • #3
      1. Fehlt mysql_select_db() um erstmal eine Datenbank auszuwählen! Dies solltest du nach mysql_connect() aufrufen.

      2. Sind da noch so einige sicherheitskritische Lücken in deinem Code.
      - Am Anfang wird einfach auf $_POST[...] zugegriffen, angenommen die Variablen existieren nicht wird ein Fehler ausgeworfen. Die Klammern um die Variablen sind total unnötig!
      - bei dir wäre so SQL Injection möglich. Dieses Thema solltest du dir auf jeden Fall noch zu Gemüte führen wenn du das Skript online stellen möchtest.

      Kommentar


      • #4
        testen wa die neue Forumfunktion doch hier auch gleich mal

        [man]SQL Injection[/man]

        [edit]
        schade geht nicht dann halt manuell: PHP: SQL Injection - Manual

        Kommentar


        • #5
          Ausserdem gehören Zeichenketten in Abfragen in Anführungszeiche. Passwörter sollte man nie als Klartext speichern.
          Zitat von Flor1an
          bei dir wäre so SQL Injection möglich
          Kannst du mir sagen, wie SQL Injection in diesem Script (ausschliesslich SELECT) möglich sein soll?
          Gruss
          L

          Kommentar


          • #6
            Zitat von lazydog Beitrag anzeigen
            Kannst du mir sagen, wie SQL Injection in diesem Script (ausschliesslich SELECT) möglich sein soll?
            Wieso ausschließlich SELECT? Was macht er wenn ich mich einlogge mit nem existierenen Benutzernamen und dem Passwort

            x OR 1=1

            das ist doch wohl SQL Injection!

            Kommentar


            • #7
              Da hast du natürlich recht, ich hab n'en Quatsch geschrieben. Es kann zwar so nichts falsches in die DB geschrieben werden, aber der (falsche) Login wird trotzdem funktionieren.
              Gruss
              L

              Kommentar


              • #8
                dir sei verziehen, das kommt von der Hitze

                Kommentar


                • #9
                  Hi,
                  benutz doch error_reporting(E_ALL | E_STRICT) und ein mysql_query(..) or die(mysql_error()) Konstrukt, so siehst du alle Fehler.

                  Ausserdem tut Code einruecken gut
                  "Mein Name ist Lohse, ich kaufe hier ein."

                  Kommentar


                  • #10
                    Hi Leute,

                    freut mich ungeheim, dass ich so viele Antworten und Anregungen erhalten habe! Ein wirklich dickes Danke dafür!!!!!

                    Gestern Abend kam mir dann noch eine kurze Erleuchtung, die nicht lange anhielt, aber dennoch vorhanden war!

                    Folgender Code:
                    PHP-Code:
                    <?php
                     
                    //Variablen-------------------------------
                     
                    include("vars.php");
                     
                    $verbindung mysql_connect($db,$us,$pw);
                             if(!
                    $verbindung) die("Ohoh!");
                     
                             
                    $sql "SELECT * FROM jos_mitwirkende";
                             
                    mysql_select_db("mey_test",$verbindung);
                     
                             
                    $erg mysql_query($sql$verbindung);
                     
                     for (
                    $i 0i<=100 i++) {
                     
                             
                    $erg_1 mysql_result($erg,$i);
                             
                    $erg_2 mysql_result($erg,$i,1);
                     
                      }
                     
                             if(
                    $erg_1 == $benutzer){
                     
                      echo 
                    "Benutzer in DB vorhanden"."<br>";
                      echo 
                    "<h1>$erg_1</h1>"."<br>";
                       echo 
                    "<h1>$erg_2</h1>";
                     
                     }else{
                     
                      echo 
                    "Nicht vorhanden!";
                     
                     
                     }
                     
                    ?>
                    Nunja, erfindet nun zumindestens den ersten Eintrag in der Datenbank, sofern man die for-Schleife weglässt!

                    Geht das schon in die richtige Richtung, oder war das nur ein lucky shot??????

                    Vielen Dank für Eure Hilfe!!!

                    Viele Grüße

                    Kommentar


                    • #11
                      Ja in die richtige Richtung, aber guck dir mal [man]mysql_fetch_assoc[/man] an

                      Kommentar


                      • #12
                        Upsi und gerade kam ein neuer Flash:

                        PHP-Code:
                        <html>
                        <head>
                        <link rel="stylesheet" href="template.css" type="text/css">
                        </head>
                        <body>
                        <?php
                         
                        //Variablen-------------------------------
                         
                        include("php/vars.php");
                         
                                
                        $verbindung mysql_connect($db,$user,$pw);
                                 if(!
                        $verbindung) die("Ohoh!");
                                 
                        $sql "SELECT * FROM jos_mitwirkende WHERE Benutzer = '$benutzer'";
                                 
                        mysql_select_db("mey_test",$verbindung);
                                 
                        $erg mysql_query($sql,$verbindung);
                         
                                   
                        $erg_1 mysql_result($erg,0);
                                   
                        $erg_2 mysql_result($erg,0,1);
                         
                                 if(
                        $erg_1 == $benutzer) {
                                 echo 
                        "Benutzer in DB vorhanden"."<br>";
                                 echo 
                        "<h1>$erg_1</h1>"."<br>";
                                 echo 
                        "<h1>$erg_2</h1>"."<br>";
                                 }else{
                                 echo 
                        "Kein Benutzer";
                                 }
                         
                         
                        ?>
                         
                         
                        </body>
                        </html>
                        Im Moment wird ja nur das Feld "Benutzer" überprüft! Wenn ich nun aber einen falschen Benutzer eingebe kommt folgende Meldung:

                        Warning: mysql_result() [function.mysql-result]: Unable to jump to row 0 on MySQL result index 4 in C:\xampplite\htdocs\mey\benutzer.php on line 30



                        Nochmals vielen Dank für Eure Hilfe und die aufgebrachte Zeit und Geduld einem Anfänger zu helfen!

                        Viele Grüße

                        Kommentar


                        • #13
                          Ich hab grad Blödsinn erzählt, dein erster Ansatz war besser, nur falls du doch beim zweiten bleiben solltest, solltest du wirklich [MAN]mysql_fetch_assoc[/MAN] oder ähnliches benutzen. Mysql_result() benutzt kein Mensch mehr weil es einfach total unkonfortabel ist, was du, wie ich aus deinem letzten Post lese, auch schon gemerkt hast.

                          Also ich würde bei deinem ersten Ansatz bleiben, nur halt gegen SQL Injections mit [MAN]mysql_real_escape_string[/MAN] arbeiten und dein [MAN]mysql_select_db[/MAN] benutzen, wenn dann noch unlösbare Fehler auftreten, melde dich.

                          EDIT:
                          Aaah die Manual-Tags sind so toll

                          Kommentar


                          • #14
                            Hi cycap,

                            normalerweise hätte ich kein Problem eine Runden Bier zu schmeißen! Aber im Moment wird es aufgrund von geographischen Differenzen nicht möglich sein !!!

                            Wie soll ich sagen?? Mir steht im Moment total einer auf dem Schlauch! Mir raucht jetzt schon wieder der Schädel, dass es knallt!

                            Wenn ich das richtig verstanden habe, gibt mysql_fetch_assoc "true" oder "false" zurück!?!? Das wäre auch mit Sicherheit später leichter die Abfrage zu starten, oder bin ich jetzt völlig durch?


                            Kommentar


                            • #15
                              Zitat von groovemachine Beitrag anzeigen
                              Wenn ich das richtig verstanden habe, gibt mysql_fetch_assoc "true" oder "false" zurück!?!? Das wäre auch mit Sicherheit später leichter die Abfrage zu starten, oder bin ich jetzt völlig durch?

                              Das hast du falsch verstanden. mysql_fetch_assoc gibt einen Datensatz zurück in Form eines assoziativen Arrays. Rufst du die Funktion nochmal auf so gibt sie den nächsten Datensatz zurück usw. bis keiner mehr da ist, dann wird false zurück gegeben.

                              Aber ich würde trotzdem bei deinem ersten Ansatz bleiben der gar nicht so schlecht ist, weil du dabei immer nur 1 Datensatz selektieren musst und nicht alle durchgehen.

                              Also im Prinzip:

                              PHP-Code:
                              $sql "SELECT name 
                                FROM usertable 
                                WHERE name = '"
                              .mysql_real_escape_string($_POST['username'])."' 
                                AND pass = '"
                              .mysql_real_escape_string($_POST['passwort'])."'";

                              $qry mysql_query($sql) or die(mysql_error());

                              if(
                              mysql_num_rows==1)
                              {
                                
                              // alles bestens, login erfolgreich
                              }
                              else
                              {
                                
                              // das hat nicht geklappt

                              Kommentar

                              Lädt...
                              X