Probleme mit Variable $php_self

Alles, was PHP betrifft, kann hier besprochen werden.

Probleme mit Variable $php_self

Postby dacky2000 » 19. March 2005 20:09

Wenn ich mein Formular starte kommt immer folgender Fehler:

The requested URL /phpkurs/lektion8/<br /><b>Notice</b>: Undefined variable: PHP_SELF in <b>C:\apachefriends\xampp\htdocs\phpkurs\lektion8\superform.php</b> on line <b>14</b><br /> was not found on this server.


Woran kann das liegen???

Jörg
(etwas ratlos)

Code Bsp.



Code: Select all
<html>
<head>
<title>Das Feedback-Formular</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href"../css/form.css">
</head>
<body>
<h1>Das Feedback-Formular</h1>
<?php
if (empty($submit)) { // Submit-Button leer, 0 oder nicht definiert?

    ?>
<h3>1. Bitte geben Sie Ihre Daten ein</h3>

<form action="<?php echo $PHP_SELF;
    ?>" method="post">
Vorname: <input type="text" name="Vorname"><br>
Name: <input type="text" name="Name"><br>
E-Mail: <input type="text" name="Mail"><br>&nbsp;<br>
Ihre Meinung:<br>
<textarea name="Feedback" cols="50" rows="5" wrap="soft"></textarea><br><br>
<input type="reset" name="reset" value="xXx Daten l&ouml;schen">

<!-- Very wichtig!!! Der Senden-Button (Submit) mit submit benennen! -->
<input type="submit" name="submit" value="Jetzt absenden --&gt;">
</form>   
<?php
} else { // Sonst, also wenn Submit-Button vorhanden

    ?>
<h3>2. Bitte &uuml;berpr&uuml;fen Sie Ihre Daten noch einmal</h3>
<?php
    foreach ($_POST as $key => $value) { // durchläuft alle Formularfelder
        if (empty($value)) { // Wert leer, 0 oder nicht definiert?

            ?>

<p>Bitte f&uuml;llen Sie <b>alle Felder</b>aus!</p>
<form>
<input type="button" value="&lt;-- Zur&uuml;ck zum Formular" onclick="javascript:history.back()">
</form>
<!--Nur sichtbar wenn Javascript deaktiviert-->
<noscript>Bitte gehen Sie mit dem Back-Button des Browsers zur&uuml;ck</noscript>
<?php>
            exit; // beendet sowohl Schleife als auch Programm!
        }
    }
    echo "<p>Hallo <b>$Vorname $Name!</b><br>\n";
    echo "Ihre E-Mail-Adresse lautet <b>$Mail</b>!<br>\n";
    echo "Sie haben folgendes eingegeben:<br>\n";
    // Für die Ausgabe Backslashes entfernen und Zeilenumbrüche erhalten:
    echo "<i>" . stripslashes(n12br($Feedback)) . "</i><br><br>\n";
    echo "Sind diese Angaben korrekt?</p>\n";
    // Die eingegebenen Daten werden in ein Feld geschrieben:
    $botschaft = "$Vorname $Name, $Mail schreibt\n$Feedback";
    $botschaft = htmlspecialchars($botschaft); //HTML-Sonderzeichen maskieren
    $botschaft = stripslashes($botschaft); //Backslashes entfernen
   
    // Neues Formular erzeugen zur Weitergabe an das Mailscript:
    echo "<form action=\"mail.php\" methode=\"post\">\n";
    // Die Daten werden in versteckten formularfeldern weitergegeben
    echo "<input type=\"hidden\" name=\"Mail\" value=\"$Mail\">\n";
    echo "<input type=\"hidden\" name=\"botschaft\" value=\"$botschaft\">\n";
    echo "<input type=\"button\" value=\"&lt;-- Nein bitte korrigieren\" ";
    echo "onclick=\"javascript:history.back()\">\n";
    // <!--Nur sichtbar wenn Javascript deaktiviert-->
    echo "<noscript>Bitte per BACK-Button zurücknavigieren!</noscript>\n";
    echo "<input type=\"submit\" name=\"mailsender\" ";
    echo "value=\"Alles klar --&gt;\"></form>\n";
}

?>

</body>

</html>

[/code][/quote]
dacky2000
 
Posts: 7
Joined: 11. March 2005 23:10

Postby Hanspeter Thöni » 19. March 2005 20:40

Könnte es sein, dass bei deinem PHP die Einstellung 'register_globals' auf off steht?

Es ist seit längerer Zeit schon empfohlen, aus Sicherheitsgründen, mit 'regsiterglobals=off' zu fahren.

In diesem Fall musst du die Variable $PHP_SELF aber über die Superglobale $_SERVER ansprechen.

Also:
registerglobals=on ----> $PHP_SELF
registerglobals=off ----> $_SERVER['PHP_SELF']

Dies gilt ebenfalls für Variablen die per GET oder POST von Formularen übergeben werden. Es ist sehr zu Empfehlen, nur noch die Verwendungsweise über die Superglobale zu benutzen.

Dokumentation über die Einstellung register-Globals
http://www.php.net/manual/de/security.globals.php
Dokumentation über die Superglobalen
http://www.php.net/manual/de/language.variables.predefined.php
Gruss Hanspeter
User avatar
Hanspeter Thöni
 
Posts: 233
Joined: 17. August 2004 10:29
Location: Schweiz

Postby dacky2000 » 19. March 2005 20:54

Danke für den Tipp

natürlich steht register_globals auf off
die Änderung funktioniert für das Script

ABER
Wenn ich "localhost" aufrufe und auf der XAMPP Startseite DEUTSCH auswähle

kommt folgendes

Notice: Undefined variable: PHP_SELF in C:\apachefriends\xampp\htdocs\xampp\lang\de.php on line 246


An den Dateien des Servers ist aber nix verändert worden. Gestern hats noch funktioniert

Noch immer sehr ratlos

Jörg
dacky2000
 
Posts: 7
Joined: 11. March 2005 23:10

Postby Hanspeter Thöni » 19. March 2005 21:03

Gleiches Problem! XAMPP wird mit registerglobals=on ausgeliefert. Die Beispiele im XAMPP sind halt noch für registerglobals=on erstellt.

Mit der Einstellung registerglobals=off kommt es zu obiger Fehlermeldung.
Du kannst die enstsprechende Zeile ändern, aber es wird auch noch einiges anderes in den XAMPP-Beispielen nicht mehr funktionieren.
Gruss Hanspeter
User avatar
Hanspeter Thöni
 
Posts: 233
Joined: 17. August 2004 10:29
Location: Schweiz

Postby dacky2000 » 19. March 2005 21:07

Das heisst also ich kann lokal den PHP 5 Standrad nicht testen, weil dann keine Xampp Seite mehr geöffnet wird?

Schöne Sch....

Wat nu?

Ist vielleicht irgendwann mit einem Patch zu rechen, der das ändert?


Ansonsten danke für deine Hilfe

Jörg
dacky2000
 
Posts: 7
Joined: 11. March 2005 23:10

Postby Hanspeter Thöni » 19. March 2005 21:21

Wo liegt das Problem? Wenn registerglobals=off steht funktionierten ja nur die XAMPP-Beispiele selber nicht mehr (also die Beispiele in den htdocs). Wenn du selber scripts testen willst, und diese sind für registerglobals=off, funktioniert das doch wunderbar.
Ich habe hier meine Komplette entwicklung mit Registerglobals=off, das einzige was halt so nicht mehr funktioniert, sind die original xampp-Beispiele. Brauchst du denn die? Im übrigen wenn du die Betreffende Zeile im de.php änderst, kommt du wieder in's das XAMPP Hauptmenu. Es funktionieren nur nicht mehr alle Beispiele korrekt.
Gruss Hanspeter
User avatar
Hanspeter Thöni
 
Posts: 233
Joined: 17. August 2004 10:29
Location: Schweiz


Return to PHP

Who is online

Users browsing this forum: No registered users and 2 guests