HTML und php, Checkboxwerteuebertragung

Gast #3707773
Lesenswert?

Hallo,

im HTML-Code hab ich stehen:
1
<input type="checkbox" name="nobutton" value="123">Test<br>

im php-Script:
1
$nobutton = $_POST['nobutton'];
2
echo "$nobutton";

Klicke ich jetzt auf der HTML-Seite die Checkbox stehen und rufe dann 
das php-Script auf, dann erscheint der Wert "on" bzw. "123", was ich mit 
"value=" gesetzt habe.
Klicke ich keinen Haken an und rufe dann das php-Script auf, dann wird 
kein Wert übergeben und das php-Script kennt die Variable "nobutton" 
nicht.

Gibt es da einen Trick? Kann ich die "Variable" nobutton mit einem 
Standardwert belegen?
Gast #3707917
Lesenswert?

ohne javascript fällt mir auf die schnelle nur sowas in der richtung ein
1
$nobutton = "default";
2
if(isset($_POST['nobutton'])) {
3
    $nobutton = $_POST['nobutton'];
4
}

mit javascript (jquery) könntest du sowas ähnliches probieren:
1
<form>
2
<input type="checkbox" name="nobutton" value="123" data-default="456">Test<br>
3
</form>
4

5
<script type="text/javascript">
6
$('form').submit(function() {
7
  $(this).find("input[type='checkbox']:not(:checked)").each(function() {
8
    $(this)
9
      .attr('checked', 'checked')
10
      .prop('checked', true)
11
      .val($(this).data('default'));
12
  });
13
});
14
</script>

beides nur auf die schnelle zusammengeschrieben, kann durchaus sein, 
dass da fehler drinnen sind...
#3707939
Lesenswert?

normalerweise verwendet man ein hidden-field mit dem gleichen namen wie 
die checkbox, welches den default wert enthält:
1
<input type="hidden" value="0" name="box0" />
2
<input type="checkbox" value="1" name="box0" />

trotzdem sollte man serverseitig alle benötigten variablen/default werte 
vorhalten, um so ein unerwartetest verhalten zu verhinden! z.B. kann man 
ein assoziatives array mit allen erwarteten werten anlegen und bei 
bedarf auf die defaults ausweichen.
1
// werte die man im programm verwendet
2
$postData = array();
3

4
// default werte
5
$postDefaults = array(
6
    'box0' => '0',
7
    'box1' > '1'
8
);
9

10
// werte kopieren bzw. defaults verwenden
11
foreach ($postDefaults as $key => $value){
12
   if (isset($_POST[$key])){
13
      $postData[$key] = $_POST[$key];
14
   }else{
15
      $postData[$key] = $value;
16
   }
17
}

durch dieses vorgehen werden effektiv möglich angriffsmöglichkeiten 
verhindert...dies ist gerade als anfänger wichtig...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren