Html/PHP - Forms für Anfänger

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Html/PHP - Forms für Anfänger
Ich hab folgendes Szenario:

Ich hab eine Website die mir tabellarisch alle meine rss suscribtions anzeigt.
Die Info dafür holt ich mir vorher aus einer mysql Datenbank.
Nun kann man auf dieser Website mit checkbox checks sich für bestimmte
rss feeds suscriben oder auch wieder austragen. Sachen für die ich mich bereits
suscribed habe werden gechecked angezeigt.

soweit ist auch schon alles fertig
nun hab ich das problem das bei einem

...
<input type=\"checkbox\" name=\"irgendwas\" value=\"\">
...
<form action="submit.php" method="POST">
....

ich in der submit.php sachen nur so $_POST[“irgendwas”] abfangen kann.
ich würde gern der submit.php ein array übergeben das ungefähr so aussieht

$myarray = array( "sportsfeed" => checked , "newsfeed" => unchecked , "healthfeed" => checked , ..... )

also so das ich in der submit.php anhand dieses arrays meine datenbank updaten kann was jetzt suscribed wurde und was nicht.
lässt sich das in php irgendwie machen? ich hab zwar was gelesen, aber das war echt dünn dokumentiert.
wäre nett wenn sich n guru mal herablassen könnte paar tips zu geben :wink:


unchecked gibts nicht, es gibt nur checked bei checkboxen

und ansonsten is $myarray doch dein $_POST


Mit der Besonderheit, dass nur diejenigen Felder übertragen werden, die „checked“ sind. Und dann haben sie den Wert, der dem im value-Parameter angegeben ist. wie oben zu sehen ist also nicht unbedingt eine besonders schlaue Sache. Ich trag als value immer „1“ oder einen allgemeinen Wert ein, der sowas wie „ja“ bedeutet. Dann enthält $_POST für eine ausgewählte Checkbox „chk1“ => „1“ und für eine nicht ausgewählte nichts.

Ich hoffe, das hilft dir etwas weiter, da ich das eigentliche Probleme nicht verstehe.


Hallo,

wenn ich es richtig verstanden habe, willst du aus Input in einer bestimmten Form Daten in einer anderen Form erhalten. Also, du hast gegeben: $_POST[“blackjack”] (oder auch nicht, wie Yves geschrieben), du willst den Array $stuff, wobei $stuff[“blackjack”] entweder dings oder bums ist.

Du könntest natürlich hergehen, und einfach den ganzen $_POST abarbeiten, um die Inhalte in deine Form zu bringen, was aber bedeutet, dass nicht existente Werte dann auch im Resultat nicht auftauchen, dafür aber viel zu viel anderer Schrott.

Du kannst auch einfach jeden Wert, der dich interessiert, an deinen neuen Array dranhängen, also:

$stuff = array();
$stuff["blackjack"] = (isset($_POST["blackjack"]) ? "checked" : "unchecked");

Das für jede einzelne Variable zu schreiben kann Nerven kosten und falls es jemand anderes mal lesen sollte, aufs Maul geben. Also wieso das nicht in einer Schleife lösen, wobei wir uns in einem Array vorhalten, für welche Wertnamen wir uns interessieren:

$names = array("blackjack", "nutten");
$stuff = array();

foreach ($names as $stuffit) {
 $stuff[$stuffit] = (isset($_POST[$stuffit]) ? "checked" : "unchecked");
}

So, viel Spaß damit!

cu
Ford Prefect


wow danke junx!


Nur wen es interessiert, man kann per HTML und PHP wunderbar Arrays auch per POST oder GET übergeben:

<label for="checkbox0">Checkbox 0</label><input type="checkbox" name="checkbox[0]" id="checkbox0" value="1">
<label for="checkbox1">Checkbox 1</label><input type="checkbox" name="checkbox[1]" id="checkbox1" value="1">
<label for="checkbox2">Checkbox 2</label><input type="checkbox" name="checkbox[2]" id="checkbox2" value="1">

ergibt als $_POST[‘checkbox’] ein array. Geht natürlich auch mit named arrays ([‘meins’]), automatischen Indizes (checkbox[]) und mehrdimensionalen Arrays checkbox[‘eins’][12].

Das kann man dann so verwurschten:

$checkbox = array(0 =>"", 1 => "", 2 =>"");
$posted = ((isset($_POST['checkbox'])) && (is_array($_POST['checkbox']))) ? $_POST['checkbox'] : array();
foreach($checkbox as $Index => $value)
   $checkbox[$Index] = ((isset($posted[$Index])) && ($posted[$Index] == 1)) ? true : false;

Raus bekommt man ein leicht zu testendes array $checkbox, das alle Felder enthält und das man einfach abfragen kann mit

if ($checkbox[0]) {
  ...
}

Im Prinzip das Gleiche, was Ford auch gepostet hat - nur mit einem Array, statt einzelnen Variablen. Grad bei großen Matrizen aus Checkboxen ist das recht praktisch…


Hallo,

allerdings ein guter Hinweis! Was auch schick ist, man kann ja bekanntlich in PHP Arrays auch ohne explizite Indizes wachsen lassen. Also:

dashit = array();
dashit[] = 23;
dashit[] = 42;

ergibt: dashit[0] = 23; dashit[1] = 42;

Das geht auch mit Formularen, indem man die Felder eben einfach alle “dashit[]” nennt. Sehr praktisch, falls man vorher noch nicht so leicht weiss, wieviele Elemente entstehen o.ä.

cu
Ford Prefect