Samuel: php lasst sich nicht abarbeiten aus javascript

Hallo alleseits,
hab ein kleines Problem bei dem ich nicht mehr weiter weiß. Habe vor aus JS ein PHP-array auszugeben: var fArtNr = $("<?php print $formarticle->select_article($object->art_nr,\'ref\',array(\'selectarnr_id\',\'state_id\'),6);?> &nbsp;/&nbsp;");

bekomme hier auch keine Fehlermeldungen oder desgleichen.

Aber bei der ausgabe bekomme die $formarticle auskommentinert:

<!--? $formarticle--->  
select_article($object-&gt;art_nr,'ref',array('selectarnr_id','state_id'),6); ?>;

Woran liegt es? Was mache ich da falsch? Kann mich jemand in der Beziehung aufklären?!

  1. Heute ist der Tag der Metaphern :).
    Du versuchst zu erst zu verdauen und dann zu essen. Das funktioniert aber nicht. PHP = essen und Javascript = verdauen. Du kannst von PHP an Javascript Werte "übergeben", aber nicht anders rum. Dafür musst du einen erneuten Request stellen -> Ajax.

    Gruß
    Magendarm Spezialist
    Dr. Rex

  2. Meine Herren!

    Bitte entwirre uns den Code erstmal. Baue ein paar Leerzeichen und Zeilenumbrüche in den Code ein, wo es sinnvoll ist. Dann zeige uns strikt voneinander getrennt, wie der PHP-Code aussieht und wie die passende PHP-Datei heißt. Und wie der JavaScript aussieht, der von PHP erzeugt wurde. Also das was im Browser ankommt.

    Ich habe das Gefühl, dass du dir nicht ganz im Klaren darüber bist, wie das Client-Server-Modell einer Webseite funktioniert. Du musst dir vor Augen führen, dass PHP immer vor dem JavaScript-Code ausgeführt wird. Es wird erst der gesamte PHP-Code abgearbeitet, wenn das passiert ist, geht alles zusammen an den Browser und erst dann wird das JavaScript ausgeführt. In dem Quelltext, den der Browser kriegt, steht dann kein Wort PHP mehr drin.

    --
    “All right, then, I'll go to hell.” – Huck Finn
    1. Also gut, ich vesuche es anders rum... vorab schon mal vielen Dank für eure Antworten.

      Hier ist das gute JS:

      //Add new Field2form  
          print "\n".'<script type="text/javascript">';  
          print '$(document).ready(function() {  
                $("#add").click(function() {  
                var intId = $("#buildyourform div").length + 1;  
                var fieldWrapper = $("<div class=\"fieldwrapper\" id=\"field" + intId + "\"/>");  
        
              var fArtNr = $("<?php print $formarticle->select_article($object->art_nr,\'ref\',array(\'selectarnr_id\',\'state_id\'),6);?> &nbsp;/&nbsp;");  
        
              var fAmount = $("&nbsp;/&nbsp;<input type=\"text\" size\"10\" id=\"stok\" name=\"stok\" size=\"10\" value=\"'.GETPOST('stok').'\"/>");  
                var removeButton = $("<input type=\"button\" class=\"remove\" value=\"-\" />");  
                removeButton.click(function() {  
                    $(this).parent().remove();  
                });  
                fieldWrapper.append(fArtNr);  
              fieldWrapper.append(fAmount);  
                fieldWrapper.append(removeButton);  
                $("#buildyourform").append(fieldWrapper);  
            });  
            $("#preview").click(function() {  
                $("#yourform").remove();  
                var fieldSet = $("<fieldset id=\"yourform\"><legend>Your Form</legend></fieldset>");  
                $("#buildyourform div").each(function() {  
                    var id = "input" + $(this).attr("id").replace("field","");  
                    var label = $("<label for=\"" + id + "\">" + $(this).find("input.fieldname").first().val() + "</label>");  
                    var input;  
                    fieldSet.append(label);  
                    fieldSet.append(input);  
                });  
                $("body").append(fieldSet);  
                });  
            });';
      

      und hier möchte ich ein neues Feld hinzufügen in dem die besagte Zeile mir ein Inpup-Feld generiert. Der eine Feld wird erstellt, aber sobald ich ein zweites haben möchte, bekomme ich bei dem $formarticle auskommentiert.

        
      print '<tr><td>'.$langs->trans('Artikel').'&nbsp;/&nbsp;'.$langs->trans("Menge").'</td><td colspan="3">';  
      	print '<fieldset id="buildyourform">';  
      	print $formarticle->select_article($object->art_nr,'ref',array('selectarnr_id','state_id'),6);  
      	print '&nbsp;/&nbsp;<input type="text" id="stok" name="stok" size="10" value="'.GETPOST('stok').'">';  
      	print '</fieldset>';  
      	print '<input type="button" value="Weterer Artikel" class="add" id="add" />';  
      	print '</td></tr>'; 
      

      und so sieht der Queltext danach aus:

        
      <div class="fieldwrapper" id="field6">  
      <!--?php print $formarticle--->select_article($object-&gt;art_nr,'ref',array('selectarnr_id','state_id'),6);?>;<input type="text" size"10"="" id="stok" name="stok" size="10" value=""><input type="button" class="remove" value="-"</div>  
      
      
      1. Hi,

        print '<tr><td>'.$langs->trans('Artikel').'&nbsp;/&nbsp;'.$langs->trans("Menge").'</td><td colspan="3">';
        print '<fieldset id="buildyourform">';
        print $formarticle->select_article($object->art_nr,'ref',array('selectarnr_id','state_id'),6);
        print '&nbsp;/&nbsp;<input type="text" id="stok" name="stok" size="10" value="'.GETPOST('stok').'">';
        print '</fieldset>';
        print '<input type="button" value="Weterer Artikel" class="add" id="add" />';
        print '</td></tr>';

        
        >   
        > und so sieht der Queltext danach aus:  
        > ~~~html
          
        
        > <div class="fieldwrapper" id="field6">  
        > <!--?php print $formarticle--->select_article($object-&gt;art_nr,'ref',array('selectarnr_id','state_id'),6);?>;<input type="text" size"10"="" id="stok" name="stok" size="10" value=""><input type="button" class="remove" value="-"</div>  
        > 
        
        

        Das gibt es keinen offensichtlichen oder nachvollziehbaren Grund für mit dem Code, den du gepostet hast.
        Und auch dass $object->art_nr durch $object-&gt;art_nr „ersetzt“ wurde, ist merkwürdig.

        Meine Vermutung: Entweder die Methode $formarticle->select_article selber gibt diesen seltsamen Code aus, oder da ist noch irgendwas anderes im Spiel, was du uns bisher verschwiegen hast – bspw. irgendeine Art von Templaing-System o.ä., dass an dieser Stelle gar keinen PHP-Code erwartet, und diesen dann escaped/maskiert, um die Regeln des Ausgabe-Kontextes zu wahren.

        MfG ChrisB

        --
        Autocomplete has spoiled me to a point where it happens every so often that I encounter a CAPTCHA, and I just type in the first character … and then wait for the rest of the code to be automatically suggested :/
        1. oder da ist noch irgendwas anderes im Spiel, was du uns bisher verschwiegen hast –

          Oh, wird wohl auch heute wieder jemand wegen übler Nachrede vor Gericht gezerrt? Ich hole schon mal mein Popcorn …

          1. oder da ist noch irgendwas anderes im Spiel, was du uns bisher verschwiegen hast –

            Oh, wird wohl auch heute wieder jemand wegen übler Nachrede vor Gericht gezerrt? Ich hole schon mal mein Popcorn …

            Dann die FRage mal anders, wie bekomme ich die Methode
            print $formarticle->select_article($object->art_nr,\'ref\',array(\'selectarnr_id\',\'state_id\'),6);

            mittels JS an eine bestimmte stelle hinzugefügt?

            1. Hi!

              Ich verweise hier nochmal auf die schon gegebenen Kommentare: PHP = serverseitig. JS = clientseitig.

              Erklaere bitte, wie Du mit JS gedenkst auf php Einfluss zu nehmen. php generiert beliebigen Quelltext, den es an den Browser gibt. Der laedt diesen Quelltext runter und interpretiert ihn. Wenn alles klappt wird ihm eine gueltige Ressource fuer HTML, JS, CSS, ... geliefert, die er wie gewuenscht interpretiert und ausfuehrt.

              Du kannst natuerlich mit JS Strings generieren, die php Quellcode enthalten. Kein Problem. Aber der Browser kann damit nichts anfangen. Du muesstest dafuer sorgen, dass diese Strings wieder zum Server gelangen und dort verarbeitet werden.

              Ueberhaupt zeigst Du in all Deinen Beispielen kein JS. Nur php Code, der scheinbar JS generiert. Die "Fehlerstelle" kann ich persoenlich auch nicht nachvollziehen:
              Du sagst dieser Code

              print '<fieldset id="buildyourform">';
              print $formarticle->select_article($object->art_nr,'ref',array('selectarnr_id','state_id'),6);

              generiert dieses HTML

              <div class="fieldwrapper" id="field6">
              <!--?php print $formarticle--->select_article($object-&gt;art_nr,'ref',array('selectarnr_id','state_id'),6);?>;<input type="text" size"10"="" id="stok" name="stok" size="10" value=""><input type="button" class="remove" value="-"</div>

              In deinem Code lese ich etwas von einem Fieldset, direkt bevor $formarticle erscheint. Dein HTML zeigt aber ein Div.

              Eventuell schaust Du nur an der falschen Stelle? (Oder ich versteh nur Bahnhof - mag auch sein)

              --
              Signaturen sind bloed.
              1. Du kannst natuerlich mit JS Strings generieren, die php Quellcode enthalten. Kein Problem. Aber der Browser kann damit nichts anfangen. Du muesstest dafuer sorgen, dass diese Strings wieder zum Server gelangen und dort verarbeitet werden.

                War ne schwere Geburt, aber jetzt hab ich es! Danke dir Steel!
                Ich hatte wirklich vor den PHP-Code im Brauser auszuführen, was nie laufen wird. Die Grundlagen kenne ich auch, nur nicht beachtet. Jetzt ist einges klar geworden, muss erst
                var fArtNr = $("<?php print $formarticle->select_article($object->art_nr,\'ref\',array(\'selectarnr_id\',\'state_id\'),6);?> &nbsp;/&nbsp;"); das Teil an den Server "schicken" um ein input-Feld zurück zu bekommen!

                1. Lieber Samuel,

                  var fArtNr = $("<?php print $formarticle->select_article($object->art_nr,\'ref\',array(\'selectarnr_id\',\'state_id\'),6);?> &nbsp;/&nbsp;"); das Teil an den Server "schicken" um ein input-Feld zurück zu bekommen!

                  klingt definitiv nach einem kaputtem Programm-Entwurf.

                  Liebe Grüße,

                  Felix Riesterer.

                  --
                  "Wäre die EU ein Staat, der die Aufnahme in die EU beantragen würde, müsste der Antrag zurückgewiesen werden - aus Mangel an demokratischer Substanz." (Martin Schulz, Präsident des EU-Parlamentes)
        2. Es wird kein Templaing-System (Smarty und Co.) benutzt. An der Stelle fünktioniert es ja alles super:

          print '<tr><td>'.$langs->trans('Artikel').'&nbsp;/&nbsp;'.$langs->trans("Menge").'</td><td colspan="3">';  
                  print '<fieldset id="buildyourform">';  
                  print $formarticle->select_article($object->art_nr,'ref',array('selectarnr_id','state_id'),6);  
                  print '&nbsp;/&nbsp;<input type="text" id="stok" name="stok" size="10" value="'.GETPOST('stok').'">';  
                  print '</fieldset>';  
                  print '<input type="button" value="Weterer Artikel" class="add" id="add" />';  
                  print '</td></tr>'; 
          

          Und sobald ich mit JS einene weitere Zeile hinzufüge, bekomme ich <!--?php print $formarticle---> auskommentiert. Wieso, weshalb, warum ist mir unbergreiflich. In welche richtung soll ich da überhaupt schauen?

  3. Lieber Samuel,

    packe den JavaScript-Code in eine JavaScript-Datei (endet üblicherweise mit ".js") und befülle diese dann entsprechend. Dazu haben sich Platzhalter als sehr brauchbare Lösung erwiesen. Dann vermischst Du auch JavaScript- und PHP-Logik nicht mehr dermaßen miteinander...

    $js = str_replace(  
        '{$js-data}',  
        $obj->method('val'),  
        file_get_contents('./js-template.js')  
    );  
      
    echo $js;
    

    Liebe Grüße,

    Felix Riesterer.

    --
    "Wäre die EU ein Staat, der die Aufnahme in die EU beantragen würde, müsste der Antrag zurückgewiesen werden - aus Mangel an demokratischer Substanz." (Martin Schulz, Präsident des EU-Parlamentes)