Java Script Formular

adwebster_Andi

Angesehenes Mitglied
Salve Forum

Habe folgendes Problem:

Wie schaff ich es eine Gruppe von Checkboxen auf maximal 2 "checked" zu begrenzen?
Wird ein dritter angeklickt, soll der erste wieder deaktiviert werden.


Konkretes Problem:

User sollen sich in einem Webkatalog bei maximal 2 Kategorien anmelden können. Diese Kategorien kann der User via seinem Account anpassen bzw. ändern. Wir wollen aber nicht, dass ein user sich bei allen kategorien einträgt, sondern eben nur bei 2.



Tnx&Gruss,
andi

 
Sowas solltet Ihr besser serverseitig lösen, denn JavaScript kann man einfach abschalten und eine Überprüfung ist nicht mehr möglich.
 
Danke Sascha,

Stimmt. JS kann ausgeschalten werden. Unser Progr weiss aber nicht, wie das Ganze serverseitig zu lösen ist.

Wir bräuchten also immer noch eine Java Script Lösung...

Anyone?

 
QUOTE Unser Progr weiss aber nicht, wie das Ganze serverseitig zu lösen ist.


Dann
rolleyes.gif
würde ich einen anderen Programmierer nehmen.
Aber das darf nicht das Problem sein!
Der Satz klingt unangenehm, aber das ist meine Meinung. Ich will den Programmierer nicht als dumm darstellen.





QUOTE Wir bräuchten also immer noch eine Java Script Lösung...

Das Problem ist wie Sascha schon sagte, dass jeder JavaScript ausschalten kann.
Oder man editiert die Datei - löscht alle JavaScript-Befehle heraus, öffnet dann die Datei und schicht dann das Formular ab.

JavaScript kann nicht 100%ig sicherstellen, ob nur zwei Kategorien ausgewählt worden sind.

Wenn du sicher gehen willst, dass man sich nur in zwei Kategorien einträgt, dann muss du dies per PHP, Perl oder sonst wie serverseitig kontrollieren.
 
QUOTE (Andi Nigg @ Sa 30.12.2006, 17:41)[...] Unser Progr weiss aber nicht, wie das Ganze serverseitig zu lösen ist. [...]

Wieso weiß er das nicht
blink.gif
, serverseitig ist es vermutlich sogar leichter zu lösen als mit JavaScript.





HTML <input type="checkbox" name="my_checkbox_array[]" value="cat_1" /> Webdesign
<input type="checkbox" name="my_checkbox_array[]" value="cat_2" /> Programmierung
<input type="checkbox" name="my_checkbox_array[]" value="cat_3" /> Chat


PHP:

CODE [...]
if ( count($_POST['my_checkbox_array']) > 2 ) {
  error_msg('Sie dürfen sich maximal in 2 Kategorien eintragen');
}
[...]




JavaScript (vermutlich, verausgesetzt das length wird nicht anderes interpretiert als vermutet; nicht getestet):

CODE
function check_form () {
  if ( document.forms.formname.my_checkbox_array.length > 2 ) {
     alert("Sie dürfen sich maximal in 2 Kategorien eintragen");
  }
}


oder

CODE
function check_form () {
  if ( document.getElementById("formid").my_checkbox_array.length > 2 ) {
     alert("Sie dürfen sich maximal in 2 Kategorien eintragen");
  }
}


Wenn das nicht klappt könnte es ggf. wesendlich komplizierter werden
 
Hallo Patrick

Tnx for your feedback. Ich bin eigentlich sehr zufrieden mit unserem Progr. Er beherrscht CF wie seine Westentasche und ganz besonders schätz ich, dass er jeweils mitdenkt. Also nicht nur coden und gut ist, sondern er überlegt sich, wo es Komplikationen geben könnte und stellt sich dementsprechend darauf ein.

Und es ist ja so, dass wir v.A. am Anfang den Webkatalog (der eigentlich nur einen Teil des Projektes ausmacht) überwachen werden. Und falls jemand JS auschaltet und sich dann bei mehreren Kategorien einträgt, dann ist derjenige ziemlich schnell weg vom Fenster....bzw. von der Seite.

@ Sascha: Vielen, vielen Dank. Du bist echt super. Ich hoffe mal das wird ihm reichen.


Schönen Abend allerseits,
Gruss,
andi
 
my_checkbox_array[] hat mich gestört. Dann müsste die Variable $_POST['my_checkbox_array[]'] heißen.
unsure.gif



Formular
CODE <form action="ziel.php" method="post">
<input type="checkbox" name="kategorie" value="kategorie_1" /> Webdesign
<input type="checkbox" name="kategorie" value="kategorie_2" /> Programmierung
<input type="checkbox" name="kategorie" value="kategorie_3" /> Chat
<input name="submit" type="submit" />
</form>



PHP-Datei - hier ziel.php

CODE <?php


if ( count($_POST['kategorie']) > 2) {
echo 'Sie dürfen sich maximal in 2 Kategorien eintragen<br />Zurück zum <a href="DateinameEinfügen">Formular</a>.';
} else {
//ok und weiter

}

?>
 
QUOTE (Sascha Ahlers @ Sa 30.12.2006, 15:16) Sowas solltet Ihr besser serverseitig lösen, denn JavaScript kann man einfach abschalten und eine Überprüfung ist nicht mehr möglich.

Natürlich kann JS ausgeschalten werden, aber es ist doch einfach für den User komfortabler, dass auch nur die Checkboxen ausgewählt sind, die auch später gewertet werden.
Also wäre so eine Überprüfen serverseitig und eine automatisch Änderung auf 2 Checkboxen per Javascript das Beste.

mfg Severin Fink
 
QUOTE (Patrick Zorn @ Sa 30.12.2006, 18:36)my_checkbox_array[] hat mich gestört. Dann müsste die Variable $_POST['my_checkbox_array[]'] heißen.
unsure.gif
[...]

Nein, das ist schon richtig so.
$_POST['my_checkbox_array'] muss dann ein Array sein, welches die einzelnen ausgewählten Felder mit dem Value-Wert enthält.

So wie Du es aufgeschrieben hast, wird er wohl nur eines der Felder zurückgeben (vermutlich das letzte Ausgewählte in der Reihenfolge), und $_POST['my_check_array'] ist dann kein Array, sondern ein String.



MfG Sascha Ahlers
 
Man muß dieses Problem zwingend serverseitig behandeln, da es ansonsten problemlos ausgehebelt werden kann und inkonsistente DB-Einträge erzeugt. Ein Programmierer sollte das eigentlich problemlos ohne Hilfestellung schaffen, das ist ja eine ganz normale Formularbehandlung.

Man kann bzw. sollte das aber auch zusätzlich clientseitig behandeln, weil das einfach benutzerfreundlicher ist - außerdem ist das ein nettes Spielzeug.

Irgendwann hatte ich mir mal so etwas gebaut, es ist nix aufregendes - Nimm zwei von fünf.

Geht sicher auch eleganter, mir ist damals nix dümmeres eingefallen, bei den Alerts kann man die Kommentare zur Kontrolle rausnehmen, um den Ablauf zu sehen. Allerdings muß man eine parallele interne Liste pflegen, um zu wissen, was als erstes angehakt wurde - damit das zuerst angehakte Feld beim Überschreiten der Grenze auch zuerst wieder ausgehakt wird.
 
Zurück
Oben