Undefined index

  • Hallo RT, ich bin gerade etwas dabei Php zu lernen und wollte mal etwas mit php machen. :D

    Alles klappt super, aber dennoch werden mir die Fehlern angezeigt:


    Notice: Undefined index: kontostand in C:\xampp\htdocs\index.php on line 2
    Notice: Undefined index: produkt in C:\xampp\htdocs\index.php on line 3


    Danke für eure Hilfe :P

  • Das sind keine Fehler. Das sind Notizen welche den Code nicht unbedingt beeinflussen müssen. Sicherlich weißt du das ein Code von Oben nach Unten gelesen wird. Das bedeutet dein $_POST['kontostand']; und dein $_POST['produkt']; sind somit ohne Inhalt. (Es ist kein POST Wert gesetzt. Somit ist der Wert von $_POST['kontostand'] schlichtweg nicht vorhanden.


    Undefined index bedeutet nichts weiter, als dass der POST Wert mit diesem index nicht definiert ist – somit kann auch nicht geprüft werden, ob dieser Wert leer ist.

    Die Notiz entsteht, weil ein nicht vorhandener Wert überprüft wird.


    Hier mal ein Beispiel wie du die Notiz entfernen kannst:

    Code
    1. if ( !isset($_POST['kontostand'])
    2. or !isset($_POST['produkt'])
    3. or $_POST['kontostand'] == ""
    4. or $_POST['produkt'] == ""
    5. )

    oder du nutzt einfach folgenden: (nicht empfohlen)

    Code
    1. error_reporting(0);

    Mfg

    Analritter

    8q4ZhSZ.png

    0dDNTEB.png





    256064.jpg


    Ich und Kindisch? Kommt Teddys, wir gehen!

  • Thanks

  • welche den Code nicht unbedingt beeinflussen müssen

    Argh.. und wie sie das tun. Und das kann fatal werden.


    Undefined index weist darauf hin, dass der index einer Variable ( $_VAR['index'] ) nicht definiert ist, zumindest nicht in dem Scope/Context.

    Und das stimmt, du deklarierst Variablen direkt mit dem Inhalt einer POST Request. Bevor du diese POST Abfrage aber nicht tätigst, existiert ja kein Inhalt für $_POST, sondern erst, nachdem du die POST Abfrage bzw. die Form abgesendet hast.


    Für solche Fälle ist der ?? Operator (Null Coalesce Operator) gut geeignet, welche mit PHP 7 eingeführt wurde.


    Dementsprechend würdest du die ersten drei Zeilen so umschreiben:


    Code
    1. $kontostand = $_POST['kontostand'] ?? 0;
    2. $produkt = $_POST['produkt'] ?? 0;
    3. $fehlgeld = $produkt - $kontostand;

    $kontostand und $produkt sind, falls der Index nicht gefunden wurde, einfach 0.

  • Danke, dass du versuchst zu helfen, aber jetzt kommt die Fehlermeldung :


    Parse error: syntax error, unexpected '?' in C:\xampp\htdocs\index.php on line 2

  • Wie in meiner Nachricht steht:




    Außerdem war mir klar das er PHP 5.X verwenden wird sodass ich ihm eine Methode genannt habe welche bei Ihm funktionieren sollte.

    Ich weiß. Er soll dadurch bloß nicht denken, dass er immer darauf abweichen soll.


    Aber es ist auf keinen Fall empfehlenswert, dass er bei PHP 5 bleibt, sondern seinen Hintern auf PHP 7.2 umschwingt. PHP 5.4 und 5.5 sind schon seit längerem am End of Life und 5.6 erhält nur kritische Sicherheitspatches.


    Wenn du dennoch nicht umziehen möchtest:

    Code
    1. $kontostand = isset($_POST['kontostand']) ? $_POST['kontostand'] : 0;
    2. $produkt = isset($_POST['produkt']) ? $_POST['produkt'] : 0;

    oder du unterdrückst die Notice einfach mit dem @ und nutzt den Elvis-Operator (?:)

    Code
    1. $kontostand = @$_POST['kontostand'] ?: 0;
    2. $produkt = @$_POST['produkt'] ?: 0;

    Beides getestet.

  • Ich weiß. Aber es ist auf keinen Fall empfehlenswert, dass er bei PHP 5 bleibt sondern seinen Hintern auf PHP 7.2 umschwingt. PHP 5.4 und 5.5 sind schon seit längerem am End of Life und 5.6 erhält nur kritische Sicherheitspatches.


    Wenn du dennoch nicht umziehen möchtest:

    Code
    1. $kontostand = isset($_POST['kontostand']) ? $_POST['kontostand'] : 0;
    2. $produkt = isset($_POST['produkt']) ? $_POST['produkt'] : 0;

    oder du unterdrückst die Notice einfach mit dem @ und nutzt den Elvis-Operator (?:)

    Code
    1. $kontostand = @$_POST['kontostand'] ?: 0;
    2. $produkt = @$_POST['produkt'] ?: 0;

    Beides getestet.

    Ich bin jetzt auf php 7.2 umgestiegen, aber ein Code von mir funktioniert nicht.. Why??


    005.PNG


    <? if(isset($_POST["ausfuehren"])) {

    if($kontostand < $produkt) {

    echo 'Du kannst das Produkt nicht kaufen.';

    echo '</br>Dir fehlen '.$fehlgeld.' Euro.';

    }

    else {

    echo "Du kannst das Produkt kaufen.";

    }

    }

    ?>

  • Sieht so aus, als hättest du das php bei <? vergessen. :)

    Und bitte formatieren und einrücken!!


  • Sieht so aus, als hättest du das php bei <? vergessen. :)

    Und bitte formatieren und einrücken!!


    Danke dir :P

  • Alternativ kannst du der isset() Funktion bei PHP5.x auch mehrere Variablen zuweisen wenn du ein Array übergibst


    PHP
    1. <?php
    2. isset($_POST['kontostand'], $_POST['produkt']) {}

    ab PHP7 wär der Null Coalescing Operator besser geeignet wenn du bspw. mehrere Variablen abfragen möchtest:


    PHP
    1. <?php
    2. $kontostandNeu = null;
    3. $kontostand = $kontostandNeu ?? $_POST['kontostand'] ?? 0;

    Erfolgreich bist du erst dann, wenn du mit dir selbst zufrieden bist.

  • Alternativ kannst du der isset() Funktion bei PHP5.x auch mehrere Variablen zuweisen wenn du ein Array übergibst


    PHP
    1. <?php
    2. isset($_POST['kontostand'], $_POST['produkt']) {}

    ab PHP7 wär der Null Coalescing Operator besser geeignet wenn du bspw. mehrere Variablen abfragen möchtest:


    PHP
    1. <?php
    2. $kontostandNeu = null;
    3. $kontostand = $kontostandNeu ?? $_POST['kontostand'] ?? 0;

    Ich würde da gleich auf die empty Funktion zurückgreifen, 2 Fliegen mit einer Klappe.