Wer hilft bitte: ein Formular, 2x exakt 5 Checkboxen erlauben

Mike Rofon

Erfahrenes Mitglied
Es ist für die meisten von Euch ein Anfänger-Problem... aber vielleicht hilft mir doch jemand.... vielleicht bin ich hier auch im falschen Forum... dann möge der zuständige Mod das Thema bitte verschieben...

Also:
ein Formular... der User bekommt eine Liste von Positionen , wo er per Checkbox 5 auswählen soll.... EXAKT 5... nicht mehr und nicht weniger.
Im selben Formular bekommt er auch noch eine andere Liste... auch aus diesen Positionen soll er per checkbox 5 auswählen ... auch wieder EXAKT 5 wählen.

Jetzt habe ich hier im forum eine Funktion gefunden, die in einem Formular die maximalen Checkboxen begrenzt .

PHP:
	function cbLimit()
	{

		with(document.forms[0])
		{
			var cbLimit = 5; // Maximale Auswahl
			var cbCount = 0;
			var cbSel   = 0;

			/* Anzahl der Checkboxen und der ausgewählten bestimmen */
			for (var n = 0; n < elements.length; n++)
			{
				if(elements[n].type.toLowerCase() == 'checkbox') // 'radiobutton'
				{
					cbCount += 1;  // ++cbCount oder cbCount++ - sieht so aber schöner aus
					cbSel   += elements[n].checked;
				}

			}

			/* Auswertung */
			for (var n = 0; n < cbCount; n++)
				elements[n].disabled = !elements[n].checked && cbSel >= cbLimit;

		}
	}
Das Script erlaubt ja nicht mehr als 5 Checkboxen.
Wenn der User das Formular mit weniger als 5 gecheckten Boxxen abschickt, hätt ich das in der Formularprüfung abfangen wollen.

Aber wie mach ich das für die 2. Serie von Checkboxen?

Beispiel für ein Checkbox-<input> wie ich es bisher habe:

PHP:
echo "<td><input type=\"Checkbox\" name=\"raus\" value=\"$x\" $checked onClick=\"cbLimit();\">".$raus[x]."</td>"

Für die 2. Serie von Checkboxen hatte ich name="rein" vorgesehen.

Sagt mir bitte jemand wie ich das Script richtig anpasse?
 

Mike Rofon

Erfahrenes Mitglied
Als ich die cblimit()-Funktion komplett rausgenommen hatte, funktionierte das ganze auch :)
Ich hatte Dein Tutorial schon gesehen bevor ich die Frage gestellt hatte, aber da haben sich beide Scripte auf irgendeine Weise gebissen.... Wenn erst bei den zweiten 5 Checkboxen alles stimmt, aber bei den ersten 5 Stück noch nicht, kommt zwar die korrekte Alert-Box, aber dann führte die Seite den Submit-Button aus und sprang zur Webseite in <FORM action=xxx.php ... >. Sehr myteriös aber reproduzierbar.

Jetzt brauch ich nur noch eine nette kleine FOR-Schleife in PHP, um $_POST['raus'] und $_POST['rein'] auszulesen und auszuwerten... auf der Basis von ...
Code:
<td><input type="Checkbox" name="raus[]" value="14" >0</td>
<td><input type="Checkbox" name="raus[]" value="15"  checked='checked' >1</td>
<td><input type="Checkbox" name="raus[]" value="16"  checked='checked' >1</td>
<td><input type="Checkbox" name="raus[]" value="17"  checked='checked' >1</td>
<td><input type="Checkbox" name="raus[]" value="18"  checked='checked' >1</td>
<td><input type="Checkbox" name="raus[]" value="19"  checked='checked' >1</td>
<td><input type="Checkbox" name="raus[]" value="20"  checked='checked' >1</td>
<h3>Hörer-Neuvorschläge</h3><div align =center><table cellpadding=1 cellspacing=0 width=95% border=0><tr>
<td><input type="Checkbox" name="rein[]" value=1  checked='checked' >1</td>
<td><input type="Checkbox" name="rein[]" value=2  checked='checked' >1</td>
<td><input type="Checkbox" name="rein[]" value=3  checked='checked' >1</td>
<td><input type="Checkbox" name="rein[]" value=4  checked='checked' >1</td>
<td><input type="Checkbox" name="rein[]" value=5  checked='checked' >1</td>
<td><input type="Checkbox" name="rein[]" value=6  checked='checked' >1</td>
Ich muß ja irgendwie rausbekommen, welche 5 der Checkboxen angeklickt worden sind und welche nicht.
Könntest Du mir da bitte auch ein wenig auf die Beine helfen?
 

Sven Mintel

Mitglied
Das geht bspw. so:
Code:
if(isset($_POST['rein']))
{
  foreach($_POST['rein'] as $value)
    {
      //$value enthält den/die übermittelten Werte
    }
}

....so, wie du die Boxen benannt hast, lässt sich nur der übermittelte Wert erkunden, die Position(ob es nun die erste oder 3 oder sonst eine Box ist) jedoch nicht.
Falls du die "Position" benötigst, müsstest du die Boxen so benennen:
Code:
<input type="Checkbox" name="rein[1]" value=1  checked='checked' >
<input type="Checkbox" name="rein[2]" value=2  checked='checked' >
...usw.
 

Mike Rofon

Erfahrenes Mitglied
Ich guck mir ja fleißig Eure Tutorials an :) ... und da hab ich folgendes gefunden... und ein wenig angepaßt
PHP:
$raus=$_POST['raus']; 
// $rein=$_POST['rein']; aber das brauch ich erst später :)
while(list($k,$v)=each($raus)){ 
  // Dieses ECHO liefert nur Werte bei $k und $v, bei den andern beiden krieg ich nix raus 
  echo $k." | ".$v.">>".$vorwoche[v]."##"; 
  echo $platz[$v]; 
  echo "<br>"; 
  }
allerdings funktioniert da auch etwas nicht.... mit dem Inhalt von $v kann ich nicht auf die Array $platz[] und $vorwoche[] zugreifen, die aus einer MySQL-Tabelle befüllt wurden (http://www.tutorials.de/forum/php/275977-array-inhalte-ploetzlich-weg.html#post1427577 )

Thema aktuelle Position... brauch ich nicht wirklich. es geht darum, 5 Datensätze einer Tabelle auszuwählen, mit denen dann etwas passiert... also anhand obigem Codeschnipsel will ich in $v die ID des Datensatzes haben ...
Da ich nicht der Profi-Programmierer bin, hab ich mir erstmal die Schnipsel aus euern Tutis genommen ... vielleicht funktioniert aus etwas wie FOREACH (raus[] ) oder so ähnlich ... ich bin ja noch am pro(gramm)bieren :)
 

Quaese

Moderator
Moderator
Hi,

also bei mir funktioniert Deine Methode - vorausgesetzt, es wird es wird das v in $vorwoche[v] in $v geändert
und die Arrays vorwoche und platz enthalten in den Komponenten zu den übergebenen Indices Werte.
Code:
echo $k." | ".$v.">>".$vorwoche[$v]."##";
Ciao
Quaese