Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Undefined index: bei nicht angeklickter Checkbox

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Undefined index: bei nicht angeklickter Checkbox

    Hallo zusammen,

    ich drehe mich momentan im Kreis und finde keine Lösung.

    Folgende Situation: In einem Formular befindet sich eine Checkbox, die eine Variable namens "Closing" übergibt.
    Skript <input type =\"checkbox\" checked name=\"Closing\" size=\"10\" value=\"1\">
    Ist die Box angeklickt wird die 1 übertragen und alles ist gut. ist die Box nicht angeklickt, wird die 0 übertragen, im Empfangenden Skript kommt jedoch die Notice: Undefined index: Closing in line....

    Im empfangenden Skript lautet die betreffende Zeile in der der Wert wie folgt übernommen wird

    $closing = $_POST["Closing"];

    Wie gesagt, der Datenbankeintrag funktioniert, nur die Notice taucht auf, übrigens noch bei ein paar Variablen mehr, nach dem gleichen Muster und nur bei Checkboxen.

    Wäre klasse, wenn jemand eine Idee hat, woran das liegen könnte. Taucht im übrigen erst jetzt nach Installation von PHP 5.3.5 auf, bei älteren PHP-Versionen habe ich kein Problem.

    Gruß
    Michael

  • #2
    Hallo,

    Zitat von MikeE Beitrag anzeigen
    ist die Box nicht angeklickt, wird die 0 übertragen
    nein, wenn eine Checkbox nicht angeklickt ist, wird sie komplett ignoriert und nicht übertragen.

    Ein guter Workaround bietet dir empty():

    PHP-Code:
    <?php
    $isChecked 
    = !empty($_POST["Closing"]);
    ?>

    Zitat von MikeE Beitrag anzeigen
    Wäre klasse, wenn jemand eine Idee hat, woran das liegen könnte. Taucht im übrigen erst jetzt nach Installation von PHP 5.3.5 auf, bei älteren PHP-Versionen habe ich kein Problem.
    Das liegt einzig am Error-Reporting, nicht an der PHP-Version. Wie auch, der Browser (bzw. das entsprechende RFC) entscheidet was gesendet wird.

    Kommentar


    • #3
      Der Wert einer Checkbox wird nur übertragen wenn sie angeklickt wird. Du solltest also über isset() prüfen, ob der Index überhaupt existiert.

      PHP-Code:
      $closing = (isset($_POST["Closing"])) ? $_POST["Closing"] : 0
      Das ist die Kurzform für folgenden Code:

      PHP-Code:
      if (isset($_POST["Closing"])) {
        
      $closing =  $_POST["Closing"];
      }
      else {
        
      $closing 0;

      Die Meldungen haben übrigens nichts mit PHP 5.3 zu tun, sondern mit dem eingestellten Error-Reporting. Du kannst die Meldungen auch deaktivieren:

      PHP-Code:
      error_reporting(E_ALL E_NOTICE); 
      Allerdings würde ich versuchen die entsprechenden Stellen im Code auszumerzen, anstatt nur die Symptome zu bekämpfen.

      Im Produktiv-Betrieb sollten Fehlermeldungen auch gar nicht erst ausgegeben werden, sondern nur ins Error-Log geschrieben werden.

      PHP-Code:
      ini_set('display_errors'false); 
      Aber das nur nebenbei.

      Gruß,
      Max

      EDIT: Da war jemand schneller.

      Kommentar


      • #4
        Alternativ ein Input Type Hidden vor die checkbox mit name=Closing und value=0...
        wird die Checkbox ausgewählt, wird die 1 Übergeben, wenn nicht die 0 aus dem Hidden Input.

        Kommentar


        • #5
          Hallo Leute,

          danke für eure Tipps, den von Chriz habe ich gleich ausprobiert, es funktioniert reibungslos, besten Dank

          Viele Grüße
          Michael

          Kommentar


          • #6
            Hallo Max,
            Hallo Teo,

            weil ich genau deiner Meinung bin, Max , was die Sauberkeit der Codes anbelangt, wollte ich das Ding geradeziehen. Deine Lösung führt zum gleichen Ergebnis.

            Die Lösung von Teo werde ich versuchsweise ebenfalls mal testen, wobei der Ansatz von Chriz wirklich der schlankeste ist.

            Nochmals danke für euer Engagement

            Gruß
            Michael

            Kommentar

            Lädt...
            X