web-dev-qa-db-fra.com

API de paramètres - Index non défini en décochant la case

Je sais que c'est peut-être un doublon, mais je n'ai pas réussi à comprendre les questions précédentes.

J'ai une case à cocher sur une page de paramètres. Tout va bien lors du premier chargement de la page, si je coche la case et que tout est sauvegardé. Si je décoche ensuite, j'obtiens l'erreur suivante:

Remarque : Index non défini: dat_checkbox_field_0 dans .../wp-content/plugins/divi-auto-testimonials/admin/dat-options.php à ligne 49 valeur = '1'>

La fonction:

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

}

La ligne 49 est l'entrée HTML.

J'ai aussi la même erreur pour ce code:

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

D'après ce que je comprends, je dois définir la valeur sur null Je pense, mais je ne suis pas tout à fait sûr que ce soit correct et si oui, comment.

2
Ben H

Nous avons réussi à résoudre ce problème en procédant comme suit:

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;

Fondamentalement, si la variable est "vide", ce qui signifie qu'elle n'est pas définie ou qu'elle est égale à false (zéro est admissible), la valeur 0 lui sera affectée. Si elle est définie sur true ou équivalente (on est admissible) alors il sera assigné la valeur de 1.

Sinon, inversez la logique pour obtenir le même résultat (pour les puristes qui aiment la vérité, arrivez en premier dans les déclarations ternaires):

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