Homepage selbermachen 7.852 Themen, 35.619 Beiträge

Checkboxes - mehrere Ergebnisse mit PHP Schleife auslesen wie?

T E S T E R / 8 Antworten / Baumansicht Nickles

hallo,

ich steh grad voll aufm schlauch:

ich will ein formular erstellen, das checkboxes hat.
der user hat die möglichkeit, verschiedene checkboxes anzuklicken, abzuschicken und auf einer
seite sollen dann die ergebnisse aufgezählt werden.

die checkboxes werden aus einer db ausgelesen, das heisst ich weiss nicht wieviele es gibt, wieviele
er davon anklickt, diese muss ich mit irgendeiner schleife irgenwie auflisten nur wie?

versteht ihr wie ich das problem beschreibe?

Grus de T e s t e r

bei Antwort benachrichtigen
Borlander T E S T E R „Checkboxes - mehrere Ergebnisse mit PHP Schleife auslesen wie?“
Optionen
versteht ihr wie ich das problem beschreibe?
Nicht wirklich, ich versuchs einfach mal...

die checkboxes werden aus einer db ausgelesen, das heisst ich weiss nicht wieviele
Warum nicht? Kannst doch eifach mit aus der DB-Rückgabe lesen?

wieviele er davon anklickt
Aus den übgergebenen Variablen ermitteln...

mit irgendeiner schleife irgenwie auflisten
Verwendet für alle Checkboxen den selben Namen mit Angehäntem [], dann erhälst Du im auferufenden Script ein gleichnamiges Array. Die Werte der CheckBoxen sollten dabei natürlich unterschiedlich sein. Das Array kannst Du nun mit einer foreach-Schleife druchlaufen.


CU Borlander
bei Antwort benachrichtigen
T E S T E R Nachtrag zu: „Checkboxes - mehrere Ergebnisse mit PHP Schleife auslesen wie?“
Optionen

Genau, das war die Frage, du hast mir geholfen, mit dem [ ]
müsste das dann so aussehen?

<checkbox..... name=$zeile->tabelle[]
...

und dann kann ich das so weiterverarbeiten?

$a= array($zeile->tabelle[]); ??

Gruss T e s t e r und vielen Dank für die Hilfe

bei Antwort benachrichtigen
basil T E S T E R „Checkboxes - mehrere Ergebnisse mit PHP Schleife auslesen wie?“
Optionen

Nein, Borlander hat dies anders gemeint. Nehmen wir einmal an, Du liest aus der Datenbank die Felder aus und baust deinen HTML-Code daraus, dann sollte er ungefähr so aussehen:
foreach ($db_fields as $value){
echo "<input type='checkbox' name='werte[]' value='".$value."' />";
}
Auf deiner Verarbeitungsseite hast Du nun das Array werte[] mit einer variablen Anzahl von Feldern, die den durch den User aktivierten Checkboxen entsprechen. Mit diesem Array kannst Du weiter arbeiten.

bei Antwort benachrichtigen
Borlander basil „Nein, Borlander hat dies anders gemeint. Nehmen wir einmal an, Du liest aus der...“
Optionen
// Habe ich mit tatsächlich fast so gedacht,
// bin mit Deinem Code allerings nicht vollkommen einverstanden:

foreach ($db_fields as $value){
/* hab da gewisse Zweifel ob Du damit die Datensätze aus der DB bekommst */

echo "<input type='checkbox' name='werte[]' value='".$value."' />";
/* bitte " und ' vertauschen, so kommt kein sauberes HTML raus. Wenn schon " dann sollten wenigstens die Variablen im String bleiben, sonst macht es keinen Sinn einen interpretierten String zuverwenden... */

}


// CU Borlander
bei Antwort benachrichtigen
basil Borlander „// Habe ich mit tatsächlich fast so gedacht, // bin mit Deinem Code allerings...“
Optionen

Bei der Variable $db_fields habe ich natürlich vorausgesetzt, daß die Werte vorher z.B. mittels mysql_fetch_assoc aus dem Ergebnispointer in ein Array gelesen wurden. So weit schien der Fragesteller ja schon gewesen zu sein.
Das W3C erlaubt einfache Anführungszeichen als valides HTML, ' ist also nicht falsch. Allerdings wäre der bessere Ausdruck folgender gewesen:
echo "<input type=\"checkbox\" name=\"werte[]\" value=\"$value\" />";
ich bin mir nur nicht so sicher, ob in Forum hier Bachslashes als Escapezeichen funktionieren und deswegen habe ich die Alternative gewählt. Mit Vertauschten Anführungszeichen wäre übrigens im HTML-Quelltext nicht der wirkliche Wert von $value gelandet, sondern der Ausdruck $value.

bei Antwort benachrichtigen
Borlander basil „Bei der Variable db_fields habe ich natürlich vorausgesetzt, daß die Werte...“
Optionen
vorausgesetzt, daß die Werte vorher z.B. mittels mysql_fetch_assoc aus dem Ergebnispointer in ein Array gelesen wurden
Wofür soll das gut sein? Wenn ich mit den Werten was anfangen will, muss ich nicht erst die halbe DB in eine Array einlesen, das kosten nur laufzeit und vebraucht unnötig speicher - sowas kann man in fast allen fällen in der while-Schleife zum auslesen der Ergebnisdatensätze erledigen.

Das W3C erlaubt einfache Anführungszeichen als valides HTML, ' ist also nicht falsch.
Das war mir bisher unbekannt... Hast Du zufällig einen Link zur entsprechenden Stelle?

Mit Vertauschten Anführungszeichen wäre übrigens im HTML-Quelltext nicht der wirkliche Wert von $value gelandet, sondern der Ausdruck $value.
Wenn man von dem oben vor Dir geposteten Quelltext ausgeht würde auch mit einfachen Anführungszeichen (') der Wert der Variable im String erscheinen, da die Variable außerhalb der Anführungszeichen steht - macht bei einfachen natürlich Sinn, nicht aber bei doppelten...


CU Borlander
bei Antwort benachrichtigen
basil Borlander „ Wofür soll das gut sein? Wenn ich mit den Werten was anfangen will, muss ich...“
Optionen
Wofür soll das gut sein? Wenn ich mit den Werten was anfangen will, muss ich nicht erst die halbe DB in eine Array einlesen, das kosten nur laufzeit und vebraucht unnötig speicher - sowas kann man in fast allen fällen in der while-Schleife zum auslesen der Ergebnisdatensätze erledigen
Ich verstehe leider nicht ganz, was Du meinst. Wenn er folgendes macht:
$dp=mysql_connect(...);
$q=mysql_query(...);
$db_fields=mysql_fetch_assoc(...); (Alternativ auch row oder object)
so hat er automatisch die Ergebnisse in einem Array stehen, welches er mittels foreach durchlaufen kann, ich packe das Ergebnis also nicht extra in ein Array, ich nutze das Ergebnisarray, daß ich zwangsläufig habe. Haben wir uns da irgendwie mißverstanden?
Das war mir bisher unbekannt... Hast Du zufällig einen Link zur entsprechenden Stelle?
Hier ein Zitat (es gibt noch einen eindeutigeren Text, habe diesen aber auf die Schnelle nicht gefunden):
"...By default, SGML requires that all attribute values be delimited using either double quotation marks (ASCII decimal 34) or single quotation marks (ASCII decimal 39). Single quote marks can be included within the attribute value when the value is delimited by double quote marks, and vice versa. Authors may also use numeric character references to represent double quotes (") and single quotes ('). For double quotes authors can also use the character entity reference ".

In certain cases, authors may specify the value of an attribute without any quotation marks. The attribute value may only contain letters (a-z and A-Z), digits (0-9), hyphens (ASCII decimal 45), periods (ASCII decimal 46), underscores (ASCII decimal 95), and colons (ASCII decimal 58). We recommend using quotation marks even when it is possible to eliminate them..."

[http://www.w3.org/TR/html401/intro/sgmltut.html#attributes].
Wenn man von dem oben vor Dir geposteten Quelltext ausgeht würde auch mit einfachen Anführungszeichen (') der Wert der Variable im String erscheinen, da die Variable außerhalb der Anführungszeichen steht - macht bei einfachen natürlich Sinn, nicht aber bei doppelten...
Bei dem oben von mir geposteten Quelltext resultiert folgender HTML-Code:
<input type='checkbox' name='werte[]' value='[Wert der Variablen' />
Wie schon erwähnt hätte man mit escapeten doppelten Anführungszeichen auch arbeiten können, ich denke es ist austauschbar. Nicht gegangen wäre:
echo '<input type="checkbox" name="werte[]" value="$value" />';
Denn durch die einfachen Anführungszeichen wäre $value nicht interpoliert worden.
bei Antwort benachrichtigen
Heinz_Malcher basil „Wofür soll das gut sein? Wenn ich mit den Werten was anfangen will, muss ich...“
Optionen

geht es noch um das eigentliche problem oder wurde das mittlerweile gelöst :-) ?

Also wenn nicht @ tester:

ich würd des einfach so machen (diese werden mit einer normalen while schleife ausgelesen)

while($zeile=mysql_fetch_object($result)){....
<input type.... name=\"werte[]\"...>
....}

verarbeiten kannst du das dann z.b. so:

for($i=0;$i {
//was eben mit den werten gemacht werden soll
}

das sollte das Problem lösen

zu borlander und basil: ich persönlich nehme entweder das einzelne hochkomme ' aber gehe mittlerweile zum backslash \ plus doppelte Anführungszeichen über " da diese also so... \"... html konformer ausgegeben werden

bei Antwort benachrichtigen