Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem mit altem Code auf PHP5

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

  • Problem mit altem Code auf PHP5

    Hallo!

    Ich habe heute damit begonnen ein altes Skript auf PHP5 zu aktualisieren. Das Problem daran ist nur das ich mein Login Skript nicht mehr zum Laufen bekomme. Es gibt keine Fehlermeldung oder ähnliches, aber das Problem äußert sich dadurch das einfach immer der Login Screen angezeigt wird... ob richtige Eingaben nun getätigt wurden oder nicht. Hier mal der Code meiner login.php die auf jeder Seite included ist.

    PHP-Code:

    <?php
    session_start
    ();
    include (
    $_SERVER['DOCUMENT_ROOT'] . '/lan/database.php');
    ?>

    <html>
    <head>

    <title>L.A.N. Headquarters</title>
    <style type="text/css">

    <!--
    body {
        background-image: url(bilder/hintergrund_hauptseite.jpg);
        margin-left: 0px;
        margin-top: 0px;
        margin-right: 0px;
        margin-bottom: 0px;
        background-repeat: no-repeat;
    }
    body,td,th {
        font-family: Verdana, Arial, Helvetica, sans-serif;
        font-size: 12px;
        color: #c69b9b;
    }
    a:link {
        color: #C69B9B;
        text-decoration: none;
        font-weight:bold;
    }
    a:visited {
        color: #C69B9B;
        text-decoration: none;
        font-weight:bold;
    }
    a:hover {
        color: #FFFFFF;
        text-decoration: none;
        font-weight:bold;
    }
    a:active {
        color: #C69B9B;
        text-decoration: none;
        font-weight:bold;
    }
    .textfeld {
    border: none;
    direction: ltr;
    color: #6E0000;
    background-color: #c69b9b;
    }

    .button {
    border: 1;
    width: 100px;
    direction: ltr;
    height: 24px;
    color: #6E0000;
    background-color: #c69b9b;
    }
    -->

    </style>
    </head>
    <body>

    <?php
    if(!isset($_SESSION['username'], $_SESSION['password'])) 
    {
    ?>

    <form action="<? $_SERVER['PHP_SELF']?> <? if($QUERY_STRING){ echo"?". $QUERY_STRING;}?>" method="post">
        <table width="565" height="624" border="0" cellpadding="0" cellspacing="0">
            <tr>
                <td align="left" valign="top">
                <br><br>
                Du kannst dich hier mit deinem Benutzernamen und Passwort einloggen. Solltest du noch nicht über einen Account verfügen so kannst du dich mit einem Klick auf <a href="register.html" target="iframe">diesen Link</a> registrieren.
                    <p align="left">
                        Username:<br><input class="textfeld" type="text" name="username"><br><br>
                        Password:<br><input class="textfeld" type="password" name="password"><br><br>
                        <input class="button" type="submit" value="Login">    
                    </p>
                </td>
            </tr>
        </table>
    </form>
    </body>
    </html>

    <?php
    exit();
    }

    $_SESSION['username'] = $username;
    $_SESSION['password'] = $password;


    $sql mysql_query("SELECT password FROM users WHERE username = '$_POST[username]'");
    $fetch_em mysql_fetch_array($sql);
    $numrows mysql_num_rows($sql);

    if(
    $numrows != "0" $_POST['password'] == $fetch_em["$password]"]) 
        {
    $valid_user 1;}
    else 
        {
    $valid_user 0;}

    if (!(
    $valid_user))
        {
        
    session_unset();   
        
    session_destroy(); 
        
    ?>

    <form action="<?php $_SERVER['PHP_SELF'?> <? if($QUERY_STRING){ echo"?". $QUERY_STRING;}?>" method="post">

        <table width="565" height="624" border="0" cellpadding="0" cellspacing="0">
            <tr>
                <td align="left" valign="top">
                <br><br>
                    <p align="left">
                        Du kannst dich hier mit deinem Benutzernamen und Passwort einloggen. Solltest du noch nicht über einen Account verfügen so kannst du dich mit einem Klick auf <a href="register.html" target="iframe">diesen Link</a> registrieren.
                    </p>
                    <p align="left">
                        Username:<br><input class="textfeld" type="text" name="username"><br><br>
                        Password:<br><input class="textfeld" type="password" name="password"><br><br>
                        <input class="button" type="submit" value="Login">
                    </p>
                    <p align="left">
                        Eingabe falsch. Bitte nochmals versuchen.
                    </p>
                </td>
            </tr>
        </table>
    </form>
    </body>
    </html>

    <?php
    exit();
    }
    else
    {
    echo 
    "<script type='text/javascript'>
    function FrameAendern (URI) {
      parent.header.location.href = URI;
    }
    FrameAendern ('header_2.php');

    </script>"
    ;
    }
    ?>
    Da ich mit PHP 5 und den neueren 4er Versionen nicht so vertraut bin würde ich gerne mit euch auf Fehlersuche gehen. Probiere nämlich auf XAMPP das ding zum laufen zu bringen. Und dort gehts halt nimmer mit dem alten Skript (ist auch sinnvoll das mal zu erneuern)

    Bitte um Hilfe!

    Mfg
    MasterChief


  • #2
    benutze nicht $_SERVER['PHP_SELF'], sondern $_SERVER['SCRIPT_NAME']:

    PHP_SELF ist böse! Potentielles Cross Site Scripting (XSS)! | Technik, Gothic und Anderes

    Ansonsten eben Debuggen:
    error_reporting(E_ALL); mysql_error(); und echo- bzw. print_r-Ausgaben.
    Eine if-else-Abfrage nimmt, ordentlich geschrieben eine Menge Platz weg. Platzsparend geht es mit einem ternären Operator.

    Kommentar


    • #3
      Hallo MasterChief,

      ich tippe, dass du ein session_start() am Anfang des Sktiptes platzieren und deine Query syntaktisch korrigieren solltest. Insbesondere sollte der Offset in einfachen Quotes dargestellt werden.
      Viele Grüße,
      Dr.E.

      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      1. Think about software design before you start to write code!
      2. Discuss and review it together with experts!
      3. Choose good tools (-> Adventure PHP Framework (APF))!
      4. Write clean and reusable software only!
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

      Kommentar


      • #4
        dass du ein session_start() am Anfang des Sktiptes platzieren
        hat er doch
        deine Query syntaktisch korrigieren solltest
        wieso ? wenns doch lokal funktioniert, dann wird die Syntax ok sein.

        Aber er speichert den Zustand "eingeloggt" nicht in der Session: $valid_user = 1;
        und vertraut auf register globals = on
        (auch ein Sicherheitsrisiko, wird mit PHP 6 abgeschafft)


        Also: Stichwort zur Lösung ist "register globals"
        Eine if-else-Abfrage nimmt, ordentlich geschrieben eine Menge Platz weg. Platzsparend geht es mit einem ternären Operator.

        Kommentar


        • #5
          also ich hab mal E_all gemacht und auch das mysql_error; eingebaut...
          es gibt aber keine Fehlermeldungen aus...

          und zur der Sache mit dem eingeloggt in die Session... Wie muss ich das genau ausführen?

          mfg

          Kommentar


          • #6
            du kannst in die Session ablegen ob ein gültiger Login vorliegt oder nicht, und prüfst in der if Abfrage ähnlich folgendem

            PHP-Code:
            if($_SESSION['valid_login'] == 1
            Ablegen kannst du es in der Session wie du es auch mit dem Usernamen und dem Passwort machst

            Sessions (PHP-Tutorial)
            twitter.com/moveax1 || http://modxcms.com/ || http://ubuntuusers.de/

            $live->free() OR die();

            Kommentar


            • #7
              hat er doch
              Sorry, überlesen. Danke, Koala!
              Viele Grüße,
              Dr.E.

              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
              1. Think about software design before you start to write code!
              2. Discuss and review it together with experts!
              3. Choose good tools (-> Adventure PHP Framework (APF))!
              4. Write clean and reusable software only!
              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

              Kommentar


              • #8
                benutze mal error_reporting (E_ALL|E_STRICT);
                --

                „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                --

                Kommentar


                • #9
                  nö, auch nix...
                  schreib hier noch mal den Code rein... könnte sein das ich Fehler hab

                  PHP-Code:
                  <?php
                  session_start
                  ();
                  include (
                  $_SERVER["DOCUMENT_ROOT"] . 'database.php');

                  //error_reporting(E_ALL);
                  error_reporting(E_ALL|E_STRICT);
                  ?>

                  <html>
                  <head>

                  <title>L.A.N. Headquarters</title>
                  <style type="text/css">

                  CSS

                  </style>
                  </head>
                  <body>

                  <?php
                  if(!isset($_SESSION["valid_login"])) {
                  ?>

                  <form action="<? $_SERVER["SCRIPT_NAME"]?> <? if($QUERY_STRING){ echo"?". $QUERY_STRING;}?>" method="get">

                  HTML FORM --> PASSWORT UND BENUTZER ANGEBEN

                  <?php
                  exit();
                  }

                  $sql mysql_query("SELECT password FROM users WHERE username = '$_GET[username]'");
                  $row mysql_fetch_array($sql);


                  if(
                  $_GET[password] == $row[password]) 
                      {
                  $_SESSION['valid_login'] = 1;}
                  else 
                      {
                  $_SESSION['valid_login'] = 0;}

                  if(
                  $_SESSION['valid_login'] == false)
                      {
                      
                  session_unset();   
                      
                  session_destroy(); 
                      
                  ?>

                  <form action="<?php $_SERVER["SCRIPT_NAME"?> <? if($QUERY_STRING){ echo"?". $QUERY_STRING;}?>" method="get">

                  HTML AUSGABE --> FEHLER BEI DER EINGABE

                  <?php
                  exit();
                  }
                  else
                  {
                  echo 
                  "<script type='text/javascript'>
                  function FrameAendern (URI) {
                    parent.header.location.href = URI;
                  }
                  FrameAendern ('header_2.php');

                  </script>"
                  ;
                  }
                  ?>
                  mfg

                  Kommentar


                  • #10
                    $_SESSION['username'] = $username;
                    $_SESSION['password'] = $password;
                    Thema: Register Globals

                    $sql = mysql_query("SELECT password FROM users WHERE username = '$_POST[username]'");
                    Thema: SQL Injection
                    openSuSE - linux for open minds

                    Kommentar


                    • #11
                      Das ist schon mal schlecht: $row[password]

                      Benutze $row['password'] !!

                      Enstscheidend dürfte aber der Hinweis auf register globals sein.
                      --

                      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                      Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                      --

                      Kommentar


                      • #12
                        Was machst Du hier eigentlich?: $_GET[password]

                        Das Passwort in der URL ???

                        Außerdem wär es gut wenn Du keinen PHP/HTML-Mischmasch schreiben würdest,
                        sondern alles was mit Auswertung und Verarbeitung zu tun hat oben hin
                        und die Ausgabe (html,PHP-Variablen und Ausgabelogik) erst danach
                        (EVA-Prinzip: Eingabe, Verarbeitung, Ausgabe)




                        Richtig debuggen
                        1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
                        2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(E_ALL);
                        3. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
                        4. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde (oder auch nicht).
                        5. Schritt 4 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
                        6. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
                        7. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
                        8. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.
                        Eine if-else-Abfrage nimmt, ordentlich geschrieben eine Menge Platz weg. Platzsparend geht es mit einem ternären Operator.

                        Kommentar

                        Lädt...
                        X