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

Notice: Undefinied Index

devilseye

Neues Mitglied
hi folks hab begonnen ein kleines Formular zu entwerfen jedoch kommt immer und immer wieder
das selbe Problem und zwar folgendes

Code:
[B]Notice[/B]:  Undefined index: name in [B]C:\xampp\htdocs\web_art\formular2.php[/B] on line [B]5[/B]

[B]Notice[/B]:  Undefined index: vorname in [B]C:\xampp\htdocs\web_art\formular2.php[/B] on line [B]7[/B]

[B]Notice[/B]:  Undefined index: gesendet in [B]C:\xampp\htdocs\web_art\formular2.php[/B] on line [B]20[/B]

[B]Notice[/B]:  Undefined index: gesendet in [B]C:\xampp\htdocs\web_art\formular2.php[/B] on line [B]25[/B]

formular2.php
PHP:
<?php

error_reporting(E_ALL);

$name       = trim($_POST['name']);
$name       = htmlspecialchars($name, ENT_QUOTES);
$vorname    = trim($_POST['vorname']);
$vorname    = htmlspecialchars($vorname, ENT_QUOTES);


$err        = array();

if(empty($name) AND empty($vorname))
{
    if($name == ""
        OR $_POST['gesendet'] == "")
    {
        echo '<form name="kontaktformular" action="formular2.php" method="post" >';

        if($name == "" AND $_POST['gesendet'] == "ja")
        {
            $err[] = 'Bitte einen Namen eingeben';
        }

        if($vorname == "" AND $_POST['gesendet'] == "ja")
        {
            $err[] = 'Bitte einen Vornamen eingeben';
        }


        if ($err != array())
        {
            foreach($err as $key)
            {
                echo '<span>'. $key .'</span><br />';
            }
        }

        echo '<p>';
        echo '<label for="name">Name:</label>';
        echo '<input type="text" name="name" value="';
        echo $name;
        echo '" />';
        echo '</p>';

        echo '<p>';
        echo '<label for="vorname">Vorname:</label>';
        echo '<input type="text" name="vorname" value="';
        echo $vorname;
        echo '" />';
        echo '</p>';

        echo '<input type="hidden" name="gesendet" value="ja" />';

        echo '<input type="submit" value="Absenden" />';

        echo '</form>';
    }

}else{
    echo '<p>Anfrage abgesendet danke';
    echo $name . " " . $vorname;
    echo '</p>';
}

?>

Das Formular funktioniert soweit zwar allerdings wollte ich fragen ob ich diese "Notizen"
einfach übergehen kann oder was geschehen kann wenn ich dass mache.

Gruss
 
Werbung:
Hier

PHP:
$name       = trim($_POST['name']);

versuchst Du einen Wert aus dem POST-Array zu lesen den es aber nicht gibt, wenn Du die Seite nicht per POST aufrufst.

Du musst davor prüfen, ob die Seite per POST aufgerufen wird UND ob die Variable darin existiert.

PHP:
if( $_POST ) {
 if( isset($_POST["name"]) ) {
  echo "gibts";
 }
}

Alternativ kannst Du auch die Hinweis-Meldungen von PHP unterdrücken (error_reporting()). Dadurch verhinderst Du jedoch, dass Du merkst, wenn es wirklich mal ein Problem gibt.
 
Werbung:
Ja und gerade deswegen musst Du o.g. Prüfungen einbauen, da es $_POST bei einem GET-Aufruf nicht gibt. Deswegen gibt es ja die Hinweismeldungen.
 
Habs jetzt mal so angepasse allerdings wird so gar nichts mehr angezeigt

PHP:
<?php

error_reporting(E_ALL);

require_once('includes/library.php');
if( $_POST )
{
    $name       = trim($_POST['name']);
    $name       = htmlspecialchars($name, ENT_QUOTES);
    $vorname    = trim($_POST['vorname']);
    $vorname    = htmlspecialchars($vorname, ENT_QUOTES);


    $err        = array();

    if(empty($name) AND empty($vorname))
    {
        if($name == ""
            OR $_POST['gesendet'] == "")
        {
            echo '<form name="kontaktformular" action="formular2.php" method="post" >';

            if($name == "" AND $_POST['gesendet'] == "ja")
            {
                $err[] = 'Bitte einen Namen eingeben';
            }

            if($vorname == "" AND $_POST['gesendet'] == "ja")
            {
                $err[] = 'Bitte einen Vornamen eingeben';
            }

            if ( $_POST['mail'] <> "" )
            {
                if ( is_mail($_POST['mail']) == false )
                {
                    $Error[] = 'E-Mail-Adresse ist Falsch - korrigieren';
                    $_POST['mail'] = "";
                }
            }

            if ( $_POST['mail'] == "" AND $_POST['gesendet'] == "ja" )
            {
                $Error[] = 'Bitte eine Email-Adresse eingeben';
            }

            if ($err != array())
            {
                foreach($err as $key)
                {
                    echo '<span>'. $key .'</span><br />';
                }
            }

            define ('Zeit', time()); // Startzeit des Scripts setzen

            # weiterer Code bis zur Überprüfung:
            if (!isset($_POST['date']))
            {
                /* Feld fehlt ->Spam */
            }elseif (!is_numeric($_POST['date']))
            {
                /* Manipulierung ->Spam */
            }elseif (intval($_POST['date']) > Zeit-10)
            {
                /* zu schnell ->Spam */
            }elseif (intval($_POST['date']) < Zeit-10*3600)
            {
                /* altes Formular ->Spam */
            }else{
                /* kein Spam¿ -> ggf. weitere Prüfungen und Verarbeitung des Eintrages */
            }
            // Formular beginn
            echo '<p>';
            echo '<label for="name">Name:</label>';
            echo '<input type="text" name="name" value="';
            echo $name;
            echo '" />';
            echo '</p>';

            echo '<p>';
            echo '<label for="vorname">Vorname:</label>';
            echo '<input type="text" name="vorname" value="';
            echo $vorname;
            echo '" />';
            echo '</p>';

            // Ueberprüft ob das Formular schon mal abgesendet wurde
            echo '<input type="hidden" name="gesendet" value="ja" />';

            # weiterer Code bis zum Formular:
            echo '<input name="date" type="hidden" value="', time(), '" />';


            echo '<input type="submit" value="Absenden" />';

            echo '</form>';
            // Formular Ende
        }

    }else{
        // Wenn dass Formular richitig ausgeüllt wurde gehe hier hin
        echo '<p>Anfrage abgesendet danke';
        echo $name . " " . $vorname;
        echo '</p>';
}
}


?>
 
Du solltest ja auch nicht alles mit der Bedingung umgeben sondern nur den Bereich, wo Du das Formular verarbeitest.
 
Werbung:
Do arbeitest mit einer Error Einstellung, die zwar löblich, aber nicht notwendig ist. Alle Fehler und Warnungen werden angezeigt.
PHP:
    @error_reporting(E_ALL & ~E_NOTICE);
    // @ini_set('display_errors','Off');
und alle Warnungen sind weg.
 
Das Thema hatten wir schon mal, aber, damit kein falscher Eindruck erweckt wird, ergänzend zu sysops Hinweis:

Es ist unter PHP-Programmierern nicht Usus, solche Fehlermeldungen zu unterdrücken.

(Damit meine ich aber nicht, auf dem Produktivsystem Error-Reporting zuzulassen. Das geht Nutzer nichts an. Solche „Fehler“ sollten bereits während der Entwicklung behoben werden.)

Meine Empfehlung wäre, sogar noch E_STRICT mit reinzunehmen:

PHP:
error_reporting(-1); // Setzt jedwede Ausgabe

Ich nutze für einzelne Scripts häufig so was:

PHP:
$errors = array();

$name = (isset($_POST['name'])) ? trim((string) $_POST['name']) : '';

if ($name === '') {
    $errors[] = 'Name muss gesetzt sein';
}
 
Hoppla, damit nicht der Eindruck entsteht, ich will zum frickeln aufrufen..
Natürlich sollte man die Fehler wenn geht beheben. Notice ist allerdings kein Fehler, eher ein Hinweis.

Ich nutze seit kurzem fast immer eine init.php in der man solche Probleme leicht unterbringen und beheben kann.
 
Werbung:
Zurück
Oben