• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Firefox setzt unnötige Notiz

informatik_lehrling

Neues Mitglied
Hallo,

ich habe ein kleines Problem mit Firefox (ist auch bei Chrome, Internetexplorer, Safari und Opera so) es schreibt mir immer hin, dass eine variable nicht Definiert wurde. Dabei soll die Definition ja durch die Eingabe erfolgen:

nitice.jpg

Das ist nicht besonders schlimm nur nervig :evil:. Sobald ich jedoch die Daten eingegeben habe gibt er alles normal aus.

hier der Quellqode:

PHP:
<?php
if (array_key_exists('geschlecht', $_GET)) {
    $geschlecht = $_GET['geschlecht'];

    $koerpergroesse = $_GET['koerpergroesse'];
    $gewicht = $_GET['gewicht'];
    $normalgewicht = $koerpergroesse - 100;
    $idealgewicht = $normalgewicht - 15.0 / 100.0 * $normalgewicht;

    //berechnung des gewichtgrenzwertes
    $grenze_hohe_lebenserwartung = $normalgewicht * 1.1;
    $grenze_niedrige_lebenserwartung = $normalgewicht * 2.1;
    // sammeln der infos die zur berechnung notwendig sind
} else
    $gewicht = $_GET['gewicht']; {
    $koerpergroesse = $_GET['koerpergroesse'];
    $gewicht = $_GET['gewicht'];
    $normalgewicht = $koerpergroesse - 100;
    $idealgewicht = $normalgewicht - 10.0 / 100.0 * $normalgewicht;

    //berechnung des gewichtgrenzwertes
    $grenze_hohe_lebenserwartung = $normalgewicht * 1.1;
    $grenze_niedrige_lebenserwartung = $normalgewicht * 2.1;
    // sammeln der infos die zur berechnung notwendig sind
}
?>
<!DOCTYPE HTML>
<html>
    <head>
        <title>New Document</title>
        <meta http-equiv="content-type" content="text/html; charset=utf-8">
    </head>
    <body>
        <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="GET">
            <fieldset style="width: 400px; margin: auto; margin-top: 20px;">
                <legend style="color: navy; font-size: 1.2em;">
                    Broca-Formel - Eingabeformular
                </legend>
                <table align="center" border="0" cellpadding="2" cellspacing="0">
                    <tr>
                        <td><label>K&ouml;rpergr&ouml;&szlig;e: </label></td><td><input type="text" name="koerpergroesse" size="8"> cm</td>
                    </tr>
                    <tr>
                        <td><label>Gewicht: </label></td><td><input type="text" name="gewicht" size="8"> kg</td>
                    </tr>
                    <tr>
                        <td><input type="radio" name="geschlecht" value="w"> weiblich</td>
                    </tr>
                    <tr>
                        <td><input type="radio" name="geschlecht" value="m"> m&auml;nnlich</td>
                    </tr>
                    <tr>
                        <td colspan="2" align="right"><input type="submit" value="Berechnen"></td>
                    </tr>
                </table>
<?php
if (array_key_exists('geschlecht', $_GET)) {
    if ($_GET['geschlecht'] == 'w') {
        echo "Geschlecht: weiblich<p>";
    } else {
        echo " Geschlecht: m&auml;nnlich<p>";
    }
    echo "K&ouml;rpergr&ouml;&szlig;e: $koerpergroesse cm<p>";
    echo "Normalgewicht: $normalgewicht kg<p>";
    echo "Idealgewicht: $idealgewicht kg<p>";
    if ($gewicht < $idealgewicht) {
        echo "Sie haben Untergewicht";
    } elseif ($gewicht >= $idealgewicht AND $gewicht <= $grenze_hohe_lebenserwartung) {
        echo "Sie haben eine hohe Lebenserwartung";
    } elseif ($gewicht > $grenze_hohe_lebenserwartung AND $gewicht <= $grenze_niedrige_lebenserwartung) {
        echo "Sie haben Normalgewicht";
    } else {
        echo "Leider sind Sie zu klein für ihr Gewicht.";
    }
}
?>
            </fieldset>
        </form>
        <br><br>
        <a href="../index.php">zur&uuml;ck</a>
    </body>
</html>
 
Das hat nichts mit Browsern zu tun, das ist eine Meldung die vom PHP-Parser auf dem Server kommt.

Die Meldung betrifft diese Zeilen

PHP:
$gewicht = $_GET['gewicht']; {
    $koerpergroesse = $_GET['koerpergroesse'];
    $gewicht = $_GET['gewicht'];

die wie Du hoffentlich sehen kannst auch so nicht richtig sind an der Stelle. Sie werden immer dann geladen, wenn das Formular noch nicht abgeschickt wurde. Folglich steht dann auch nicht "gewicht" im $_GET-Array.

Du hast 2 Möglichkeiten:
- error_reporting und display_errors abschalten
- oder vor diese 2 Zeilen die Bedingung

PHP:
if( isset($_GET["gewicht"]) ){..

setzen.
 
Das ist (wie Du ja auch schreibst) kein Firefox spezifisches Problem.

Die Warnungen ruehren daher, dass Du auf Indizes in der $_GET Variable zugreifen willst, die nicht existieren. Sobald Du das Formular abgeschickt hast, sind diese Indizes vorhanden, also verschwinden auch die Warnungen.
Ueberpruefe zum Beispiel mittels isset() ob der Index existiert.

Ausserdem hast Du einen moeglichen Angriffspunkt in Deinem Code: $_SERVER['PHP_SELF'] kann durch den Benuzter manipuliert werden, mit einer URL wie index.php/"%20onsubmit="alert('XSS')" das solltest Du entsprechend noch absichern.

Edit: Zeitlich Ueberschneidung mit threadi.
 
Vielen danke threadi und teeny!

Eure Beiträge haben mir sehr geholfen. Ein bischen peinlich ist es mir schon. Zumal das ja logisch ist das ich bei der 2. Abfrage auch abfragen muss ob die Variable definirt wurde *FAIL* ;)

Teeny ich weiß dass es durch den Benutzer manipulirt werden kann. Die Seite wird nicht online gestellt, sie dient rein zur Übung aber danke trotzdem für den Hinweis:)

lg
 

Neueste Beiträge

Zurück
Oben