Ankündigung

Einklappen
Keine Ankündigung bisher.

Wo hab' ich hier ein Brett vor dem Kopf?

Einklappen

Neue Werbung 2019

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

  • Wo hab' ich hier ein Brett vor dem Kopf?

    Hallo,

    irgendwie hängt's hier, es muß irgendwas einfaches sein, aber ich komm' nicht drauf. Rahmenbedingung ist ein apache, der kein php-Modul drauf hat (Mist, aber organisatorisch derzeit nicht zu ändern), also setz' ich ich die Files auf 755, lege sie ins cgi-Verzeichnis und rödele sie durch den vorhandenen /usr/local/bin/php mit entsprechenden Einleitungszeilen der php-Files. Derzeitige Keimzelle sind eine Loginseite und die Weiterverarbeitung der Logindaten. So, nun die Problemkinder:

    Zunächst index.php:
    Code:
    #! /usr/local/bin/php
    Content-Type: text/html
    
    <h3>Login</h3>
    <form method="post" action="login.php">
    <table>
    <tr><td>Username:</td><td><input type="text" name="username"></td></tr>
    <tr><td>Password:</td><td><input type="password" name="password"></td></tr>
    </table>
    <input type="submit" value=" Login  ">
    </form>
    Und das davon aufgerufene login.php:

    Code:
    #! /usr/local/bin/php
    Content-Type: text/html
    
    <?
    $uname=$_POST['username'];
    $passwd=$_POST['password'];
    
    echo "Eingabe:".$uname." ".$passwd;
    echo "Eingabe:".$username." ".$password;
    ?>
    Nur leider sind die Ausgaben in login.php komplett leer, die Felder aus dem Formular scheinen nicht im zweiten Script anzukommen. Hab' ich ein Brett vor dem Kopf und jemand vielleicht eine Säge zwecks dessen Entfernung? Das ist ja nun wirklich grundlegende Funktion, aber irgendwie läuft's nicht.

    Grüße
    Philipp


  • #2
    Spontan vermute ich, dass per CGI das Skript wie von der Kommandozeile aus aufgerufen wird. Daher könnten die übergebenen Argumente in $argv stehen. $argc hält die Anzahl der übergebenen Argumente.

    Kommentar


    • #3
      Zitat von Saraneus
      Spontan vermute ich, dass per CGI das Skript wie von der Kommandozeile aus aufgerufen wird. Daher könnten die übergebenen Argumente in $argv stehen. $argc hält die Anzahl der übergebenen Argumente.
      Nee, das war's leider auch nicht. Gegenprobe funktioniert, bei Parameterübergabe im Kommandozeilentest sind die Argumente genau da, aber bei der Web-Variante sind sie's nicht.

      Grüße
      Philipp

      Kommentar


      • #4
        Dann übersteigt's leider meine Kompetenz, sorry.

        Ich würde einfach den Weg verfolgen, den das Skript von der URL bis zur Ausführung geht und die Konfig. überprüfen. Auch 10 Mal, vielleicht tut sich ein AHA auf

        Kommentar


        • #5
          Re:

          Probier mal folgendes:

          Übergeb im Formular die Daten nicht an login.php sondern an die Variable $PHP_SELF ( anstatt action="login.php" halt action="<?php $PHP_SELF ?>"). Der Abfruf erfolgt dann wieder aus dem $_POST-Array, sprich $_POST['beliebiger_feldname'].

          Ich würde an deiner Stelle vor der Ausgabe des LOGIN folgendes machen:
          Bedingung stellen, dass wenn noch kein LOGIN erfolgt ist (Existenzprüfung einer Variable die nur bei einem erfolgreichen Login generiert wird), dann soll er den html-code für das Login ausgeben, und wenn diese Variable existiert, dann soll er ein echo deiner Userdaten ausführen.
          Bsp.

          <?php
          if (!isset ($erfolgreicher_login)) {
          echo "html Code für Login"; (oder auch: include (login-template))//
          }
          else {
          echo "Username=".$uname."Passwort=".$passwd;
          }
          ?>
          Ich übernem aber keine Garantie
          If you read this message backward, Satan will force you to smoke marijuana.
          Gute Tutorials

          Kommentar


          • #6
            Was hat das mit dem Thema zu tun?

            Kommentar


            • #7
              Re:

              Thema ist: er kriegt die Daten nicht von index.php nach login.php, und ich hab einen Lösungsvorschlag gemacht. Ob das jetzt mit dem Parser oder mit dem Scrpit zusammenhängt ist schwer zu sagen, ich hab einfach mal beim Script angesetzt. Da hat das dann wohl etwas mit dem Thema zu tun.
              If you read this message backward, Satan will force you to smoke marijuana.
              Gute Tutorials

              Kommentar


              • #8
                Re:

                Das einzige, das mich jetzt ins Grübeln bringt, ist die Übergabe an das aufgerufene Skript selbst. Möglicherweise besteht der Pfad aus mehr als nur "login.php". Daran glaube ich zwar nicht, aber testen würde ich es.

                Kommentar


                • #9
                  Re: Wo hab' ich hier ein Brett vor dem Kopf?

                  Hallo,

                  irgendwie wird das Brett noch dicker. Zu Testzwecken hab' ich mal die Methode auf get umgestellt (das kann bei Paßwortübergaben natürlich nicht so bleiben), die beiden PHPs lauten im Moment:

                  index.php:
                  Code:
                  #! /usr/local/bin/php
                  Content-Type: text/html
                  
                  <h3>Login</h3>
                  
                  <form method="get" action="login.php">
                  <table>
                  <tr><td>Username:</td><td><input type="text" name="username"></td></tr>
                  <tr><td>Password:</td><td><input type="password" name="password"></td></tr>
                  </table>
                  <input type="submit" value=" Login  ">
                  </form>
                  login.php:
                  Code:
                  #! /usr/local/bin/php
                  Content-Type: text/html
                  
                  <pre>
                  <?
                  $uname=$_GET['username'];
                  $passwd=$_GET['password'];
                  
                  echo $argc." ".$argv[1];
                  echo "Eingabe:".$uname." ".$passwd;
                  echo "Eingabe:".$username." ".$password;
                  
                  phpinfo();
                  ?>
                  </pre>
                  OK, der Querystring kommt als solcher im Zielscript an, der phpinfo(), den ich noch eingeschoben habe, sagt mir das für die üblichen Stellen (die Eingaben im index waren halt 'NAME' und 'PWD'):

                  Code:
                  [...]
                  QUERY_STRING => username=NAME&password=PWD
                  [...]
                  _ENV["QUERY_STRING"] => username=NAME&password=PWD
                  [...]
                  _SERVER["QUERY_STRING"] => username=NAME&password=PWD
                  [...]
                  Die $_GET-Abfrage führt trotzdem zu Leerstrings, ebenso die alte Brechstangenmethode, einfach im Script mit $varname auf die im Querystring gegebenen Variablennamen direkt zuzugreifen. Alles leer.

                  Vielleicht von Interesse: die PHP-Version; auf AIX das ganze:

                  Code:
                  PHP Version => 4.3.2-RC1
                  Build Date => Mar 18 2003 12:32:06
                  PHP API => 20020918
                  PHP Extension => 20020429
                  Zend Extension => 20021010
                  Grüße
                  Philipp

                  Kommentar


                  • #10
                    Re:

                    Meine Rede: erst mal sicher stellen, dass das Script in Ordnung ist und alle Variablen so übergeben werden, dass sie auch von einer anderen Seite aus ausgerufen werden können.
                    [/code]
                    If you read this message backward, Satan will force you to smoke marijuana.
                    Gute Tutorials

                    Kommentar


                    • #11
                      Re:

                      Hallo,

                      Zitat von suendesizer
                      Übergeb im Formular die Daten nicht an login.php sondern an die Variable $PHP_SELF ( anstatt action="login.php" halt action="<?php $PHP_SELF ?>"). Der Abfruf erfolgt dann wieder aus dem $_POST-Array, sprich $_POST['beliebiger_feldname'].
                      Öh, woher weiß denn dann das Formular, mit welchem Script die Weiterverarbeitung passieren soll? Oder ist das im Zusammenhang mit ...

                      Ich würde an deiner Stelle vor der Ausgabe des LOGIN folgendes machen:
                      Bedingung stellen, dass wenn noch kein LOGIN erfolgt ist (Existenzprüfung einer Variable die nur bei einem erfolgreichen Login generiert wird), dann soll er den html-code für das Login ausgeben, und wenn diese Variable existiert, dann soll er ein echo deiner Userdaten ausführen.
                      ... gemeint? Könnte ich auch mal testen, aber das löst ja das Problem nicht grundsätzlich, das Hinüberwerfen von weiteren (und dann deutlich umfangreicheren Formulardaten) in andere Scripte, die dann auch noch mit Oracle reden, findet ja später sicherlich auch noch statt, wenn ich erstmal diese bis jetzt überraschend hohe Hürde des Eingangslogins überwunden habe ...

                      Grüße
                      Philipp

                      Kommentar


                      • #12
                        suendesizer meint:

                        $PHP_SELF beinhaltet den Pfad zum ausgeführten Skript, genau so wie $_SERVER['SCRIPT_NAME']. Wenn du eine dieser Variablen als form-action einsetzt, wird das Formular praktisch an sich selbst (index.php) geschickt. Den Inhalt deiner login.php sollst du zusätzlich in die index.php schreiben.

                        @mein beitrag
                        Da du jetzt festgestellt hast, dass der Query-String ankommt, könntest du diesen nun selbst auseinanderpflücken. Funktioniert das aber auch mit der POST-Methode? Natürlich beantwortet eine selbstgeschriebene Funktion nicht die eigentliche Frage, warum $_POST und $_GET leer bleiben. Die PHP-Version spricht dagegen.

                        Kommentar


                        • #13
                          Zitat von Saraneus
                          suendesizer meint:

                          $PHP_SELF beinhaltet den Pfad zum ausgeführten Skript, genau so wie $_SERVER['SCRIPT_NAME']. Wenn du eine dieser Variablen als form-action einsetzt, wird das Formular praktisch an sich selbst (index.php) geschickt. Den Inhalt deiner login.php sollst du zusätzlich in die index.php schreiben.
                          Ahja, so in der Richtung hatte ich mir das auch vorgestellt. Das macht die Sache aber nun auch nicht übersichtlicher, hier sowas mit einem Login und dessen Plausibilitätsprüfung ist ja noch einigermaßen überschaubar, aber das ganze DB-Frontend in eine einzige alles.php zu schreiben, kommt mir nur mäßig effizient vor ...

                          @mein beitrag
                          Da du jetzt festgestellt hast, dass der Query-String ankommt, könntest du diesen nun selbst auseinanderpflücken. Funktioniert das aber auch mit der POST-Methode? Natürlich beantwortet eine selbstgeschriebene Funktion nicht die eigentliche Frage, warum $_POST und $_GET leer bleiben. Die PHP-Version spricht dagegen.
                          Unter POST bleibt der querystring leer, aber das ist ja auch nicht sooo überraschend, und GET war ja nur ein Testzweck, das kann wegen des Paßworts ja nicht bleiben.

                          Hmtja, also weiterforschen. Langsam kommt mir die bürokratische Hürde vor der Einrichtung von PHP als Modul immer gangbarer vor. Ich würd' mir ja selber einen passenden Apachen bauen, aber die mit den Systemhüten werden mir was erzählen ...

                          Grüße
                          Philipp

                          Kommentar

                          Lädt...
                          X