OlliK: JAVASCRIPT & MySQL

Hallo Leute,

ImageArr = new Array()

ImageArr[ImageArr.length] = "/img/bilder/atb/atbfanbus.jpg";
ImageArr[ImageArr.length] = "/img/bilder/atb/k-DSC06491.JPG";
ImageArr[ImageArr.length] = "/img/bilder/atb/k-DSC06494.JPG";
ImageArr[ImageArr.length] = "/img/bilder/atb/k-DSC06499_1.jpg";
ImageArr[ImageArr.length] = "/img/bilder/atb/k-DSC06665_1.jpg";
ImageArr[ImageArr.length] = "/img/bilder/atb/k-DSC06666_1.jpg";

wie kann ich ImageArr[ImageArr.length] über MySQL füllen?
Geht das überhaupt? Wenn ich was gibt es für alternativen?

meine Vorstellung wäre eigentlich gewesen:
  $link = connect();

if ($link)
  {
    $sql = "SELECT *
            FROM banner";

$result = mysql_query($sql) or die(mysql_error());

if (!$result)
      return(FALSE);

while ($row = mysql_fetch_assoc($result))
    {
     ImageArr[ImageArr.length] = $row['Image'];
    }

funktioniert so nicht:(

Wäre für eine Lösung sehr dankbar.

MfG
Olli.

  1. Hallo OlliK,

    MySQL läuft auf dem Server, Javascript auf dem Clienten. So einfach geht es also nicht. Du benötigst irgendeinen Prozess, der auf dem Server die Datenbank ausliest. Dieser Prozess, z.B. ein PHP-Script, kann dann die Daten direkt ins Script eintragen, AJAX wäre eine andere Möglichkeit. Welche Techniken stehen dir zur Verfügung und welche beherrscht du?

    Gruß, Jürgen

  2. Mahlzeit OlliK,

    wie kann ich ImageArr[ImageArr.length] über MySQL füllen?
    Geht das überhaupt?

    Ja.

    Unter Berücksichtigung von JürgenBs Hinweisen würde ich Server-seitigen PHP-Code wie z.B. den folgenden vorschlagen:

    $link = connect();  
      
    if ($link)  
    {  
      $sql = "SELECT *  
              FROM banner"; // Sinnvollerweise sollte man hier natürlich nur die Spalten abfragen, die man wirklich braucht!  
      
      $result = mysql_query($sql) or die(mysql_error()); // Hier sollte eigentlich eine vernünftige Fehlerbehandlung hin - ein die() ist keine!  
      
      if (!$result)  
        return(FALSE);  
      
      echo "ImageArr = new Array();\n";  
      
      while ($row = mysql_fetch_assoc($result))  
      {  
        echo "ImageArr.push('" . $row['Image'] . "');\n";  
      }  
    }
    

    Der dabei erzeugte Javascript-Code muss natürlich an der richtigen Stelle ins HTML-Dokument geschrieben werden.

    funktioniert so nicht:(

    Natürlich nicht - wenn man PHP- und Javascript-Code bunt durcheinandermischt.

    MfG,
    EKKi

    --
    sh:( fo:| ch:? rl:( br:& n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
    1. Vielen vielen Dank EKKI,

      es funktioniert hervorrangend - so wie es soll, klasse.

      Schön Abend noch.
      OlliK.

      Mahlzeit OlliK,

      wie kann ich ImageArr[ImageArr.length] über MySQL füllen?
      Geht das überhaupt?

      Ja.

      Unter Berücksichtigung von JürgenBs Hinweisen würde ich Server-seitigen PHP-Code wie z.B. den folgenden vorschlagen:

      $link = connect();

      if ($link)
      {
        $sql = "SELECT *
                FROM banner"; // Sinnvollerweise sollte man hier natürlich nur die Spalten abfragen, die man wirklich braucht!

      $result = mysql_query($sql) or die(mysql_error()); // Hier sollte eigentlich eine vernünftige Fehlerbehandlung hin - ein die() ist keine!

      if (!$result)
          return(FALSE);

      echo "ImageArr = new Array();\n";

      while ($row = mysql_fetch_assoc($result))
        {
          echo "ImageArr.push('" . $row['Image'] . "');\n";
        }
      }

      
      >   
      > Der dabei erzeugte Javascript-Code muss natürlich an der richtigen Stelle ins HTML-Dokument geschrieben werden.  
      >   
      >   
      > > funktioniert so nicht:(  
      >   
      > Natürlich nicht - wenn man PHP- und Javascript-Code bunt durcheinandermischt.  
      >   
      >   
      > MfG,  
      > EKKi  
      > 
      
    2. Hi,

      $link = connect();

      if ($link)
      {
        $sql = "SELECT *
                FROM banner"; // Sinnvollerweise sollte man hier natürlich nur die Spalten abfragen, die man wirklich braucht!

      $result = mysql_query($sql) or die(mysql_error()); // Hier sollte eigentlich eine vernünftige Fehlerbehandlung hin - ein die() ist keine!

      if (!$result)
          return(FALSE);

      echo "ImageArr = new Array();\n";

      while ($row = mysql_fetch_assoc($result))
        {
          echo "ImageArr.push('" . $row['Image'] . "');\n";
        }
      }

      
      >   
      > Der dabei erzeugte Javascript-Code muss natürlich an der richtigen Stelle ins HTML-Dokument geschrieben werden.  
        
      Ich hätte noch einen weitergehenden Vorschlag. Statt die Elemente einzeln ImageArr hinzuzufügen (btw: besser als lokale Variable, d.h. mit "var", initialisieren), würde ich den Array nicht einzeln über die push-Methode füllen, sondern einfach JSON erzeugen. Beispiel:  
        
      ~~~php
        
      $link = connect();  
        
      if ($link)  
      {  
        $sql = "SELECT *  
                FROM banner"; // Sinnvollerweise sollte man hier natürlich nur die Spalten abfragen, die man wirklich braucht!  
        
        $result = mysql_query($sql) or die(mysql_error()); // Hier sollte eigentlich eine vernünftige Fehlerbehandlung hin - ein die() ist keine!  
        
        if (!$result)  
          return(FALSE);  
        
        echo "var ImageArr = [";  
        $first = 1;  
        while ($row = mysql_fetch_assoc($result))  
        {  
          // output comma for all items after first  
          if ($first-- <= 0)  
            echo ",";  
          echo [link:http://www.php.net/manual/en/function.json-encode.php@title=json_encode]($row);  
        }  
      }  
        
        echo ']';  
      
      

      Abgesehen von meinem ästhetischem Empfinden (das generierte JS ist IMHO schöner und kompakter) hat es den Vorteil, dass man diesen Teil (ab dem generierten [ bis zum ]) auch mal herauslösen und als Webservice anbieten könnte (z.B. über AJAX, um ein einfaches Beispiel zu nennen).

      Bis die Tage,
      Matti

      1. Hallo Matti,

        Respekt - das ist ja schon hohe Schule.
        Vielen Dank für eure eure Antworten.

        MfG OlliK.

        Hi,

        $link = connect();

        if ($link)
        {
          $sql = "SELECT *
                  FROM banner"; // Sinnvollerweise sollte man hier natürlich nur die Spalten abfragen, die man wirklich braucht!

        $result = mysql_query($sql) or die(mysql_error()); // Hier sollte eigentlich eine vernünftige Fehlerbehandlung hin - ein die() ist keine!

        if (!$result)
            return(FALSE);

        echo "ImageArr = new Array();\n";

        while ($row = mysql_fetch_assoc($result))
          {
            echo "ImageArr.push('" . $row['Image'] . "');\n";
          }
        }

        
        > >   
        > > Der dabei erzeugte Javascript-Code muss natürlich an der richtigen Stelle ins HTML-Dokument geschrieben werden.  
        >   
        > Ich hätte noch einen weitergehenden Vorschlag. Statt die Elemente einzeln ImageArr hinzuzufügen (btw: besser als lokale Variable, d.h. mit "var", initialisieren), würde ich den Array nicht einzeln über die push-Methode füllen, sondern einfach JSON erzeugen. Beispiel:  
        >   
        > ~~~php
          
        
        > $link = connect();  
        >   
        > if ($link)  
        > {  
        >   $sql = "SELECT *  
        >           FROM banner"; // Sinnvollerweise sollte man hier natürlich nur die Spalten abfragen, die man wirklich braucht!  
        >   
        >   $result = mysql_query($sql) or die(mysql_error()); // Hier sollte eigentlich eine vernünftige Fehlerbehandlung hin - ein die() ist keine!  
        >   
        >   if (!$result)  
        >     return(FALSE);  
        >   
        >   echo "var ImageArr = [";  
        >   $first = 1;  
        >   while ($row = mysql_fetch_assoc($result))  
        >   {  
        >     // output comma for all items after first  
        >     if ($first-- <= 0)  
        >       echo ",";  
        >     echo [link:http://www.php.net/manual/en/function.json-encode.php@title=json_encode]($row);  
        >   }  
        > }  
        >   
        >   echo ']';  
        > 
        
        

        Abgesehen von meinem ästhetischem Empfinden (das generierte JS ist IMHO schöner und kompakter) hat es den Vorteil, dass man diesen Teil (ab dem generierten [ bis zum ]) auch mal herauslösen und als Webservice anbieten könnte (z.B. über AJAX, um ein einfaches Beispiel zu nennen).

        Bis die Tage,
        Matti

    3. Hi!

      Unter Berücksichtigung von JürgenBs Hinweisen würde ich Server-seitigen PHP-Code wie z.B. den folgenden vorschlagen:

      Lieber Kinder, bitte nicht 1:1 zu Hause in eigene Projekte einbauen sondern nur als Anregung verstehen.

      $link = connect();

      Schon diese erste Zeile ist, vermutlich in vollster Absicht, nur eine Andeutung, dass ein Connect benötigt wird, ohne diesen konkret darzustellen.

      if ($link)
      {
        $sql = "SELECT *
                FROM banner"; // Sinnvollerweise sollte man hier natürlich nur die Spalten abfragen, die man wirklich braucht!

      $result = mysql_query($sql) or die(mysql_error()); // Hier sollte eigentlich eine vernünftige Fehlerbehandlung hin - ein die() ist keine!

      Und weil die() keine Fehlerbehandlung ist, muss man sie auch nicht in Beispielcode zeigen. Zumal ...

      if (!$result)
          return(FALSE);

      ... ja hiermit bereits eine Prüfung auf Fehler stattfindet (wenn auch nur rudimentär und nicht zu sehen ist, was genau das return verlassen soll. Die obsoleten Klammern um das false erwähne ich jetzt mal nicht). Mit dem obigen die() wäre diese Prüfung auch irrelevant, weil die Abarbeitung im Fehlerfall durch das die() gestorben wird, also gar nicht bis hier kommt und um Gutfall nichts zu tun hat.

      echo "ImageArr = new Array();\n";

      while ($row = mysql_fetch_assoc($result))
        {
          echo "ImageArr.push('" . $row['Image'] . "');\n";
        }
      }

      Wenn wir mal (anhand des return) annehmen, dass der obige Code in einer Funktion steht, ist es auch besser nicht die Funktion die Ausgabe vornehmen zu lassen, sondern den Javascript-Code in einer Variable zusammenbauen und deren Inhalt von der Funktion zurückgeben zu lassen. Zudem muss noch der Kontextwechsel beim Einfügen von $row['Image'] in den Javascript-Code beachtet werden.

      Lo!

      1. Mahlzeit dedlfix,

        Lieber Kinder, bitte nicht 1:1 zu Hause in eigene Projekte einbauen sondern nur als Anregung verstehen.

        Natürlich - schließlich habe ich ja auch den Quälkot des Fragestellers als Basis genommen und diesen nur an den relevanten Stellen verändert ... aber das wäre Dir sicherlich aufgefallen, wenn Du die Postings aufmerksam gelesen hättest. ;-P

        Und weil die() keine Fehlerbehandlung ist, muss man sie auch nicht in Beispielcode zeigen.

        Siehe oben.

        ... ja hiermit bereits eine Prüfung auf Fehler stattfindet (wenn auch nur rudimentär und nicht zu sehen ist, was genau das return verlassen soll. Die obsoleten Klammern um das false erwähne ich jetzt mal nicht). Mit dem obigen die() wäre diese Prüfung auch irrelevant, weil die Abarbeitung im Fehlerfall durch das die() gestorben wird, also gar nicht bis hier kommt und um Gutfall nichts zu tun hat.

        Siehe oben: wie und wo genau diese Funktion beim OP eingebaut ist, entzieht sich meiner Kenntnis. Deswegen habe ich nur die Stellen angepasst, an denen er - vergeblich - eine Ausgabe von Javascript-Code erzeugen wollte.

        Wenn wir mal (anhand des return) annehmen, dass der obige Code in einer Funktion steht, ist es auch besser nicht die Funktion die Ausgabe vornehmen zu lassen, sondern den Javascript-Code in einer Variable zusammenbauen und deren Inhalt von der Funktion zurückgeben zu lassen.

        Das kommt darauf an, wie und wo der OP diese Funktion verwendet. Prinzipiel gebe ich Dir natürlich recht ... aber ich hatte irgendwie keine Lust, meine Glaskugel zu polieren, um herauszufinden, wie genau das Projekt des Fragestellers aufgebaut ist.

        Zudem muss noch der Kontextwechsel beim Einfügen von $row['Image'] in den Javascript-Code beachtet werden.

        Das ist richtig.

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:& n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
        1. Hi!

          Lieber Kinder, bitte nicht 1:1 zu Hause in eigene Projekte einbauen sondern nur als Anregung verstehen.
          Natürlich - schließlich habe ich ja auch den Quälkot des Fragestellers als Basis genommen und diesen nur an den relevanten Stellen verändert ... aber das wäre Dir sicherlich aufgefallen, wenn Du die Postings aufmerksam gelesen hättest. ;-P

          Vielleicht, jedoch lese ich nicht immer wieder den gesamten Thread neu, so dass mir das nicht aufgefallen ist und ich das versehentlich dir in die Schuhe geschoben habe. Zudem war es auch nicht mehr als Zitat gekennzeichnet, sonst hätte ich das auch in deinem Posting erkennen können. Wie auch immer, der OP wird es hoffentlich lesen und sich die Verbesserungsvorschläge zu Gemüte führen.

          Lo!