it-swarm.com.de

Settings API - Undefinierter Index, wenn das Kontrollkästchen deaktiviert ist

Ich weiß, dass dies ein Duplikat sein kann, aber ich konnte bisherige Fragen nicht verstehen.

Ich habe ein Kontrollkästchen auf einer Einstellungsseite. Beim ersten Laden der Seite ist alles in Ordnung, wenn ich das Kästchen ankreuze und alles speichere, ist alles in Ordnung. Wenn ich das Häkchen dann entferne, erhalte ich den folgenden Fehler:

Hinweis : Undefinierter Index: dat_checkbox_field_0 in .../wp-content/plugins/divi-auto-testimonials/admin/dat-options.php in Zeile 49 Wert = '1'>

Die Funktion:

function dat_checkbox_field_0_render(  ) { 

    $options = get_option( 'dat_settings' );
    ?>
    <input type='checkbox' name='dat_settings[dat_checkbox_field_0]' <?php checked( $options['dat_checkbox_field_0'], 1 ); ?> value='1'>
    <?php

}

Zeile 49 ist das Eingabe-HTML.

Ich bekomme auch den gleichen Fehler für diesen Code:

$options = get_option( 'dat_settings' );
if( $options['dat_checkbox_field_0'] != '1' ) {
 include_once "admin/notification.php";
}

Nach meinem Verständnis muss ich den Wert auf null setzen, aber ich bin mir nicht ganz sicher, ob das richtig ist und wenn ja, wie.

2
Ben H

Dies konnte folgendermaßen behoben werden:

function dat_checkbox_field_0_render(  ) { 

    $options = get_option( 'dat_settings' );
    $a = $options;
if (array_key_exists("dat_checkbox_field_0",$a))
  { } else { 
    $options['data_checkbox_field_0'] = false;
  }
    ?>
      <input type='checkbox' name='dat_settings[dat_checkbox_field_0]' <?php checked( $options['dat_checkbox_field_0'], 1 ); ?> value='1'>
    <?php

}
1
Ben H
$options = get_option( 'dat_settings' );
$options['dat_checkbox_field_0'] = empty( $options['dat_checkbox_field_0'] ) ? 0 : 1;

Wenn die Variable "leer" ist, was bedeutet, dass sie nicht gesetzt ist oder dass sie gleich "falsch" ist (Null qualifiziert sich), wird ihr grundsätzlich der Wert 0 zugewiesen. Wenn sie auf "wahr" oder "gleich" gesetzt ist (Eins qualifiziert sich) dann wird ihm der Wert 1 zugewiesen.

Alternativ können Sie die Logik für dasselbe Ergebnis umkehren (für Puristen, die es bevorzugen, in ternären Aussagen an erster Stelle zu stehen):

$options['dat_checkbox_field_0'] = !empty( $options['dat_checkbox_field_0'] ) ? 1 : 0;
2
Otto