compu: /mysql - Spalte von DB in Array einlesen

Hi Leute,

ich beschäftige mich mit diesem Problem nun schon mehrer Tage.
Wo liegt das Problem. Habe kein ähnliches Problem in dem Archiv gefunden oder unter google.
Ich will eine Spalte meiner DB in ein Array einlesen. Dazu habe ich folgende Funktion geschrieben:

function translations($language)
{
    include('../config/config.inc');
    include('../auth/databaseauth.php');

$sql = "SELECT keyval, ".$language."
           FROM uebersetzung";

$result = mysql_query($sql, $dbConnection);

while ($row = mysql_fetch_array($result)) {
     $t[$row['keyval']] = htmlspecialchars($row['$language']);
 }
 return $t;
}

Wenn ich nun im Hauptprogramm ein var_dump($t) mache wird "NULL" ausgegeben. Wo liegt das Problem. Ich weiß keinen Rat mehr.
Liegt das Problem vielleicht in dieser Zeile?

$t[$row['keyval']] = htmlspecialchars($row['$language']);

Wenn ich mir den SQL Befehl mit echo ausgebenlasse, sieht er genau so aus wie er sein soll.

:-(

Hilfe ...

Danke

  1. Hi,

    Ich will eine Spalte meiner DB in ein Array einlesen. Dazu habe ich folgende Funktion geschrieben:

    wozu, wenn Du es mit mysql_fetch_array ausliesst, ist das Ergebnis ein array?

    ciao
    romy

    --
    DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
    sh:( fo:| ch:? rl:( br:& va:| zu:) ss:| ls:[
    Die Erklärung zum Selfcode findest du hier: http://emmanuel.dammerer.at/selfcode.html
    Einen Decoder für den Selfcode findest du hier: http://peter.in-berlin.de/projekte/selfcode
    1. Hi,

      wozu, wenn Du es mit mysql_fetch_array ausliesst, ist das Ergebnis ein array?

      sorry bin von postgres ausgegangen...

      versuch es doch mal mit foreach()
      ich denke die Problematik liegt bei dem Verschachteln der arrays. dieser Ausdruck mit $t[$row[jsd]] -> vielleicht geht es ja so: $t[$row][jsd]

      ansonsten:
      while($row = jhsdf){
        foreach($row as $key => $value) {
            if($key == $language) $t[$key] == $value;
        }
      }

      ciao
      romy

      --
      DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
      sh:( fo:| ch:? rl:( br:& va:| zu:) ss:| ls:[
      Die Erklärung zum Selfcode findest du hier: http://emmanuel.dammerer.at/selfcode.html
      Einen Decoder für den Selfcode findest du hier: http://peter.in-berlin.de/projekte/selfcode
      1. Hi,

        diese Lösung gefällt mir.
        Allerdings ist mir die Struktur "foreach" neu.

        ansonsten:
        while($row = jhsdf){
          foreach($row as $key => $value) {
              if($key == $language) $t[$key] == $value;
          }
        }

        1. Frage: Wofür steht jhsdf?
        2. Frage: Warum die If-Abfrage "if($key == $language)"?
        3. Frage: Muss die foreach Schleife wirklich in die while Schleife?
                  Die While Schleife baut das Array doch erst auf und dann wird jedesmal foreach ausgeführt?

        Vielen Dank!

        Gruss
        Compu

        1. Hi,

          ansonsten:
          while($row = jhsdf){
            foreach($row as $key => $value) {
                if($key == $language) $t[$key] == $value;
            }
          }

          1. Frage: Wofür steht jhsdf?

          Deine sql-Abfrage: mysql_fetch_array($result)

          1. Frage: Warum die If-Abfrage "if($key == $language)"?

          ich dachte, Du wilst nur die Spalte die $language heisst
          um allen Missverständnissen aus dem Wge zu gehen, poste bitte mal deine Tabellenstruktur und welches Ergebnis rauskommen soll.

          1. Frage: Muss die foreach Schleife wirklich in die while Schleife?
                      Die While Schleife baut das Array doch erst auf und dann wird jedesmal foreach ausgeführt?

          Das kommt auf deine Tabellenstruktur an.
          wenn sie meinetwegen 3 Spalten hat befindet sich in row ein array mit 3 Einträgen.
          Hat sie ausserdem 10 EInräge (Reihen) müssen diese mittels while abgefragt werden
          Aber wenn ich genauer darüber nachdenke, ist diese Syntax wahrscheinlich doppeltgemoppelt.

          Wie gesagt, bitte poste mal die Struktur und das Ergebnis, welches DU wünschst.
          Hast Du nach dem geschaut, was Soenke gesagt hat? Ist auf jeden Fall der erste Schritt.

          ciao
          romy

          --
          DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
          sh:( fo:| ch:? rl:( br:& va:| zu:) ss:| ls:[
          Die Erklärung zum Selfcode findest du hier: http://emmanuel.dammerer.at/selfcode.html
          Einen Decoder für den Selfcode findest du hier: http://peter.in-berlin.de/projekte/selfcode
          1. Tabellenstruktur:

            Also die Tabellenstruktur sieht folgendermaßen aus:
            In der ersten Spalte stehen die Begriffe, die später die keys im assoziativen Array sein sollen. Die anderen Spalten sind die Übersetzungen in die verschiedenen Sprachen.

            keyval | de    | en     | fr  | es  | it
            -----------------------------------------
            tomate |Tomate | tomato | etc | etc | etc
            apfel  |Apfel  | apple  | etc | etc | etc

            Also ich möchte praktisch ein assoz. Array haben, in dem "keyval" die keys sind:

            $t['tomate'] = Tomate , wenn &language = de ist.

            Ich hatte vorher alle Wörter in einer php-Datei übersetzt:
            $t_tomate="tomate";
            $t_hallo="Hallo";

            etc

            Jetzt möchte ich halt alles DB-basiert machen. :-)

            1. keyval | de    | en     | fr  | es  | it

              tomate |Tomate | tomato | etc | etc | etc
              apfel  |Apfel  | apple  | etc | etc | etc

              normal auslesen mit

              while ( $record = mysql_fetch_array()..... )
              {
                 $aTrans[$record['keyval']]['de'] = $record['de'];
                 $aTrans[$record['keyval']]['en'] = $record['en'];
              }
              das ergibt dann das gewünschte array denke ich...

              $aTrans['tomate']['de'] ergibt "Tomate";

              passts?

              cu

              1. Hi Stefan,

                Danke für Deine Lösung.

                passts?

                function translations($language)
                {
                 include('../config/config.inc');
                    include('../auth/databaseauth.php');

                $sql = "SELECT keyval, ".$language."
                           FROM uebersetzung";

                $result = mysql_query($sql, $dbConnection);

                while ($record = mysql_fetch_array($result)){
                        $aTrans[$record['keyval']][$language] = $record[$language];
                    }
                var_dump($aTrans);

                return aTrans;
                }

                Das Problem ist, wenn ich den var_dump in der Funjktion mache klappt alles, wenn ich ihn im Hauptprogramm mache gibt er "NULL" aus.
                :-(((

                Thx,

                Compu

                1. du übernimmst die funktion aber schon richtig oder?

                  $aTrans = translations($language);

                  weil ja return ist - dann müssts passen.

                  print_r($aTrans);

                  cu

                2. Hi,

                  return aTrans;
                  }

                  hier fehlt ein $ vor dem aTrans

                  ciao
                  romy

                  --
                  DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
                  sh:( fo:| ch:? rl:( br:& va:| zu:) ss:| ls:[
                  Die Erklärung zum Selfcode findest du hier: http://emmanuel.dammerer.at/selfcode.html
                  Einen Decoder für den Selfcode findest du hier: http://peter.in-berlin.de/projekte/selfcode
                  1. Hi,

                    Danke für all die Hilfe!

                    Gruss

                    Compu

  2. Ich will eine Spalte meiner DB in ein Array einlesen. Dazu habe ich folgende Funktion geschrieben:

    $sql = "SELECT keyval, ".$language."
               FROM uebersetzung";

    $result = mysql_query($sql, $dbConnection);

    while ($row = mysql_fetch_array($result)) {
         $t[$row['keyval']] = htmlspecialchars($row['$language']);
    }
    return $t;

    Wenn ich nun im Hauptprogramm ein var_dump($t) mache wird "NULL" ausgegeben. Wo liegt das Problem. Ich weiß keinen Rat mehr.
    Liegt das Problem vielleicht in dieser Zeile?

    $t[$row['keyval']] = htmlspecialchars($row['$language']);

    Eher nicht, denn dann würde $t zumindest ein Feld sein und nicht null. Der Wert null deutet eher darauf hin, daß der Inhalt Deiner while-Schleife garnicht nicht angesteuert wird, was wiederum eher auf ein leeres Ergebnis der Datenbankabfrage hinweist.

    Wenn ich mir den SQL Befehl mit echo ausgebenlasse, sieht er genau so aus wie er sein soll.

    Das bringt Dir absolut garnichts, nicht Du bestimmst letztenendes, was der Datenbank gefällt, sondern die Datenbank selber.

    Hättest Du Dich an die PHP-Anleitung gehalten, würdest Du zumindest nicht blind darauf vertrauen, daß mysql_query() niemals schiefgeht und hättest eine korrekte Fehlerabfrage eingebaut. Wie das funktioniert ist auf der mysql_query()-Seite ausführlichst beschrieben, der Text zu mysql_error() hilft Dir ebenfalls.

    Wenn Du diesen faux pas beseitigt hast und es keinen SQL-Fehler gibt, solltest Du mit var_dump() $row ausgeben und mysql_num_rows() prüfen, wieviele Datensätze es gibt. Dann hast Du sicher einen Anhaltspunkt, wo der Haken stecken könnte.

    Gruß,
      soenk.e