{<?PHP}Notice:Undefined Index

  • Hi,

    ja bin momentan am lernen und mach eine kleine Auswahl
    zum Hintergrundfarbe ändern.

    Folgendes Script:

    Dann kommt:

    Zitat

    Notice: Undefined index: color in C:\xampp\htdocs\new\index.php on line 2

    Sollte natürlich nicht sein, aber es nerft.... richtig!
    Wie bekommt man diese Undefinierten Variablen hin das es keine fehlermeldungen Spuckt.???

    Line 2:

    PHP
    $color = htmlspecialchars($_POST['color']);


    Greez and ty

  • Es ist ein leichter Fehler, eben eine Notiz, welche dadurch hervorgerufen wird,
    weil er versucht die $color in Zeile 2
    zu interpretieren. Was aber nicht machbar ist,
    da hier $_POST['color'] noch gar nicht gesetzt ist.

    Daher solltest du am Anfang deine $color-Variable mit einem Leerstring definieren.
    //Virtual

  • Erklärung: Zu erst solltest du beide Variablen $color und $farbe deklarieren.
    Dann solltest du nicht abfragen, ob $color, sondern ob $_POST['color'] gesetzt ist, was der Fall ist, wenn du auf Farbe wechseln drückst.

    Hier wird der Wert an $color erst übergeben und die Farbe kann ruhig gewechselt werden.

    Auch dann erhält $farbe einen Wert, zuvor war diese Variable undeklariert, daher $farbe = '' am Anfang.

    Mit freundlichen Grüßen
    Virtual

  • Versuche dir im Allgemeinen immer zu überlegen:
    Welche Variablen habe ich in Nutzung und welche Variablen haben in welchem Zustand welchen Wert?

    Dein Beispiel

  • Warum Leer String ? Es reicht sie einfach zu Initializieren, ohne ihr ein '' zuzuweisen.
    Warum überhaupt 2 Variablen ?

    mach es doch so:

    PHP
    <option value="FARBCODE1">Gelb</option> 
    <option value="FARBCODE2">Gr&uuml;n</option>

    Dann kannste dir das geswichte ersparen.

  • Es kommt auf das Gleiche dabei heraus, ja.
    Schön, dass dir ein Beitrag dazu eingefallen ist.

    Aus Gewohnheit, auch später in der objektorientierten Variante,
    deklariere ich meine Variablen mit "null" [sofern kein Wert benötigt wird.].
    =>

    PHP
    public $variable = null;
  • Natürlich könnte man es für PHP noch einfacher gestalten, wenn man typensicherheit gewährleistet:

    PHP
    public $variable = (string) null;

    Ich zitiere hier an der Stelle noch etwas:

    Zitat


    Zumindest wäre das für mich persönlich die beste Möglichkeit schnell feststellen zu können als was die Variablen initialisiert wurden. Seperate Initialisierung ist aber meist unnötig, da 90% der genutzten Variablen entweder von vornherein auf Default werte zurückfallen oder die Logik der Software interpretiert bestimmte Zustände der Variable als Default-Wert. Auch hat die Existenzprüfung meist mehr Logik-Vorteile als vorinitialisierte Variablen.

  • Typensicherheit ist in PHP meiner Meinung nach weniger von Bedeutung,
    da der Typ sich jederzeit beliebig ändern kann.
    In anderen Sprachen, wie (zumindest glaube ich es) C++ oder Java, ist es doch schon sinnvoller,
    doch ist dies ein anderes Thema.
    Wie gesagt, es ist reine Gewohnheit.
    Ich habe es gerne einheitlicher.
    Es sieht für mich komisch aus, wenn 1-2 Variablen mit Werten deklariert sind
    und andere "nackt" dastehen. ;)

    Damit auch jeder weiß, was du mit deinem ersten Beitrag gemeint hast,
    habe ich hierzu ein Beispiel ohne die Switch-Methode.

  • Ich habe nicht behauptet, es hätte keine Bedeutung, sondern eine eher geringe Bedeutung.
    Sofern du nicht vorher den Typ bestimmst (, welcher auch durch Funktionen vorgegeben werden kann ),
    wird auch keine "Notice" oder sogar ein "Fatal Error" ausgeworfen.
    Ich arbeite stetig mit "E_ALL und STRICT" ;).

    Doch wir kommen vom Thema ab.
    Nicht, dass wir beide noch als Spammer gezählt werden :).

    //Virtual

  • Wenn du demnächst nicht nur deinen
    Namen auskommentierst, sondern den kompletten post, kann dich keiner
    des Spammens beschuldigen.

    In diesem Sinne:

    // SYNAPTIC!!

  • Euch ist hoffentlich bewusst das es so

    PHP
    $color = '';
    if(isset($_POST['color']))
    {
        $color = $_POST['color'];
    }

    überhaupt keinen sinn hat oder? Wenn er es so anwendet dann ist bei jedem neuen Seitenaufruf die standard Farbe ausgewählt. Weil wie jeder weiß werden Scripte von oben nach unten Interpretiert, und dort steht nunmal immer wieder

    PHP
    $color = '';

    Er müsste es am besten in eine Session packen damit er es dauerhaft hat.

    Also folgendermaßen

    Gruß
    Ulle

  • Ulle,
    die Übung ist hier nicht gewesen, dass es auch über weiteres hinweg gespeichert wird,
    sondern, dass es überhaupt funktioniert.

    Wir wollen nicht direkt am Anfang mit der Tür ins Haus fallen.
    Selbstverständlich könnte man noch einiges erweitern, wenn du schon diesen Einwand hast.
    Ob nun Cookie,Session, oder gar in der Datenbank speichern.
    Alles wäre möglich, doch zu viel und es würde das Anliegen des Threaderstellers übersteigen :).

    Wenn du schon soweit gehst, könnten wir direkt mit Sicherheit und anderen Erweiterungen fortfahren,
    bezüglich einer Sitzungsverwaltung, was jedoch zu weit führen würde.
    Daher doch einfach nur dem einfachen Wunsch von Lalox3 nachkommen ;).

    //Virtual

  • Alles kein Ding,
    immerhin hast du ihn wahrscheinlich auf den Gedanken gebracht,
    als nächstes mit $_SESSION zu üben, worauf er eventuell erst viel später gestoßen wäre.

    Somit brauchst du dich keineswegs entschuldigen. Es ist ein Hinweis auf die nächsten Kapitel gewesen. :D

    // Virtual

  • Hey guys,

    von Session's habe ich auch schon gehört, aber bevor ich mich damit richtig befasse
    würde ich gerne noch lernen wie man ein Register Script, Login Script und ein News Script
    schreibt, damit sich die Sessions lohnen. ;)

    Danke für eure Antworten.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!