Checkbox leer ->Undefined Index

Mike Rofon

Erfahrenes Mitglied
Wahrscheinlich irgendwas total simples, aber ich kapiers halt nix.
Formular hat u.a. 2 Checkboxen:
PHP:
$public_check =  ($v_public != "") ? "checked='checked'" : "";
$block_check  =  ($v_block != "") ? "checked='checked'" : "";
...
...
echo "
<tr>
 <td><input type=\"checkbox\" class=\"textbox\" name=\"public\" ".$public_check." />  </td>
</tr>
<tr>
 <td><input type=\"checkbox\" class=\"textbox\" name=\"block\" value=\"1\" ".$block_check." />  </td>
</tr>";
Problem dabei ist die Verarbeitung. Sobald die Checkboxen LEER (nicht geklickt) sind, liefert das verarbeitende PHP-Script
PHP:
         $doresult = dbquery("UPDATE ".HASRC_TEAM." SET 
                                                       userid = '".$_POST['userid']."',
                                                       ... ... ...                                                     
                                                        public = '".$_POST['public']."',
                                                        block = '".$_POST['block']."'
                                                        WHERE id='".$_POST['id']."'");
Notice: Undefined index: public in ... on line 83
Notice: Undefined index: block in ... on line 84
Falls die Checkboxen aktiviert werden, gibts die dazugehörige Fehlermeldung nicht.
Ich könnt ja verstehen, daß $_POST['public'] leer ist, aber "nicht definiert" ?
Was mach ich denn hier falsch?

Sicherlich könnte ich ein
PHP:
if (isset($_POST['public'])) 
  $public =  ($_POST['public']) ? "1" : "0";
  else
  $public = "0";
machen, aber das kanns doch nich sein. Haben die Checkboxen da wirklich ein Problem?
 
Zuletzt bearbeitet:
Mike Rofon hat gesagt.:
machen, aber das kanns doch nich sein. Haben die Checkboxen da wirklich ein Problem?
Ja, es stimmt schon, die sind nicht definiert.
Du müsstest also mit isset das prüfen!

Mike Rofon hat gesagt.:
PHP:
if (isset($_POST['public'])) 
  $public =  ($_POST['public']) ? "1" : "0";
  else
  $public = "0";
Aber im ersten IF brauchst du nicht zweimal prüfen. Denn wenn die Checkbox aktiviert wurde, dann ist $_POST[''] gesetzt, sonst nicht. Du könntest das so verkürzen:
PHP:
$activated = isset($_POST['public']);
 
Zuletzt bearbeitet:
Sicherlich könnte ich ein
PHP:
if (isset($_POST['public'])) 
  $public =  ($_POST['public']) ? "1" : "0";
  else
  $public = "0";
machen, aber das kanns doch nich sein. Haben die Checkboxen da wirklich ein Problem?

Doch, das ist es :-)

Nicht aktivierte Checkboxen werden nicht als nicht aktiviert übermittelt, sie werden garnicht übermittelt :eek:
Alternativ könntest du vor diesen Checkbosen hidden-inputs mit dem selben Namen und einem leeren value platzieren.
 
Ja, es stimmt schon, die sind nicht definiert.
Du müsstest also mit isset das prüfen!
Aber im ersten IF brauchst du nicht zweimal prüfen. Denn wenn die Checkbox aktiviert wurde, dann ist $_POST[''] gesetzt, sonst nicht. Du könntest das so verkürzen:
PHP:
$activated = isset($_POST['public']);
richtig.. is eigentlich doppelt.

OK, danke erstmal Euch beiden für Eure Antworten. Ich hab mich für ne ganz andere Variante entschieden. Ich möcht den Abspeicher-Code irgendwann in eine foreach-Schleife komprimieren (also für jedes Element im _POST-Array füge entsprechend in den SQL-Befehl ein) und da sind vorhergehende ISSET-Zaubereien contraproduktiv. Hidden-Inputs sind auch umständlich. Jedenfalls umständlicher als einfach auf Ja/Nein-Radiobuttons umzusteigen.

Und Checkboxen haben bei mir verloren ;)
 
Eleganter wäre dort u.U. die Nutzung von [phpf]filter_input_array[/phpf]
Da hast du in jedem Fall einen Wert, egal ob dort die Checkbox angeklickt wurde oder nicht.
 
Also filter_input_array() hab ich mir durchgelesen, aber nich kapiert was das Ding wirklich macht und wie man das einsetzt. Der Umstieg auf Radio-Buttons is dagegen schon fertig und funktioniert :)
Man muß halt seine Grenzen kennen :D
 
Zurück