Tolwin: Array wird nicht geschrieben

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?

  1. 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

    1. Stimmt, sollte eigentlich nicht mehr im Code sein! war
      ne programmiertechnische Glanzleistung von mir ;)

      1. 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"];

        1. 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

          1. 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"]++;
                 }

            1. 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

              1. 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"]++;
                     }

                1. Hi,
                  für dich eignet sich http://de2.php.net/manual/de/function.is-array.php wohl besser als isset.

                  MfG

                  1. 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

                    1. 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] => ) ) )

                      1. 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

                        1. 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;

                          ?>

                          1. 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

                            1. 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

                    2. Hi,
                      Ja schon klar. der fehler leigt wohl hier

                      MfG

                      1. Hi,
                        Ja schon klar. der fehler leigt wohl hier

                        MfG

                        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

  2. 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";

  3. 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