Problem mit foreach - zwei Variablen als Array auswerten?

Problem mit foreach - zwei Variablen als Array auswerten?

am 30.06.2005 14:48:13 von Sebastian Hirschmann

Hallo zusammen,

ich kaspere hier gerade mit einem Formular rum.
Es wird eine variable Anzahl von Datensätzen abgerufen und angezeigt, bei
denen per Dropdownmenü ein Feld manipuliert werden darf. Dieser
geänderte Wert soll dann für alle Datensätze wieder in die Datenbank
eingetragen werden.
Folgendes war mein Denkansatz mit Hilfe des PHP-Manual:

foreach ($m_id as $value)
{
// echo "$value
";
$update = mysql_query("UPDATE table SET m_id = '$value' WHERE job_id =
$job_id");
if (!$update)
{
echo mysql_error();
}

}

"table" ersetzt hier den echten Tabellennamen, $m_id ist der manipulierte
Wert aus dem Formular.
Problem: $job_id wird nicht als Array übergeben (oder ausgewertet wenn
ich es über echo "..." ausgeben lasse), selbst wenn ich im Formular mit
name="jobid["" für das Feld arbeite.
Gibt's ne andere Möglichkeit, das Problem zu lösen?

Ich wäre für jede hilfreiche Info dankbar. Bin eher
Gelegenheits-PHP-Scripter und ganz sicher kein passionierter
Programmierer, deswegen stoße ich bei solchen Sachen leider an meine
Grenzen.

Grüße und danke im Voraus


Sebastian
--
Rock, Metal, more: http://bleeding.4metal.net
Ich bin der einzige Typ auf der Welt, der erst aufwachen muss, um
einen Alptraum zu haben. [Al Bundy]

Re: Problem mit foreach - zwei Variablen als Array auswerten?

am 03.07.2005 15:51:47 von Uli Honal

Sebastian Hirschmann wrote:

> ich kaspere hier gerade mit einem Formular rum.
> Es wird eine variable Anzahl von Datensätzen abgerufen und angezeigt, bei
> denen per Dropdownmenü ein Feld manipuliert werden darf. Dieser
> geänderte Wert soll dann für alle Datensätze wieder in die Datenbank
> eingetragen werden.


> Problem: $job_id wird nicht als Array übergeben (oder ausgewertet wenn
> ich es über echo "..." ausgeben lasse), selbst wenn ich im Formular
> mit name="jobid["" für das Feld arbeite.


Hi,

ich versteh' leider noch nicht ganz wo Dein Problem liegt..
Dein Formular enthält eine Liste von "Jobs", mit je einem hat einen Namen, der mit "jobid" anfängt, gefolgt von
eckigen Klammern, in denen eine eine eindeutige ID steht?

In Deinem PHP ist register_globals hoffentlich "off"? [1]

Dann solltes Du in $_GET['jobid'] ein Array vorfinden, das deine IDs und
die gewählten Values enthält. Benutz zum nachschaun var_dump() statt echo().

> foreach ($m_id as $value)
> {
> [..]
> $update = mysql_query("UPDATE table SET m_id = '$value'
> WHERE job_id = $job_id");
> [..]
> }



Dein Ansatz, das in UPDATE-Statements zu verwandeln, scheint im Ansatz
auch richtig. Im foreach() solltest Du aber auch die Keys abgreifen,
siehe Manual [2]. Die brauchst Du ja für Dein WHERE.

HTH?

-Uli

[1] 12.10. Vermeide globale Variablen
http://www.php-faq.de/q/q-sicherheit-global.html

[2] http://php.net/foreach (zweite Syntax)

Re: Problem mit foreach - zwei Variablen als Array auswerten?

am 04.07.2005 19:10:10 von Sebastian Hirschmann

Uli Honal schrieb:

> ich versteh' leider noch nicht ganz wo Dein Problem liegt..
> Dein Formular enthält eine Liste von "Jobs", mit je einem hat einen Namen, der mit "jobid" anfängt, gefolgt von
> eckigen Klammern, in denen eine eine eindeutige ID steht?

Andersrum: Die selects haben den Namen m_id[], wobei besagte
Job-ID vorher natürlich aus der Datenbank geholt wurde.

> In Deinem PHP ist register_globals hoffentlich "off"? [1]

Logo, ich weise aber $_GET- und $_POST-Variablen bei der
Formularauswertung der Übersichtlichkeit halber neue Bezeichner ohne
$_GET- bzw. $_POST zu.

> Dann solltes Du in $_GET['jobid'] ein Array vorfinden, das deine IDs und
> die gewählten Values enthält. Benutz zum nachschaun var_dump() statt echo().

Das kam anscheinend vorher nicht ganz eindeutig raus: Die Zuordnung
außerhalb des UPDATE-Queries funktionierte ja schon.

> Dein Ansatz, das in UPDATE-Statements zu verwandeln, scheint im Ansatz
> auch richtig. Im foreach() solltest Du aber auch die Keys abgreifen,
> siehe Manual [2]. Die brauchst Du ja für Dein WHERE.

Das hatte ich wegen des Manuals schon gemacht. Was mir da angezeigt wurde,
wurde mir aber erst jetzt durch Deinen Tipp klar: Ich hatte die Zuordnung
$key => $value als gleichbedeutend mit der Zuordung für den SET-Teil des
SQL-Statements gesehen. Da saß ich wirklich gemütlich auf der Leitung.

> HTH?

Allerdings, vielen herzlichen Dank!

Grüße


Sebastian

--
Rock, Metal, more: http://bleeding.4metal.net
Ich bin der einzige Typ auf der Welt, der erst aufwachen muss, um
einen Alptraum zu haben. [Al Bundy]