[html]checkboxen mit gleichem namen

Kopfgeldjaeger

requiescat in pace
ID: 166997
L
28 April 2006
461
32
wenn ich sagen wir 10 checkboxen den gleichen namen geb, value gern verschieden, wie kann ich dann prüfen, welche von denen angeklickt is bzw. geht das (alternativen a la verschiedene namen gehen nicht)...

programmiersprache egal...geht aber im grunde um java^^

bitte um schnelle antwort wenns geht, hoffentlich halbwegs verständlich geschrieben(mein text)...
 
unlogisch.
meinst du die checkboxen (also die dinger zum anhaken) oder die radiobuttons (wo nur eins angewählt werden kann)?

x3ntar
 
wenn man ewig drüber nachdenkt wirds immer logischer....ich hab mir das allerdings nich überlegt

wenn ich schreib checkbox dann mein ich auch checkbox
 
gelöst

Code:
# Fall 1: Verschiedene Namen, gleicher Wert
<input type="checkbox" name="cbutton[1]" value="yes">
<input type="checkbox" name="cbutton[2]" value="yes">

# Fall 2: "Gleiche" Namen, verschiedene Werte
<input type="checkbox" name="cbutton[]" value="1">
<input type="checkbox" name="cbutton[]" value="2">

Die Abfrage erfolgt in beiden Fällen mit

if (isset($cbutton)) {
  reset($cbutton);
  while(list($k, $v) = each($cbutton)) {
    print "$k $v\n";
  }
} else {
  print "alle cbutton schlafen schon.\n";
}
https://www.php-center.de/faq/faq-webvariablen.html
 
Schon allein die Tatsache, dass zwei Kästchen angekreuzt werden können, spricht doch gegen eine Checkbox. Natürlich kann man sich eine Funktion schreiben, die nur ein angekreuztes Kästchen zulässt, ist meiner Meinung nach aber total unsinnig.

x3ntar
 
tleilax schrieb:
Vielleicht will er ja, dass mehrere angekreuzt werden können!?
Dagegen spricht dann wieder, dass alle den gleichen Namen haben sollen.
So wie ich es verstehe, sollen mehrere zur Auswahl stehen, aber nur eine darf aktiviert werden.
 
Wenn's unter Java sein soll, ist es vermutlich 'ne JSP, die die Daten auswerten wird oder? Dann kannst Du allen Checkboxen den gleichen Namen geben und sie anschliessend innerhalb der JSP mit ServletRequest.getParameterValues() als Array auslesen.

[edit]

Achso, war ja eh schon gelöst...

@JayJay:

Guck Dir mal Kopfgeldjägers "gelöst"-Beitrag an. Da sieht man, dass auch Checkboxen mit gleichem Namen (unter PHP muss es dann halt ein Array[]-Name sein) ausgelesen werden können. Bietet sich an für zu löschende Einträge, Interessen etc pp.
 
tleilax schrieb:
Wenn's unter Java sein soll, ist es vermutlich 'ne JSP, die die Daten auswerten wird oder? Dann kannst Du allen Checkboxen den gleichen Namen geben und sie anschliessend innerhalb der JSP mit ServletRequest.getParameterValues() als Array auslesen.


jop...liegst richig.
danke
das ganze is aber im grunde garnich für mich ;)

begründung wegen gleichem namen: muss dem prog erst beigebracht werden und dauert länger...
 
tleilax schrieb:
@JayJay:

Guck Dir mal Kopfgeldjägers "gelöst"-Beitrag an. Da sieht man, dass auch Checkboxen mit gleichem Namen (unter PHP muss es dann halt ein Array[]-Name sein) ausgelesen werden können. Bietet sich an für zu löschende Einträge, Interessen etc pp.
Jupp, habe ich auch übersehen. Aber den Sinn des ganzen muss ich heute Abend nochmal überdenken. :mrgreen:
 
Beim Sinn kann ich Dir auch eben unter die Arme greifen. ;)

Stell Dir mal vor, Du willst die Interessen eines Users erfassen per Checkbox. Ohne die hier benutzte Variante wäre es wohl so:
HTML:
<form ...>
  <input type="checkbox" name="sport" value="1"/> Sport<br/>
  <input type="checkbox" name="movies" value="1"/> Filme<br/>
[...]
Die Auswertung würde beinhalten, dass jeder Wert einzeln abgefragt wird:
PHP:
if (!empty($_POST['sport'])) {
  $db->insert("INSERT INTO user_interests (userid, interest) VALUES ($userid, 'sport')");
}
if (!empty($_POST['movies'])) {
  $db->insert("INSERT INTO user_interests (userid, interest) VALUES ($userid, 'movies')");
}
Und je mehr Interessen das sind, desto aufwendiger (und länger) wird das Ganze.

Da bietet es sich doch an, die Interessen in einem Array geliefert zu bekommen:
HTML:
<form ...>
  <input type="checkbox" name="interests[]" value="sport"/> Sport<br/>
  <input type="checkbox" name="interests[]" value="movies"/> Filme<br/>
[...]
Dann lässt sich die Verarbeitung reduzieren auf:
PHP:
foreach ($_POST['interests'] as $interest) {
  $db->insert("INSERT INTO user_interests (userid, interest) VALUES ($userid, '$interest')");
}
Somit ist dieser Part für jede beliebige Anzahl von Interessen immer gleich.

Noch einfacher wird's wenn man nur bestimmte IDs aus einer DB auswählen will:
PHP:
$db->query("SELECT foo FROM bar WHERE id IN (".implode(',', $_POST['ids'].")");
PS: Ja, ich weiss. Injection-safe ist manches im Beispiel nicht, aber dafür sind's ja auch nur Beispiele. ;)