Phpler: Php in JavaScript-Funktion nutzen können!?

Grüßt euch, Kameraden.

Ich möchte eine bestimmte JAVASCRIPT-Funktion nur dann ausführen, wenn ich mittels PHP etwas geprüft habe und das true zurückgibt... ich dachte mir, machst du das einfach so:

function createNew( )
{
  Data = new Collection();
  Data.add(Type1);
  Data.add(Type2);
  Data.add(Type3);
}

Nun möchte ich aber aus der MySQL-Datenbank mittels PHP einen Wert auslesen, was ja theoretisch auch wunderber klappt, nur soll das Ergebnis des Wertes (1, 2 oder 3) darüber entscheiden, welcher "Type" der "Data" hinzugefügt werden soll. Versucht habe ich das so:

function createNew( )
{
  Data = new Collection();
  <?php

$db_server = "localhost";
$db_user = "";
$db_password = "";
$db_datenbank = "test";
$db = @mysql_connect( $db_server, $db_user, $db_password ) or die( "Datenbankverbindung fehlgeschlagen!" );
$query = mysql_db_query( $db_datenbank, "SELECT value1 FROM table1;" );
while( $zeile = mysql_fetch_row( $query ) )
{
    if( $zeile[0] = 0 )
        Data.add(Type1); // die JavaScript Funktion
    if( $zeile[0] = 1 )
        Data.add(Type2); // die JavaScript Funktion
    if( $zeile[0] = 2 )
        Data.add(Type3); // die JavaScript Funktion
}
mysql_close( );

?>}

Anscheinend kann man PHP so nciht mit JavScript kombinieren. Was muss ich ändern, um das zu erreichen, was ich oben beschrieben habe (den Parameter der Javascript-Fkt. in Abhängigkeit von der aus der Datenbank erhaltetem Wert nutzen)

  1. Hallo,

    Anscheinend kann man PHP so nciht mit JavScript kombinieren.

    Goldene Regel zu PHP und JavaScript:

    ********************************************
    * JavaScript wird clientseitig ausgeführt, *
    *    PHP wird serverseitig ausgeführt!     *
    ********************************************

    Daher: PHP erzeugt eine Ausgabe, die für den Browser (bis auf in der URL) so aussieht, als gäbe es kein PHP und die HTML-Seite wäre direkt so auf dem Server abgespeichert worden.

    Was muss ich ändern, um das zu erreichen, was ich oben beschrieben habe (den Parameter der Javascript-Fkt. in Abhängigkeit von der aus der Datenbank erhaltetem Wert nutzen)

    Erzeuge mit PHP den JavaScript-Code, der Ausgeführt werden soll, also z.B.

    while( $zeile = mysql_fetch_row( $query ) )
    {
        if( $zeile[0] == 0 )
          echo "Data.add(Type1); // die JavaScript Funktion\n";
        else if( $zeile[0] == 1 )
          echo "Data.add(Type2); // die JavaScript Funktion\n";
        else if( $zeile[0] == 2 )
          echo "Data.add(Type3); // die JavaScript Funktion\n";
    }

    Ich sollte vielleicht noch erwähnen, dass Du mit = eine Zuweisung durchführst, was Du aber warscheinlich nicht tun willst, sondern eher einen Vergleich durchführen willst, daher wäre == angebracht. Außerdem ist else if »sauberer« als lauter ifs - ein switch wäre natürlich am elegantesten.

    Christian

    --
    Ich bitte darum, dass ein Themenbereich (BARRIEREFREIHEIT) eingerichtet wird.
    1. Vielen Dank für eure schnellen antworten. Verbleiben tut aber noch folgendes problem. Der Php-Code würde sich ja zur zeit bei mir nachwievor in einer JavaScript-Funktion befinden. Schließlich soll ja in dieser Fkt. die Abfrage gemacht werden, und nicht irgendwo im Dokument. Somit bin ich irgendwie im Teufelskreis, denn so gehts halt nicht:

      function loadData() {

      treeData = new Collection();
      <?php

      $db_server = "localhost";
       $db_user = "";
       $db_password = "";
       $db_datenbank = "test";
       $db = @mysql_connect( $db_server, $db_user, $db_password ) or die( "Datenbankverbindung fehlgeschlagen!" );
       $query = mysql_db_query( $db_datenbank, "SELECT value1 FROM table1;" );

      while( $zeile = mysql_fetch_row( $query ) )
      {
          if( $zeile[0] == 0 )
            echo "Data.add(Type1); // die JavaScript Funktion\n";
          else if( $zeile[0] == 1 )
            echo "Data.add(Type2); // die JavaScript Funktion\n";
          else if( $zeile[0] == 2 )
            echo "Data.add(Type3); // die JavaScript Funktion\n";
      }

      ?>

      Da würde ja jetzt php-code in einer javascript-fkt. stehen, was nicht geht. irgendwas muss ich noch falsch verstanden haben, aber wie geht es richtig?

      1. Hallo phpler,

        denn so gehts halt nicht:

        was geht nicht? Fehlermeldung?

        Da würde ja jetzt php-code in einer javascript-fkt. stehen, was nicht geht. irgendwas muss ich noch falsch verstanden haben, aber wie geht es richtig?

        natürlich geht das, wenn der das Script vom Server abgearbeitet wurde steht da nur noch js-Code drin - schau dir mal das an was im Browser ankommt.

        Grüße aus Nürnberg
        Tobias

        1. Hallo phpler,

          denn so gehts halt nicht:
          was geht nicht? Fehlermeldung?

          "Es ist ein Laufzeitfehler aufgetreten. Soll der Debugmodus gestartet werden?

          Zeile:191
          Fehler: Syntaxfehler"

          Also die Datei ist eine PHP-Datei und die ganze Fkt. sieht jetzt so aus (ich hatte das ganze nur beispielhaft als Frage gestellt, hier also das exakte problem):

          function loadData() {

          treeData = new Collection();

          treeData.add(new RootNode('root','Hauptrubrik','html/welcome.html','','folder-open.gif')); // Root Node MUST be first!

          <?php
              $db_server = "localhost";
              $db_user = "";
              $db_password = "";
              $db_datenbank = "database";
              $db = @mysql_connect( $db_server, $db_user, $db_password ) or die( "Datenbankverbindung fehlgeschlagen!" );
              $query = mysql_db_query( $db_datenbank, "SELECT node1.left AS L, node1.right AS R, CONCAT(REPEAT(' ', 4*(COUNT(*)-1)), '<img src="folder.gif" /> ', '<a href="test.php?id=', node1.id,'">', node1.name, '</a><br />') AS tree, COUNT(*) AS level FROM node AS node1, node AS node2 WHERE node1.left BETWEEN node2.left AND node2.right GROUP BY node1.left;" );
              while( $zeile = mysql_fetch_row( $query ) )
              {
                 echo "treeData.add(new FolderNode('as','root','Unterrubrik1','',''));";
              }
              mysql_close( );
            ?>

          }

          Zeile 191 ist dabei die zeile direkt beim Anfang von <?php... (Achja, der PHP-Part ist aufjedenfall syntaktisch korrekt, weil er seperat vom JavaScript funktioniert!)

          1. Schade, ich dachte, ich hätte deine Frage doch jetzt ausreichend gut beantwortet!?

          2. Hallo,

            $query = mysql_db_query( $db_datenbank, "SELECT node1.left AS L, node1.right AS R, CONCAT(REPEAT(' ', 4*(COUNT(*)-1)), '<img src="folder.gif" /> ', '<a href="test.php?id=', node1.id,'">', node1.name, '</a><br />') AS tree, COUNT(*) AS level FROM node AS node1, node AS node2 WHERE node1.left BETWEEN node2.left AND node2.right GROUP BY node1.left;" );

            und das funktioniert?

            while($zeile = mysql_fetch_row($query)){
                   echo "treeData.add(new FolderNode('as','root','Unterrubrik1','',''));";

            mhh... was soll das werden? diese Schleife gibt [Anzahl-der-gefundenen-Datensätzte] mal treeData.add(...) aus.

            Zeile 191 ist dabei die zeile direkt beim Anfang von <?php... (Achja, der PHP-Part ist aufjedenfall syntaktisch korrekt, weil er seperat vom JavaScript funktioniert!)

            mhh... was kommt den im Browser an? Was steht in der Zeile 191 von dem was im Browser ankommt? Kann man sich das evtl. irgendwo anschauen?

            Grüße aus Nürnberg
            Tobias

            1. Das Problem ist jetzt folgendes: Ich muss ja quasi in die Echo-Anweisung die Javascript-Fkt. aufrufen, aber so geht das nicht:

              echo "<a href="javascript:function1()"></a>\n";

              ich kann ja aber auch nicht einfach echo "javascript:drawTree();"; schreiben, denn man kann javascript ja nur mittels <a href aufrufen...

  2. Hallo,

    Anscheinend kann man PHP so nciht mit JavScript kombinieren.

    nein, kann man icht, da php serverseitig läuft, und javascript clientseitig.

    Was muss ich ändern, um das zu erreichen, was ich oben beschrieben habe (den Parameter der Javascript-Fkt. in Abhängigkeit von der aus der Datenbank erhaltetem Wert nutzen)

    wenn ich dich richtig verstanden habe, willst du je nach Wert in der Datenbank einen bestimmten Wert mit Javascript verarbeiten, richtig? Dann lässt du eben php den Inhalt prüfen und schreibst den gewünschten Wert dann mittels echo in das Dokument. Ich nehme an, das hattest du mit diesen Zeilen auch vor:

    if( $zeile[0] = 0 )
      Data.add(Type1);

    wenn du vor Data.add(Type1); noch ein >echo "< schreibst und dahinter ein >";< sollte es funktionieren, allerdings musst du in deiner if-Bedingung noch ein '=' reinmachen, da Werte mit einem '=' zugewiesen werden (und das wird immer true) zum Vergleichen ob zwei Werte gleich sind brauchst du zwei '==' also $zeile[0]==0.

    Grüße aus Nürnberg
    Tobias