Schmaid: 403 Forbidden

Hallo

ich stehe hier vor einem Problem das ich absolut nicht verstehe und ich nicht weiterkomme.

Also ich habe den untenstehenden PHP-Code mit Hilfe von einer Übung aus einem Buch erstellt. Nur wenn ich dann im Formular etwas eingebe und abschicke, kommt nicht die gewünschte Ausgabe zurück sondern eine Fehlermeldung:

-----------------
Forbidden
You don't have permission to access /uebungen/<br /><b>Notice</b>: Undefined variable: PHP_SELF in <b>c:/programme/easyphp1-7/www/uebungen/ud12.php</b> on line <b>18</b><br /> on this server.

Apache/1.3.27 Server at pc013337 Port 82
-----------------

Es kann doch wohl nicht sein, dass ich auf meinem eigenen Rechner keine Berechtigung habe! Und warum funktioniert nur das PHP-Dokument nicht und alle anderen gehen.
Nur das mit dem Selbstaufruf funktioniert nicht. Ausser ich gebe in der Datei den Namen der Datei an als Aufruf, aber warum klappt es nicht mit <?php $PHP_SELF ?>

Hier ist der Quellcode:
<html>
<head>
<?php

If (isset($HTTP_POST_VARS['vn'])) {$vn=$HTTP_POST_VARS['vn'];} else {$vn="";}
If (isset($HTTP_POST_VARS['nn'])) {$nn=$HTTP_POST_VARS['nn'];} else {$nn="";}
If (isset($HTTP_POST_VARS['gesendet'])) {$gesendet=$HTTP_POST_VARS['gesendet'];} else {$gesendet="";}
   if ($gesendet)
   {
      echo "Sie haben folgenden Namen";
      echo " eingegeben: $vn $nn<p>";
   }

?>
</head>
<body>
Bitte geben Sie einen Namen ein und senden Sie das Formular ab:
<form action = "<?php $PHP_SELF ?>" method = "post">
    <input name = "nn"> Nachname<p>
    <input name = "vn"> Vorname<p>
    <input type = "submit" name = "gesendet">
    <input type = "reset">
</form>
</body>
</html>

Gruß
Schmaid

  1. Holladiewaldfee,

    b>Notice</b>: Undefined variable: PHP_SELF in <b>c:/programme/easyphp1-7/www/uebungen/ud12.php</b> on line <b>18</b><br /> on this server.

    Hier steht, daß $PHP_SELF nicht definiert ist.

    Nur das mit dem Selbstaufruf funktioniert nicht. Ausser ich gebe in der Datei den Namen der Datei an als Aufruf, aber warum klappt es nicht mit <?php $PHP_SELF ?>

    Und hier wunderst Du Dich, daß es nicht geht.
    Suchtip: register_globals, $_SERVER['PHP_SELF']

    Ciao,

    Harry

    --
      Die ideale Zeit für Firntouren:
      http://harry.ilo.de/projekte/berge/
    1. Ja Servus

      Suchtip: register_globals, $_SERVER['PHP_SELF']

      ala gut also ich habe jetzt das ganze mit dem $_SERVER['PHP_SELF'] Befehl realisiert. Ich gehe mal davon aus, dass $PHP_SELF einfach noch zur älteren PHP-Version gehört und nicht richtig erkannt wird.

      Gruß
      Schmaid

      1. Hallo,

        ala gut also ich habe jetzt das ganze mit dem $_SERVER['PHP_SELF'] Befehl realisiert.

        Das ist eine Variable vom Typ Array, kein Befehl.

        Ich gehe mal davon aus, dass $PHP_SELF einfach noch zur älteren PHP-Version gehört und nicht richtig erkannt wird.

        $PHP_SELF steht nur zur Verfuegung, wenn in der Konfiguration
        von PHP die Option register_globals="on" ist.
        Das war bei aelteren PHP-Versionen standardmaessig der Fall,
        aber schon dort konnte man es abschalten.
        In neueren Versionen ist register_globals standardmaessig
        auf "off", und das ist gut so, denn es ist sicherer.
        Verlangt dafuer etwas mehr Tipp-Arbeit.

        http://www.dclp-faq.de/q/q-formular-register-globals.html
        http://www.php.net/manual/de/security.registerglobals.php

        Gruesse,

        Thomas

        --
        Bitte keine Mails mit Fachfragen - dafuer gibt es das Forum!
        Ich mag es, wenn URLs verlinkt sind (</faq/#Q-19>).
        Oft gestellte PHP-Fragen beantwortet die dclp-FAQ bestens: http://www.dclp-faq.de/
  2. hi,

    die fehlerursache hast du ja jetzt - noch zur erklärung, warum du diese fehlermeldung bekommen hast:

    You don't have permission to access /uebungen/

    da das action-attribut deines formulars leer war, hat dein browser einfach einen request auf das verzeichnis, in dem du dich aktuell befindest, rausgeschickt.

    da für dieses aber kein standard-dokument definiert bzw. ein solches nicht vorhanden ist, und das directory listing bei dir verboten ist, ergibt dieser request einen 403 forbidden.

    gruss,
    wahsaga

    1. Hallo wahsaga,

      ich habe da nicht viel verstanden von dem was du jetzt gesagt hast weil ich im PHP noch Frischling bin... vielleicht kannst dich ja noch dran erinnern hatte schon bei JavaScript hier öfters mal vorbei geschaut ;-)

      Aber ich kopier mir deine Erklärung und lass Sie mir dann mal von einem Kollegen erklären... bin noch Azubi :-)

      Gruß
      Schmaid

      1. Hallo,

        ich habe da nicht viel verstanden von dem was du jetzt gesagt hast weil ich im PHP noch Frischling bin...

        Das hat nichts mit PHP zu tun, sondern mit HTML, HTTP und
        Webserver-Verhalten.

        da das action-attribut deines formulars leer war, hat dein browser einfach einen request auf das verzeichnis, in dem du dich aktuell befindest, rausgeschickt.

        Du hattest ja offenbar sowas:
        Datei
        http://www.example.com/verzeichnis/formular.php
        mit
        <form action="" method="post">

        Also ein leerer Wert fuer das ACTION-Attribut.
        Fuer die Begriffe (Element, Attribut u.s.w.) siehe:
        http://www.jendryschik.de/wsdev/einfuehrung/xhtml/syntax.html

        Wenn der Benutzer jetzt auf einen Submit-Button klickt oder
        durch Druecken der Enter-Taste dafuer sorgt, dass das
        Formular abgeschickt wird, dann schickt der Browser
        es vermutlich an:
        http://www.example.com/verzeichnis/

        da für dieses aber kein standard-dokument definiert bzw. ein solches nicht vorhanden ist, und das directory listing bei dir verboten ist, ergibt dieser request einen 403 forbidden.

        Das folgende gilt fuer den Apache-Webserver:
        Wenn der Browser
        http://www.example.com/verzeichnis/
        verlangt (oder etwas dorthin schicken will, was fast aufs
        selbe herauskommt), dann schickt der Webserver (je nach Konfiguration)

        • falls vorhanden die index.html (oder so) im Verzeichnis /verzeichnis/
        • falls es keine solche Datei gibt, schickt er eine Auflistung
             aller Dateien in dem Verzeichnis
        • falls der Webmaster in der httpd.conf (oder Du in der .htaccess)
            diese automatische Auflistung dummerweise unterdrueckt hat, gibt der
            Webserver die Meldung "403 -Verboten. Ich mache keine Auflistung!"

        Gruesse,

        Thomas

        --
        Bitte keine Mails mit Fachfragen - dafuer gibt es das Forum!
        Ich mag es, wenn URLs verlinkt sind (</faq/#Q-19>).
        Oft gestellte PHP-Fragen beantwortet die dclp-FAQ bestens: http://www.dclp-faq.de/