Checkboxen - Values weitergeben als Array

Tucker

Erfahrenes Mitglied
Hi,

ich habe folgendes Problem:
Ich habe ein Script für mein Gästebuch geschrieben, welches mir eine Tabelle mit zwei Spalten in einer for- Schleife mit den Einträgen entsprechend vielen Zeilen erstellt. In der ersten Spalte wird jeweils eine checkbox erstellt, in die Zweite kommt der Eintrag.
Dadurch, dass die Checkboxen mit einer Schleife erzeugt werden, habe ich jeder Checkbox zwingend den selben Namen gegeben (anderer Grund ist auswertendes Script) in der Hoffnung, dass das folgende PHP- Script dies als Array anerkennt. Allerdings funtioniert das anscheinend nicht so wirklich. Ist es von Seiten PHP's nicht möglich, die Auswertung der Checkboxen als Array vor zu nehmen? Oder liegt das an HTML, dass HTML das Value der vorhergehenden Checkbox mit dem sleben Namen überschreibt?

Hier das Script zur Erstellung der Checkboxen:
PHP:
<?php
echo "<form ...>";
echo "<table>";

$anzahl_eintraege=file('gb.txt');

for ($i=0; $i<count($anzahl_eintraege); $i++)
{
echo "<tr>";
echo "<td>";
echo "<input type=\checkbox\" name=\"eingabe\" value=\"".$i."\">";
echo "</td>";
echo "</tr>";
echo "<tr>";
echo "<td>";
//hier kommen jetzt die Einträge rein
echo "</td>";
echo "</tr>";
}
 
Zuletzt bearbeitet:
Mit HTML hat dies nichts zu tuen. Damit alle Checkboxen nach dem Submit als Bestandteil in einen Array fungieren, erstellst du die Checkboxen mit den gleichen Namen plus die eckigen Klammern.

Das fungiert nach dem gleichen Prinzip wie du eine Variable im PHP Dokument in ein Array Feld hinzufügen kannst.

Da lautet es nämlich:


$newArray = array();
$newArray[] = "Metwurst";


Beispiel:

<input type="checkbox" name="list[]" value="Gurke">

Du musst nur die Values der einzelnen Checkboxen zu deinen gunsten anpassen bzw. generieren.

Auswertung geht dann wiefolgt:

PHP:
if(isset($_Request[list]))
     {
          foreach($_Request[list] as $tcp => $value)
               {
                      print $value . "<br>";
               }
     }

In diesem Sinne
 
Hm, Alles klar. Aber wenn ich das in dieser Weise mache, dann steht das im Konflikt mit dem nachfrolgendem Script. Ich brauche hier eine Fallunterscheidung und eine Übertragung jedes Values, nach der Form:


$list[0]="gurke";
$list[1]="nichtgurke";


Dies brauche ich dann nämlich für den nächsten IF- Clause, um zu bestimmen, ob denn nun eine Zeile in eine TXT geschrieben wird, oder nicht.


Würde auch mal empfehlen den Thread zu verschieben. ;)
 
Nun eine Checkbox wird nur weitergeleitet an das nächste Script(action) wenn es aktiviert ist ansonsten bleibt es "Auf der Strecke".

Deine if Abfrage musst du dann nur um eine Bedingung erweitern, und zwar, ob das Array Feld mit dem Namen existiert, wenn nicht, dann mach das...

In diesem Sinne
 
Ja, hab ich mir auch gedacht, aber das funtioniert auch nicht, da ein Array mit so vielen Elementen erstellt wird, wie Checkboxen aktiviert waren. Das heißt, wenn ich drei unterschiedliche Checkboxen markiert habe, gab es ein Array mit 3 Inidzies, egal an welcher Stelle die Checkbox war.

Und sage mal, dass ist nicht möglich, oder?
PHP:
echo "<input type=\"checkbox\" name=\"eingabe[".$i."]\" value=\"delete\">"; //dieser Auszug befindet sich in Schleife, $i ist die Zählvariable


Das Wäre ja eine Möglichkeit alle Checkboxen "weiter zu geben" und dann liese sich auch die Prüfung auf Vorhandensein relisieren.
 
Zuletzt bearbeitet:
Code:
<?php
if(isset($_REQUEST[Los]))
	{
		$arr	=	array("Fussball", "Basketball")
		
		foreach($_REQUEST[value] as $rw)
			{
				foreach($arr as $ta)
					{
						if($rw	==	$ta)
							{
								print $rw . "<br>";
							}
					}
			}
	}


?>
<form action="<?php print $PHP_SELF; ?>" name="form1" id="form1" method="post">
<input type="checkbox" name="value[]" value="Fussball">
<input type="checkbox" name="value[]" value="Basketball">

<input type="submit" name="Los" id="Los" value="Los">
</form>

Du definierst im Nachfolgescript ein Array das alle Checkboxen enthält, die es auf deiner Seite gibt und prüfst wie oben auf Vorhanenheit.

Das könnte eine Lösung deines Problems sein.

In diesem Sinne
 
Oh, sorry, ich glaub ich hab was vergessen zu erwähnen.
Ich nutze eine Schleife, durch die es mir alle Einträge meines GB's ausspuckt. Neben jedem Beitrag soll eine Checkbox, mit der man bei Markierung den Eintrag löschen kann.
 
Das sollte doch nicht so kompliziert werden.
Anstatt den Eintrag im Namen der Variablen zu speichern, lege ihn im Wert der Variablen ab:
PHP:
for ($i=0; $i<count($anzahl_eintraege); $i++) 
{ 
echo 'Eintrag Löschen?<input type="checkbox" name="delete[]" value="'.$i.'"><br>'; 
echo $anzahl_eintraege[$i];
}

Da kannst du dann wunderbar im Folgeskript den Array $_REQUEST['delete'] durchgehen.... die Werte der einzelnen Arrayelemente sind dann die Nummern der zu löschenden Zeilen.
 
Ja, auch wenn es hier nicht hingehört, verzeiht es mir bitte. Im PHP- Forum hat mir keiner drauf geantwortet. Vielleicht kann man das Thema ja auch verschieben.

Ich habe jetzt das Script von fatalus genutzt, nur das "delet[]" "eingabe[]" ist Das auswertende Script sieht so aus:
PHP:
<?php 
$eintraege=file('gb2.txt');
		$fp="gb2.txt";
		$modus="w";
		fopen($fp, $modus);

for ($i=0; $i<count($eintraege); $i++)
{
	if ($_REQUEST["eingabe"] != $i)
	{
		fputs($fp, $eintaege[$i]."\n");
		
	}
	else
	{}
}
fclose($fp);?>
Das Problem ist jetzt nur, dass es mir zwar was löscht, nur das das was es mir löscht, alles ist. Zu deutsch ist nach dem Durchlaufen dieses Scriptes der gesamte Inhalt von "gb2.txt" gelöscht. Warum?
 
Das der Inhalt zuerst gelöscht wird, liegt am $modus "w" ....aber das ist ja sicher so gewollt.

Das nix neues hineingeschrieben wird, dürfte an dem fehlenden r in
Code:
fputs($fp, $eintaege[$i]."\n");
liegen.....

stell während der Entwicklung am besten dein Error-Reporting auf E_ALL, dann wäre dir das angezeigt worden.
 
Zurück