Variable Anzahl an Checkboxen incl. Werten
Peter Mairhofer
- php
0 fastix®0 Sönke Tesch0 Peter Mairhofer0 fastix®0 Peter Mairhofer0 fastix®
0 fastix®
Hallo,
Ich habe eine variable Anzahl an Checkboxen, die ich in einem Formular übergeben will. Natürlich will ich auch wissen, WELCHES dieser Checkboxen aktiviert wurde.
Also ich habe z.B. in PHP eine Array mit 5 Sachen:
$Array = { Ball, Schirm, Schuh, Baum, Haus }. (diese kommen in Wirklichkeit von einer Datenbank).
Allerdings sind manche (das ist immer unterschiedlich) Checkboxen standardmässig schon angehakt, aber das sollte ja keinen Unterschied machen.
Ich forme mir daraus Formularelemente mit Checkboxen:
for($i = 0; $i < count($Array); $i++)
{
echo "<input type=checkbox name=chbox[]>\n";
}
Wie kann ich jetzt im Zielscript feststellen, WELCHE Elemente aktiviert wurden? Leider scheint PHP überhaupt nur die Elemente, die angehakt wurden in das Array $chbox zu schreiben....
Any ideas?
Thxalot!
Peter
for($i = 0; $i < count($Array); $i++)
{
echo "<input type=checkbox name=chbox[]>\n";
}
Was spricht gegen:
for($i = 0; $i < count($Array); $i++)
{
echo '<input type="checkbox" name="chbox['.$i.']">\n';
}
oder:
echo '<input type="checkbox" name="chbox_'.$array[$i].'">\n';
?
Das erzeugt dann schon mal valides HTML und Deine Checkboxen haben verschiedene Namen...
fastix®
for($i = 0; $i < count($Array); $i++)
{
echo "<input type=checkbox name=chbox[]>\n";
}
Bitte schreibe Anführungszeichen um HTML-Elementattribute.
Wie kann ich jetzt im Zielscript feststellen, WELCHE Elemente aktiviert wurden? Leider scheint PHP überhaupt nur die Elemente, die angehakt wurden in das Array $chbox zu schreiben....
Das sieht an diesem Ende der Leitung etwas putzig aus: Du stellst eine Frage und beantwortest sie im nächsten Satz selbst. Was genau willst Du wissen?
Gruß,
soenk.e
PS: Du solltest eventuell mal Deine PHP-Uralt-Version ersetzen. Wenn's nicht Deine ist, solltest Du Dich besser nach einem neuen Hoster umschauen, denn Dein derzeitiger kümmert sich offenbar einen Schnurz um seinen Server.
for($i = 0; $i < count($Array); $i++)
{
echo "<input type=checkbox name=chbox[]>\n";
}
Man sollte nicht gleichzeitig essen und nachdenken :) fastix hat natürlich recht, und etwas schöner geht's so:
foreach ($array as $v)
{
echo "<input type="checkbox" name="chbox[".htmlentities($v)."]">\n";
};
Und wenn ich's mir recht überlege, geht es vielleicht so noch besser:
foreach ($array as $v)
{
echo "<input type="checkbox" name="chbox[]" value=".htmlentities($v)."">\n";
};
Der Versuch wär's jedenfalls wert..
Gruß,
soenk.e
Zunächst einmal danke für eure Antworten!
An Sönke:
1.) War ein Schlampigkeitsfehler, normalerweise schreib ich immer Anführungszeichen um HTML Attribute. (war nicht aus dem Code kopiert)
2.) Ich habe keine PHP UraltVersion (PHP 4.3.1)
3.) Und wieso sollte ich mich nicht um meinen Server kümmern?
Wenn du meine Syntax anzweifelst, würde mich interessieren was dran falsch ist! Ich persönlich bevorzuge z.B. einfach die klassische for Schleife falls es das ist, was du meinst. Was spricht ebenso dagegen, Anführungszeichen bei echo zu verwenden und die dazwischen zu quoten?
Doch jetzt zu meiner Frage. Es will einfach nicht klappen. Ganz präzise:
Die Formularseite liest eine mySQL Datenbank aus. In dieser Datenbank stehen verschiedene "Features" für ein Programm.
Auf der Formularseite soll man nun auswählen können, WELCHE Features das Programm nun haben soll. Dabei hilft's mir nix, wenn ich irgendwie lauter "on" als Output kriege. Ich will wissen, welche IDs die Elemente haben.
Also die Tabelle könnte so aussehen:
1 1 1
2 1 7
3 1 11
(...)
Die erste Spalte ist eine ID (egal). Die zweite Spalte die ID zu einem Programm (ein Programm kann variabel viele Features haben, in diesem Fall hat das Programm mit der ID 1 3 Features). Die dritte Spalte gibt die FeaturesID an (wieder eine Referenz auf eine andre Tabelle. Also das Programm1 hat die Features 1, 7, 11.
Auf der Seite sollen nun *alle* Features, die es gibt als Checkboxen angezeigt werden. Zusätzlich sollen die Features mit der ID 1, 7, 11 bereits vorgewählt sein.
Der Benutzer soll jetzt *irgendwelche* Features wählen können. Action-Script will ich nun wissen *welche* Features gewählt wurden.
Erschwerend kommt auch noch hinzu, dass die IDs für die Features auch 983645, 34597324 oder 34956345 sein könnten.
Ist jetzt klar, was ich meine??
Peter
PS: Wenn mir PHP eine Array mit allen Werten (nicht nur den, die gecheckt sind) geben würde, dann könnte ich ein weiteres hidden Element anbringen, das die IDs enthält. Dadurch, dass jetzt aber das erste Array immer nur so viele Elemente hat, wie gewählt wurden und nicht so viele, wie es insgesamt gibt, sind die beiden Arrays nicht synchron und ich kann nicht feststellen, welche IDs gewählt worden sind. Anders bräuchte ich nur den folgenden Code:
for($i = 0; $i < count($Features); $i++)
{
if($Feature[$i] == "on")
{
echo "ID $FeatureID[$i] wurde gewählt!\n";
}
}
for($i = 0; $i < count($sch); $i++)
{
echo "<input type="checkbox" name="Feature[]"> ".$sch[$i][1]."\n";
echo "<input type=hidden name="FeatureID[]" value="".$sch[$i][0]."">";
}
($sch ist ein zweidimensionales Array, das ALLE Features enthält. Die Zeilen sind die verschiedenen Features, die erste Spalte die ID für das Feature, die zweite Spalte der Name.
Hilft Dir:
http://fastix.dyndns.org/tests/test2.php weiter?
Da wird genau wie das Formular die Auswertung dynamisch generiert.
fastix®
Herrlich! Genau das was ich suche, vielen Dank!
Peter
Danke für' das Feedback.
:)
fastix®
Moin!
Falls mein Rechner mal aus oder offline ist: hier der Quelltext für's Forum.
<html>
<h3>Auswertung:</h3>
<?php
$Array = array("F1", "F2", "F3");
for($i = 0; $i < count($Array); $i++)
{
$testname=$Array[$i];
# Nur zur Vereinfachung...
$test_eval="@$$testname = $_GET['".$testname."'];";
# In die Variable wird etwas geschrieben, was letztendlich eine Zeile PHP- Code ist.
# Im ersten Fall (Array[0]="F1") entsteht: "@$F1 = $_GET['F1'];"
# Damit dürfte dann auch klar sein, warum die "$" mit "" maskiert wurden.
# Das "@" muss hinein, damit keine Fehlermeldungen entstehen.
echo "eval($test_eval);<br>";
# Das dient hier nur zur Ausgabe im Beispielscript.
eval ($test_eval);
# Der Code, der in der Variable ist, wird ausgeführt.
$test_eval='echo "'.$testname.' = $'.$testname.'<br>";';
eval ($test_eval);
# Das gleiche Spiel nochmal...
}
?>
<hr>
<h3>Formular:</h3>
<form action="test2.php" method="GET" target="_self">
<?php
for($i = 0; $i < count($Array); $i++)
{
echo '<input type="Checkbox" name="'.$Array[$i].'"> '. $Array[$i].'<br>';
}
?>
<input type="Submit" name="" value="senden">
</form>
<hr>
<h3>Quelltext:</h3>
<?php show_source("test2.php"); ?>
</html>
fastix®
Hier noch ein paar Stichworte für die Suche:
Dynamisch Anzahl Formularelemente, Input, Werte, auswerten