Array wird nicht geschrieben
Tolwin
- php
Hallo Forum,
habe wieder ein Problem mit einem Array. Leider wird es nicht so
erstellt wie ich es mir vorstelle. Hier erst einmal der Quellcode:;
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"];
$ARRAY_LAND = $_SESSION["ARRAY_LAND"];
if(!isset($ARRAY_LAND))
{
echo "NOT ISSET<br>";
$ARRAY_LAND = $LAND_ARRAY;
$_SESSION["ARRAY_LAND"] = $ARRAY_LAND;
$_SESSION["i"]++;
}
else
{
echo "ISSET TRUE<br>";
array_push ($_SESSION["ARRAY_LAND"], $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"];
Bei Ausführung komme ich immer wieder in die If-Abfrage mit echo "NOT ISSET". Muss man die Existenz eins Array anders als mit
!isset abprüfen?
Was mache ich falsch?
Hi,
if(!isset($_SESSION["i"]))
{
$_SESSION["i"] = 0;
echo "Null";
echo $_SESSION["i"];
}
else
{
$_SESSION["i"] = $_SESSION["i"];
echo "Session i = mehr<br>";}
hi, ich hab mir den ganzen code jetzt noch nicht angeschaut, bin grad
aufm sprung , aber das ist schwachsinn. genauer gesagt diese zeile
hier
$_SESSION["i"] = $_SESSION["i"];
das macht garnichts! du prüfst mit isset() ob es $_SESSION["i"] schon
gibt. wenn es sie schon gibt weist du ihr ihren eigenen wert zu. das
ist wie wenn ich sowas hier mache 5=5 also unsinnig und total
überflüssig.
MfG
Stimmt, sollte eigentlich nicht mehr im Code sein! war
ne programmiertechnische Glanzleistung von mir ;)
Hier noch mal ein bereinigter Quellcode
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"];
}
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"];
$ARRAY_LAND = $_SESSION["ARRAY_LAND"];
if(!isset($ARRAY_LAND))
{
echo "NOT ISSET<br>";
$ARRAY_LAND = $LAND_ARRAY;
$_SESSION["ARRAY_LAND"] = $ARRAY_LAND;
$_SESSION["i"]++;
}
else
{
echo "ISSET TRUE<br>";
array_push ($_SESSION["ARRAY_LAND"], $LAND_ARRAY );
$_SESSION["i"]++;
}
echo $_SESSION["i"] ."<br>";
}
print_r($_SESSION["ARRAY_LAND"]);
$LAND_TABLE = $_SESSION["ARRAY_LAND"];
Hi,
$ARRAY_LAND = $_SESSION["ARRAY_LAND"];
hier würde ich vorher ein isset für $_SESSION["ARRAY_LAND"] machen.
und wenn es diese variable gibt ihren inhalt $ARRAY_LAND zuweisen.
MfG
Also so?
if(isset($_SESSION["ARRAY_LAND"]))
{
$_SESSION["ARRAY_LAND"] = $ARRAY_LAND;
}
$ARRAY_LAND = $_SESSION["ARRAY_LAND"];
if(!isset($ARRAY_LAND))
{
echo "NOT ISSET<br>";
$ARRAY_LAND = $LAND_ARRAY;
$_SESSION["ARRAY_LAND"] = $ARRAY_LAND;
$_SESSION["i"]++;
}
else
{
echo "ISSET TRUE<br>";
array_push ($_SESSION["ARRAY_LAND"], $LAND_ARRAY );
$_SESSION["i"]++;
}
Hi,
Also so?
if(isset($_SESSION["ARRAY_LAND"]))
{
$_SESSION["ARRAY_LAND"] = $ARRAY_LAND;
}$ARRAY_LAND = $_SESSION["ARRAY_LAND"];
Nein, ich meinte du sollst
$ARRAY_LAND = $_SESSION["ARRAY_LAND"];
durch
if(isset($_SESSION["ARRAY_LAND"]))
{
$ARRAY_LAND = $_SESSION["ARRAY_LAND"];
}
ersetzten
Okay, habe ich jetzt gemacht. Trotzdem beginnter der Index bei jedem neuen Land wieder bei 0?!?!
if(isset($_SESSION["ARRAY_LAND"]))
{
$_SESSION["ARRAY_LAND"] = $ARRAY_LAND;
}
if(!isset($ARRAY_LAND))
{
echo "NOT ISSET<br>";
$ARRAY_LAND = $LAND_ARRAY;
$_SESSION["ARRAY_LAND"] = $ARRAY_LAND;
$_SESSION["i"]++;
}
else
{
echo "ISSET TRUE<br>";
array_push ($_SESSION["ARRAY_LAND"], $LAND_ARRAY );
$_SESSION["i"]++;
}
Hi,
für dich eignet sich http://de2.php.net/manual/de/function.is-array.php wohl besser als isset.
MfG
für dich eignet sich http://de2.php.net/manual/de/function.is-array.php wohl besser als isset.
Danke für den Tipp, habs eingebaut - ändert aber nichts an der Ausgabe. print_r($LAND_TABEL) liefert mir ja das Array zurück,
allerdings jeder neue Eintrag mit Index 0
Hier einmal die Ausgabe von print_r
Array ( [0] => Array ( [LAND_ID] => 660 [LANDNAME] => Afghanistan [ZEITZONE] => 4,50 [WAEHRUNG] => UAE Dirham ) [1] => Array ( [0] => Array ( [LAND_ID] => 330 [LANDNAME] => Angola [ZEITZONE] => 1,00 [WAEHRUNG] => ) ) [2] => Array ( [0] => Array ( [LAND_ID] => 330 [LANDNAME] => Angola [ZEITZONE] => 1,00 [WAEHRUNG] => ) ) [3] => Array ( [0] => Array ( [LAND_ID] => 330 [LANDNAME] => Angola [ZEITZONE] => 1,00 [WAEHRUNG] => ) ) )
Hi,
hir mal ein tip für dich, mach
$ausgabe = print_r($var, true);
$ausgabe = nl2br($ausgabe);
echo $ausgabe
dannn siehts besser aus.
Array (
[0] => Array (
[LAND_ID] => 660
[LANDNAME] => Afghanistan
[ZEITZONE] => 4,50
[WAEHRUNG] => UAE Dirham )
[1] => Array (
[0] => Array (
[LAND_ID] => 330
[LANDNAME] => Angola
[ZEITZONE] => 1,00
[WAEHRUNG] => ) )
[2] => Array (
[0] => Array (
[LAND_ID] => 330
[LANDNAME] => Angola
[ZEITZONE] => 1,00
[WAEHRUNG] => ) )
[3] => Array (
[0] => Array (
[LAND_ID] => 330
[LANDNAME] => Angola
[ZEITZONE] => 1,00
[WAEHRUNG] => ) )
)
Also ich weis zwar noch nicht genau warum, aber er tut die folgenden
in ein array weiter unten stecken. ich kuck mir den code nochmal an,
solltest du auch tun.
MfG
Sorry wegen des andauernden Nachfragens
habe es jetzt so versucht umzusetzten
$ausgabe = print_r($LAND_TABLE, true);
$ausgabe = nl2br($ausgabe);
echo $ausgabe;
Dann sagt er mir Warning: Wrong parameter count for print_r() in
Schaue mir den Code schon seit heute Morgen um 9 Uhr an und baue ständig um. komme aber zu keiner befriedigenden Lösung. Hier noch mal der komplette code und vielen Dank für die Mühe!
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";
}
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"];
if(is_array($_SESSION["ARRAY_LAND"]))
{
$_SESSION["ARRAY_LAND"] = $ARRAY_LAND;
}
if(!is_array($ARRAY_LAND))
{
echo "NOT ISSET<br>";
$ARRAY_LAND = $LAND_ARRAY;
$_SESSION["ARRAY_LAND"] = $ARRAY_LAND;
$_SESSION["i"]++;
}
else
{
echo "ISSET TRUE<br>";
array_push ($_SESSION["ARRAY_LAND"], $LAND_ARRAY );
$_SESSION["i"]++;
}
echo $_SESSION["i"] ."<br>";
}
$LAND_TABLE = $_SESSION["ARRAY_LAND"];
echo "<br><br>";
$ausgabe = print_r($LAND_TABLE, true);
$ausgabe = nl2br($ausgabe);
echo $ausgabe;
?>
Hi,
Dann sagt er mir Warning: Wrong parameter count for print_r() in
vermutlich beim starten des scripts, oder? da gibt es die variable
noch nicht. also vorher isset() bzw. is_array()
if(!is_array($ARRAY_LAND))
{
echo "NOT ISSET<br>";
$ARRAY_LAND = $LAND_ARRAY;
$_SESSION["ARRAY_LAND"] = $ARRAY_LAND;
$_SESSION["i"]++;
}
else
{
echo "ISSET TRUE<br>";
array_push ($_SESSION["ARRAY_LAND"], $LAND_ARRAY );
$_SESSION["i"]++;
}
ich vermute beim array_push läuft was schief, daher die versetzung nach
dem ersten durchlauf. vll. funktionierts wenn du hier
if(!is_array($ARRAY_LAND))
{
echo "NOT ISSET<br>";
$ARRAY_LAND = $LAND_ARRAY;
$_SESSION["ARRAY_LAND"] = $ARRAY_LAND;
$_SESSION["i"]++;
}
es anders machst und zwar folgender masen:
if(!is_array($ARRAY_LAND))
{
echo "NOT ISSET<br>";
$ARRAY_LAND = $LAND_ARRAY;
$_SESSION["ARRAY_LAND"] = array();
array_push ($_SESSION["ARRAY_LAND"], $ARRAY_LAND );
$_SESSION["i"]++;
}
MfG
Hi,
Dann sagt er mir Warning: Wrong parameter count for print_r() in
vermutlich beim starten des scripts, oder? da gibt es die variable
noch nicht. also vorher isset() bzw. is_array()
ohne true in
print_r($LAND_TABEL, true)
gehts, allerdings unformatiert.
if(!is_array($ARRAY_LAND))
{
echo "NOT ISSET<br>";
$ARRAY_LAND = $LAND_ARRAY;
$_SESSION["ARRAY_LAND"] = array();
array_push ($_SESSION["ARRAY_LAND"], $ARRAY_LAND );
$_SESSION["i"]++;
}
Das habe ich versucht, danach gab er mir kein Array mehr aus. Nachdem ich das Skript wieder in den Urzustand versetzt habe kommt wieder was (aber wie gesagt unformatiert)
Array ( [0] => Array ( [LAND_ID] => 208 [LANDNAME] => Algeria [ZEITZONE] => 1,00 [WAEHRUNG] => ) [1] => Array ( [1] => Array ( [LAND_ID] => 208 [LANDNAME] => Algeria [ZEITZONE] => 1,00 [WAEHRUNG] => ) ) [2] => Array ( [2] => Array ( [LAND_ID] => 330 [LANDNAME] => Angola [ZEITZONE] => 1,00 [WAEHRUNG] => ) ) [3] => Array ( [3] => Array ( [LAND_ID] => 302 [LANDNAME] => Cameroon [ZEITZONE] => 1,00 [WAEHRUNG] => ) ) [4] => Array ( [4] => Array ( [LAND_ID] => 64 [LANDNAME] => Hungary [ZEITZONE] => 1,00 [WAEHRUNG] => ) ) ) 1
Hi,
Ja schon klar. der fehler leigt wohl hier
MfG
Hi,
Ja schon klar. der fehler leigt wohl hierMfG
Dachte ich auch, drum hatte ich es schon korrigiert (ein paar Postings vorher)
print_r($_SESSION["ARRAY_LAND"]);
$LAND_TABLE = $_SESSION["ARRAY_LAND"];
Das ist alles was da noch steht
echo $begrüßung;
$ARRAY_LAND = $_SESSION["ARRAY_LAND"];
Gibt es hier keine Notice von PHP (error_reporting auf E_ALL gestellt)?
if(!isset($ARRAY_LAND))
Was steht denn wirklich in $ARRAY_LAND drin? var_dump($ARRAY_LAND)
Deine Programmlogik ist hier nicht richtig. Zuerst greifst du auf eine Variable ($_SESSION["ARRAY_LAND"] -- in dem Fall ein Array-Element) zu, ohne zu prüfen, ob das überhaupt existiert. Und dann prüfst du auf die Existenz einer Variable ($ARRAY_LAND), der du eben etwas zugewiesen hast. Diese existiert nach der Zuweisung zwangsläufig.
Einen Strich durch die Rechnung wird dir hier die Tatsache machen, dass bei der Zuweisung einer nicht existierenden Variable $x zu einer Variable $y die Variable $y mit dem Wert NULL erzeugt wird. Dummerweise liefert isset($y) nun ein false obwohl die Existenz von $y mittels var_dump($y) nachgewiesen werden kann. var_dump gibt NULL ohne eine "Undefined variable"-Notice aus.
Bei solchen Tests bitte immer var_dump(...) statt echo ... verwenden, damit auch die Typinformationen angezeigt werden.
echo "$verabschiedung $name";
Hi,
$ARRAY_LAND = $_SESSION["LAND_ARRAY"];
$_SESSION["ARRAY_LAND"] = $ARRAY_LAND;
print_r($_SESSION["ARRAY_LAND"]);
$LAND_TABLE = $_SESSION["ARRAY_LAND"];
die variable $_SESSION["LAND_ARRAY"] taucht hier zum ersten und
letztenmal in deinem code auf, dadurch überschreibst du ständig $_SESSION["ARRAY_LAND"] mit dem wert NULL.
MfG