Frage zu Array, wie mache ich das am besten?

jaysson

Grünschnabel
Hallo,

ich komme gerade nicht etwas weiter, und bräuchte mal einen kleinen Denkanstoß.
Der Benutzer kann auf der Seite mehrere Accessoires auswählen. Das Accessoire mit der id 15 hat den Eintrag other = true. Somit kann der Benutzer selbst etwas eintragen.
Meine Frage ist nun, wie kann ich das alles am besten in ein Array speichern? Die Accessoires und den Wert "other", falls dort etwas hineingeschrieben wurde.
Möchte später prüfen lassen, was vorher alles selektiert wurde, damit man es in eine Datenbank schreiben kann.

Habe hier ein paar checkboxen, und ein input feld, das zusammen so aussieht:

HTML:
chocolate a: <input type="checkbox" name="acc_23" value="23">
chocolate b: <input type="checkbox" name="acc_45" value="45">
red wine: <input type="checkbox" name="acc_31" value="31">
white wine: <input type="checkbox" name="acc_10" value="10">
other: <input type="text" name="other_15" value="">

Das ganze kann man gerne auch ändern.. so komme ich nämlich irgendwie nicht weiter. :(

Vielen Dank schonmal fürs drüberschauen :)
 
Sofern in der Konfigurationsdatei php.ini die Option track_vars aktiviert ist,
werden GET, POST und COOKIE-Variablen, in den superglobalen
Arrays $_GET, $_POST, $_COOKIE abgelegt. Dies erfolgt selbst dann,
wenn die Konfigurationsoption gpc_order der automatische Variablenimport
vollständig deaktiviert wurde.


Zum weiteren Verständnis hier ein Beispiel:

Formular:
HTML:
<form method="POST" action="<?php echo $_SERVER['PHP_SELF']?>">
chocolate a: <input type="checkbox" name="acc_23" value="23">
chocolate b: <input type="checkbox" name="acc_45" value="45">
red wine: <input type="checkbox" name="acc_31" value="31">
white wine: <input type="checkbox" name="acc_10" value="10">
other: <input type="text" name="other_15" value=""><br><br>
<input type="submit" value="submit" />
</form>
Auswertung:
PHP:
<?php 
    echo '<pre>';
    print_r($_POST);
    echo '</pre>';
?>
Ausgabe:
Code:
Array
(
    [acc_23] => 23
    [acc_45] => 45
    [acc_31] => 31
    [acc_10] => 10
    [other_15] => Test
)
 
also RS9999... so ganz haut das nich hinne^^

soweit ich weiss, werden die Werte der Checkboxen NUR dann übergeben, wenn sie auch aktiviert wurden - alles andere würde auch glaub ich wenig sinn machen, da die Werte sonst auch dann übergeben würden, wenn die Box NICHT aktiv wäre.

So, das wär dies.

Wie schreibst du das alles nun in ein gesondertes array, wenn du $_POST nicht verwenden willst?

PHP:
$artikel = array("artikel_1" => $_POST['artikel_1'],
                       "artikel_2" => $_POST['artikel_2'],
                       "artikel_3" => $_POST['artikel_3']
                      );
Sollte ein Wert nicht übergeben worden sein (checkbox fehlt, nix steht im textinputfeld...), dann ist der Wert von $artikel['name'] automatisch 0.

Wie kannst du prüfen, ob other_15 gesetzt ist?

PHP:
if(empty($_POST['other_15'])): 
     $other_15 = 0; 
else: 
     $other_15 = $_POST['other_15]; 
endif;

Tjoh, und wie kannst du alle übergebenen POST-Variablen in ein gesondertes array schreiben? Ich denke mal das könnte mit ner while-Schleife gehen, bin mir aber nich so sehr sicher^^
 
Servus!

Was ich immer ganz hilfreich finde, vorallem wenns viele Checkboxen sind, ist eine Gruppierung in einem weiteren Array, das kann man dann wenigsten in ner Schleife durchlaufen und prüfen.

HTML:
...
<input type="checkbox" name="checkboxen[chocolate a]" value="23">
...

das Post Array spuckt dann z.B. so was aus.
PHP:
Array ( 
	[checkboxen] => Array ( [chocolate a] => 23 
							[red wine] => 31 ) 
	[other_15] => )

Ne "Musterlösung" gibts bei sowas imho nicht wirklich.

vg Clemens
 
Hallo

Danke für eure Antworten, das hat mich schon ein gutes Stückchen weiter gebracht!

So adde ich nun alle markierten Checkboxen in das Array:

PHP:
$res = mysql_query("SELECT id FROM accessory");
	while ($acc = db_fetch_array($res)) {
		if ($frm["acc_".$acc['id']] == 'true') {
			$order["accs"][] = $acc;
		}
	}
}
Doch wie bekomme ich da jetzt die id und den Wert meines Other Fields dazu?
Und wie kann ich das später wieder abrufen... z.b. zum prüfen, ob eine Checkbox vorselektiert werden soll, oder nicht? :confused:
Alle "other" Accessoires haben in der Datenbank den Wert true in der Spalte other... also falls man dies hier gebrauchen kann..?
 
Gutn morgen!

Hoffe ich hab Dich richtig verstanden, versuch mal mein Glück

Doch wie bekomme ich da jetzt die id und den Wert meines Other Fields dazu?
imho wird Dir nichts anderes übrigbleiben als das "other" Feld als Ausnahmefall zu behandeln. Also nach der while Schleife abfragen ob was drinnen steht.
Der Wert des "other"-Felds muss irgendwo mitgespeichert werden, sonst geht die Eingabe verloren, wenn des nur auf "true gesetzt wird. Dann weisste zwar das was drinnen steht aber nicht was :)

Und wie kann ich das später wieder abrufen... z.b. zum prüfen, ob eine Checkbox vorselektiert werden soll, oder nicht?
Der Zustand der Boxen muss gespeichert werden. Je nachdem wie lang er gebraucht wird zB in der Sitzung evtl Session oder länger Datenbank o.ä.

vg Clemens
 
Hi Clemens,

also ich habe ja jetzt schonmal das Array $order[accs].
Das funktioniert soweit ja alles. Wie mache ich das jetzt am geschicktesten für die Accessoires mit einem Wert other?
Ein ganz neues Array am besten? Oder soll ich das da dazupacken... wenn ja, wie.. da komme ich nämlich nicht weiter.

Und mit der Abfrage meinte ich das so:
Wenn ich nun $order[accs] habe.
Und möchte nun die Checkbox prüfen, ob sie schonmal angeklickt wurde... dann mache ich das ja im Normalfall so:
if ($var == 1) echo "checked";

Wie mache ich das nun wenn ich alle Accessoires in einem Array habe? Und noch dazu die Ids ja nicht bei 1 anfangen, sondern auch Lücken haben.
 
Servus!

Also ich versteh leider nicht genau auf was Du hinaus willst.
Mir kommt es aber so vor als wären Deine Fragen alle sehr Projekt bezogen. Drum kann ich Dir (der Rest imho auch) da schwer helfen. Ich kann Dir nur den Tip geben es einfach so zu machen, wie Du´s kannst und wie es funktioniert. Ein "am geschicksten" gibt es eigentlich auch nicht. Kann Dir nur sagen, das man aus Fehlern am meisten lernt ;-)

Wenn ich Probleme mit ner bestimmten Materie hab, hilft am meisten die Doku weiter...
Zum Array wären das die Seiten, die ich mir mal angucken würde.
http://de.wikipedia.org/wiki/Array
http://de3.php.net/manual/de/language.types.array.php
http://www.infos24.de/phpe/handbuch/4_php_arrays_Hashes.htm

Da sind auch Beispiele wie Du an die Werte in nem Array kommst usw.

vg Clemens
 
Hallo...

Danke für die Links.. das war sehr hilfreich!! :) Aber ich muss wohl nochmal nerven...
Also das ganze sieht bis jetzt so aus:

PHP:
$res = db_query("SELECT id, other FROM accessory");     // hole alle accessoires aus db
while ($acc = db_fetch_object($res)) {
	if ($frm["acc_".$acc->id] == 'true') {          // wenn checkbox aktiviert wurde
		$order["accs"][] = array($acc->id,"NULL");
	} else if (isset($frm["other_$acc->id"]) && !empty($frm["other_$acc->id"])) {        // wenn etwas im other feld geschrieben wurde
		$order["accs"][] = array($acc->id,$frm["other_".$acc->id]);
	}
}

Wenn ich die Accessoires mit der ID 33 und 34 selektiert habe, und für das "other" Accesoire mit der ID 15 "alcohol free wine" eingegeben habe, dann gibt das nun folgende Ausgabe:

PHP:
print_r($order["accs"]);

Array ( 
    [0] => Array ( [0] => 33 [1] => NULL ) 
    [1] => Array ( [0] => 34 [1] => NULL ) 
    [2] => Array ( [0] => 15 [1] => alcohol free wine )
 )

[0] wäre in diesem Fall die ID des Accessoire, und [1] wäre der Content, falls es einen gibt. Die Checkboxen haben an Content NULL. So habe ich jetzt auch alles schön beinander, oder? Soweit so gut.

Die Frage mit dem auslesen war jetzt so gedacht:
Ich würde gerne die Checkboxen vorselektieren, falls diese schon in meinem Array vorhanden sind. Wie mache ich so etwas? :confused:
 
Servus,

eine Checkbox kann ja mit checked ausgewählt werden. dh in dem Formular wird bei all denen im Array ein checked hingeschrieben.

vg Clemens
 
Zurück