Array wird wieder überschrieben
Tolwin
- php
Hallo Forum,
ich habe ein Problem mit einem Formular. Diese Formular ruf sich über $_SERVER['PHP_SELF'] selbst auf und soll ein Array erweitern.
Um es etwas genauer zu beschreiben - es besteht die Möglichkeit aus
einer Liste mit Ländern (220 Stück) 5 zu selektieren. Dies geschieht aber einzeln, d.h. man wählt ein Land aus und drückt auf hinzufügen.
Jetzt wird die Seite neu geladen und das Land angezeigt. Das nächste Land das ausgewählt wird soll nun dem zuvor gewählten hinzugefügt wwerden - bis max. 5 Länder gewählt sind. Hierzu befülle ich ein Array mit den relevaten Daten die ich aus einer DB erhalte:
$LAND_ARRAY[$row_landinfo["LAND_ID"]]['LAND_ID'] = $row_landinfo["LAND_ID"];
$LAND_ARRAY[$row_landinfo["LAND_ID"]]['LANDNAME'] = $row_landname["LAND"];
$LAND_ARRAY[$row_landinfo["LAND_ID"]]['ZEITZONE'] = $row_landinfo["ZEITZONE"];
$LAND_ARRAY[$row_landinfo["LAND_ID"]]['WAEHRUNG'] = $row_waehrung["WAEHRUNG"];
Leider wird das Array bei jedem "hinzufügen" eines neuen Landes wieder überschrieben. Ich ging davon aus das über $_SERVER['PHP_SELF'] das Array ergänzt wird?!?! Kann mir jemand sagen woran dies liegt?
Vielen Dank
Morgen,
bei jedem Aufruf wird dein Array neu erstellt.
Du musst also das Array dem Formular mit geben.
Ich meine mich zu erinnern, dass Arrays dazu
aber vorher noch 'behandelt' werden müssen -
leider ist mir momentan entfallen wie, hatte
glaube ich aber mit serialize() und base64_encode()
zu tun. Die 'Behandlung' musst du dann nach
Empfang wieder rückgängig machen.
Grüße, ...
Vielen Dank für den Tipp, werde mich schlau machen!
Gruß
Tolwin
Habe jetzt mal versucht mit Sessions zu arbeiten (das erste Mal)
und folgenden Code verbrochen
session_start();
include ("db_connect.php");
$result_land = mysql_query("SELECT * FROM Laender ORDER BY LAND ASC");
$LAND = 0;
if(!isset($_SESSION["i"]))
{
$_SESSION["i"] = 0;
echo "Null";
echo $_SESSION["i"];
}
else
{
$_SESSION["i"] = $_SESSION["i"];
echo "Session i = mehr<br>";
}
if($_POST['LAND_AUSWAHL'] > 0)
{
$LAND = $_POST['LAND_AUSWAHL'];
$result_landinfo = mysql_query("SELECT * FROM Laenderdaten WHERE LAND_ID = '$LAND'");
$row_landinfo = mysql_fetch_array($result_landinfo);
$result_landname = mysql_query("SELECT * FROM Laender WHERE LAND_ID = '$LAND'");
$row_landname = mysql_fetch_array($result_landname);
$BETREUER_1 = $row_landinfo['BETREUER_ID'];
$BETREUER_2 = $row_landinfo['BETREUER_ID_2'];
$result_betreuer_1 = mysql_query("SELECT * FROM Betreuer WHERE BETREUER_ID = '$BETREUER_1'");
$result_betreuer_2 = mysql_query("SELECT * FROM Betreuer WHERE BETREUER_ID = '$BETREUER_2'");
$row_betreuer_1 = mysql_fetch_array($result_betreuer_1);
$row_betreuer_2 = mysql_fetch_array($result_betreuer_2);
$ISO = $row_landinfo['ISO_CODE'];
$result_waehrung = mysql_query("SELECT * FROM Waehrung WHERE ISO_CODE = '$ISO'");
$row_waehrung = mysql_fetch_array($result_waehrung);
echo $_SESSION["i"] ."<br>";
$LAND_ARRAY[$_SESSION["i"]]['LAND_ID'] = $row_landinfo["LAND_ID"];
$LAND_ARRAY[$_SESSION["i"]]['LANDNAME'] = $row_landname["LAND"];
$LAND_ARRAY[$_SESSION["i"]]['ZEITZONE'] = $row_landinfo["ZEITZONE"];
$LAND_ARRAY[$_SESSION["i"]]['WAEHRUNG'] = $row_waehrung["WAEHRUNG"];
$_SESSION["LAND_ARRAY"] = $LAND_ARRAY;
array_push ($_SESSION["ARRAY_LAND"], $_SESSION["LAND_ARRAY"] );
$_SESSION["i"]++;
echo $_SESSION["i"] ."<br>";
}
$ARRAY_LAND = $_SESSION["LAND_ARRAY"];
$_SESSION["ARRAY_LAND"] = $ARRAY_LAND;
print_r($_SESSION["ARRAY_LAND"]);
$LAND_TABLE = $_SESSION["ARRAY_LAND"];
Das Array $ARRAY_LAND soll das komplette Array mit allen bisher ausgewählten Ländern werden. Mit array_push wollte ich $LAND_ARRAY in $ARRAY_LAND einfügen. Der Indexcounter $_SESSION["i"] will aber einfach nicht über 1 hinaus obwohl ich ihn erhöhe. WO liegt mein fehler?
Hi,
bin nur kurz drübergegangen und konnte kein
session_register() finden - weiss aber nicht
ob das noch von Nöten ist.
Meiner Meinung nach müssen Variablen, die
in der Session gespeichert werden sollen,
zuerst auch in dieser registriert werden.
Grüße, ...
hi,
bin nur kurz drübergegangen und konnte kein
session_register() finden - weiss aber nicht
ob das noch von Nöten ist.
nein, im gegenteil - von der benutzung von session_register() wird abgeraten.
Meiner Meinung nach müssen Variablen, die
in der Session gespeichert werden sollen,
zuerst auch in dieser registriert werden.
ja, aber nicht mit session_register().
sondern in dem man einfach $_SESSION['key'] einen wert zuweist.
gruß,
wahsaga
Hi,
danke für die Info.
Grüße, ...
da du das in einem if-zweig machst, wäre natürlich als allererstes zu überprüfen, ob in diesen auch hineingesprungen wird (bspw. per kontrollausgabe).
das habe ich versucht
if(!isset($_SESSION["i"]))
{
$_SESSION["i"] = 0;
echo "Null";
echo $_SESSION["i"];
}
else
{
$_SESSION["i"] = $_SESSION["i"];
echo "Session i = mehr<br>";
}
beim ersten Mla springt er in if und sonst in else.
Ich bekomme diese Fehlermeldung
Warning: First argument to array_push() needs to be an array in /data/www/php/docs/ubfk/laenderinfo/laenderinfo.php on line 47
Dachte dass es ein Array sei
hi,
Der Indexcounter $_SESSION["i"] will aber einfach nicht über 1 hinaus obwohl ich ihn erhöhe.
da du das in einem if-zweig machst, wäre natürlich als allererstes zu überprüfen, ob in diesen auch hineingesprungen wird (bspw. per kontrollausgabe).
gruß,
wahsaga
da du das in einem if-zweig machst, wäre natürlich als allererstes zu überprüfen, ob in diesen auch hineingesprungen wird (bspw. per kontrollausgabe).
das habe ich versucht
if(!isset($_SESSION["i"]))
{
$_SESSION["i"] = 0;
echo "Null";
echo $_SESSION["i"];
}
else
{
$_SESSION["i"] = $_SESSION["i"];
echo "Session i = mehr<br>";
}
beim ersten Mla springt er in if und sonst in else.
Ich bekomme diese Fehlermeldung
Warning: First argument to array_push() needs to be an array in /data/www/php/docs/ubfk/laenderinfo/laenderinfo.php on line 47
Dachte dass es ein Array sei
hi,
Leider wird das Array bei jedem "hinzufügen" eines neuen Landes wieder überschrieben.
nein, etwas _vorhandenes_ überschrieben wird da nicht.
aber es wird natürlich bei jeder neuen scriptinstanz wieder "bei null" angefangen.
es gibt also nichts "vorhandenes".
formular wird abgesendet - neue scriptinstanz wird gestartet. und die weiß natürlich nichts von den variablen irgendeiner vorher gelaufenen instanz - wie auch?
Ich ging davon aus das über $_SERVER['PHP_SELF'] das Array ergänzt wird?!?!
absoluter humbug.
$_SERVER['PHP_SELF'] macht nur genau eins - es liefert einen textstring. und der enthält den namen des aktuell ausgeführten scriptes. somit ganz hilfreich, um scripte wieder auf sich selbst "zielen" zu lassen, selbst wenn sich deren name mal ändern sollte.
Kann mir jemand sagen woran dies liegt?
daran, dass du ein wesentliches grundprinzip noch nicht verstanden hast - normale variablen sind immer nur in der scriptinstanz vorhanden, in der die erzeugt/mit werten belegt wurden.
andere scriptinstanz, _andere_ variablen.
und wenn du das verstanden hast, dann beschäftige dich mit sessions. die sind nämlich das, was du brauchst.
gruß,
wahsaga