Ankündigung

Einklappen
Keine Ankündigung bisher.

html in php? - Php-Events

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • html in php? - Php-Events

    Ahoi,

    Wie verbindet man html und php am schlausten, html in php oder lieber andersrum? Wird eine Variante davon als "schlechter Code" gelten oder geht das beides als okay durch? Gibts vielleicht perfomance Unterschiede?

    Kurz zur Verdeutlichung was ich meine:

    html in php
    PHP-Code:
    foreach($armeen as $armee)
    {
        
    $x $armee->feld->getX();
        
    $y $armee->feld->getY();
        echo 
    "<tr>";
        echo 
    "<td>$armee->genid</td>";
        echo 
    "<td>$x</td>";
        echo 
    "<td>$y</td>";
        echo 
    "<td>".$armee->einheiten[0]->anzahl."</td>";
        echo 
    "<td>".$armee->einheiten[1]->anzahl."</td>";
        echo 
    "<td>".$armee->einheiten[2]->anzahl."</td>";
        echo 
    "</tr>";

    php in html
    PHP-Code:
    <?php
    foreach($armeen as $armee)
    {
    $x $armee->feld->getX();
    $y $armee->feld->getY();
    ?>
    <tr>
        <td><?php echo $armee->genid?></td>
        <td><?php echo $x?></td>
        <td><?php echo $y?></td>
        <td><?php echo $armee->einheiten[0]->anzahl?></td>
        <td><?php echo $armee->einheiten[1]->anzahl?></td>
        <td><?php echo $armee->einheiten[2]->anzahl?></td>
    </tr>
    <?php
    }

    Frage 2:
    Ein Client soll durch Betätigung eines Buttons Daten an eine Datenbank übertragen und gleichzeitig ein anderes PHP-Skript (daemon) darüber informieren, dass es in X Minuten mal in die Datenbank gucken soll und dort gegebenenfalls etwas updaten soll. Womit realisiere ich das? mit Events? oder bin ich da auf dem falschen Dampfer? Würde mich hier über Stichworte und gerne auch Links zu "einleitenden" Worten über das jeweilige Thema freuen.
    Die alternative wäre, dass der daemon jede Sekunde (eher öfter) in die Datenbank schaut und dann daraus die nötigen Informationen zieht. Das klingt mir aber ziemlich "anstrengend" für den Datenbankserver und ich wüsste gern ob ich da etwas entlasten kann.

    Liebe Grüße
    ChromOxid

    edit: Wenn ich was aus PhpStorm hier reinkopiere wird mir leider jeder Zeilenabasatz weggenommen, ich ändere das kurz manuell, gibs dafür eine Lösung?
    -> einmal in den Texteditor kopieren und von dort dann erneut kopieren scheint das problem zu beheben.

  • #2
    Ich bin zwar ein Anfänger, aber ich habe oftmals in ein Paar Quellcodes geguckt, z. B. von OpenSource BGs (oop)

    Dort war von 9/10 Fällen immer Variante 2 genutzt.

    Plot twist: Ich als Anfänger habe schon viele Seiten angesehen wo PHP beigebracht wurde. Da war von 9/10 Fällen immer Fall 1 in Benutzung.

    Kommentar


    • #3
      Glaub da gibts keine allgemeingültige Regeln... Ich bin zwar kein Maßstab aber ich denk ich würd's so machen. Manchmal, gerade bei "komplexeren" HTML-Elementen bieten sich auch printf() bzw. sprintf() an.

      PHP-Code:
      foreach ($armeen as $armee) {
          echo
            
      "<tr>"
             
      ."<td>".$armee->genid."</td>"
             
      ."<td>".$armee->feld->getX()."</td>"
             
      ."<td>".$armee->feld->getY()."</td>"
             
      ."<td>".$armee->einheiten[0]->anzahl."</td>"
             
      ."<td>".$armee->einheiten[1]->anzahl."</td>"
             
      ."<td>".$armee->einheiten[2]->anzahl."</td>"
           
      ."</tr>";

      oder so

      PHP-Code:
      foreach ($armeen as $armee) {
          echo
            
      "<tr>
             <td>"
      .$armee->genid."</td>
             <td>"
      .$armee->feld->getX()."</td>
             <td>"
      .$armee->feld->getY()."</td>
             <td>"
      .$armee->einheiten[0]->anzahl."</td>
             <td>"
      .$armee->einheiten[1]->anzahl."</td>
             <td>"
      .$armee->einheiten[2]->anzahl."</td>
           </tr>"
      ;

      edit: Wenn ich was aus PhpStorm hier reinkopiere wird mir leider jeder Zeilenabasatz weggenommen, ich ändere das kurz manuell, gibs dafür eine Lösung?
      -> einmal in den Texteditor kopieren und von dort dann erneut kopieren scheint das problem zu beheben.
      STRG+SHIFT+V zumeist auch.

      Kommentar


      • #4
        Zitat von hausl Beitrag anzeigen
        Glaub da gibts keine allgemeingültige Regeln... Ich bin zwar kein Maßstab aber ich denk ich würd's so machen, ich "konkatte" irgendwie gerne. Manchmal, gerade bei "komplexeren" HTML-Elementen bieten sich auch printf() bzw. sprintf() an.
        Alles HTML durchs echo zu schleifen kann dir schon einmal böse Kommentare einbrocken. Es ist i.d.R. tatsächlich auch langsamer als mit Anfang und Endtags zu arbeiten. Ich neige allerdings auch häufig dazu lieber ein echo zu nutzen als die begrenzenden Tags. (Das sieht ja im Editor auch farblich viel schöner aus :P)

        Was ich privat als DAU allerdings auch gerne mache ist alle "Ausgaben" z.B. in der Variable $Inhalt zu verketten und dann erst am Ende das ganze einmalig auszugeben. I.d.R. nehme ich dafür eine ganz simple "Templateklasse" (Kennt nur eine Sorte Platzhalter und kann diese ersetzen keine Sprachvariablen o.Ä.) um den durch Verarbeitung generierten Code von der Grundstruktur zu trennen. Dann gibt's auch keine Probleme mehr mit bereits gesendeten Headern

        Kommentar


        • #5
          PHP-Code:
          <?php foreach($armeen as $armee): ?>
          <tr>
              <td><?= $armee->genid ?></td>
              <td><?= $armee->feld->getX() ?></td>
              <td><?= $armee->feld->getY() ?></td>
              <td><?= $armee->einheiten[0]->anzahl ?></td>
              <td><?= $armee->einheiten[1]->anzahl ?></td>
              <td><?= $armee->einheiten[2]->anzahl ?></td>
          </tr>
          <?php endforeach; ?>
          Bei so echo-Blöcken kann es sein, dass die IDEs das HTML nicht analysieren können und Fehler durch fehlende Markierung nicht auffallen.

          Kommentar


          • #6
            Gäb auch noch so eine alternative Syntax: http://php.net/manual/de/control-str...ive-syntax.php

            Alles HTML durchs echo zu schleifen kann dir schon einmal böse Kommentare einbrocken. Es ist i.d.R. tatsächlich auch langsamer als mit Anfang und Endtags zu arbeiten. Ich neige allerdings auch häufig dazu lieber ein echo zu nutzen als die begrenzenden Tags.
            Reines HTML nicht, aber wenn mehr oder weniger "viel" PHP Code darin ist dann packe ich doch auch eher HTML/PHP in einen String und gebe den dann aus. Das "direkte" echo oben war für diesen Fall.. sonst auch alles zum Schluss.

            Was ich privat als DAU
            me too

            Kommentar


            • #7
              Danke für die Antworten bisher. Den String "wenigstens" zu verketten ist natürlich alles andere als blöd. Ärgert mich schon etwas, dass ich da nicht selbst drauf gekommen bin, danke

              Ohne aufdringlich wirken zu wollen, würde ich gerne den Fokus nochmal Richtung Frage 2 lenken, die hätte ich wohl nicht so gut verstecken dürfen.

              Frage 2:
              Ein Client soll durch Betätigung eines Buttons Daten an eine Datenbank übertragen und gleichzeitig ein anderes PHP-Skript (daemon) darüber informieren, dass es in X Minuten mal in die Datenbank gucken soll und dort gegebenenfalls etwas updaten soll. Womit realisiere ich das? mit Events? oder bin ich da auf dem falschen Dampfer? Würde mich hier über Stichworte und gerne auch Links zu "einleitenden" Worten über das jeweilige Thema freuen.
              Die alternative wäre, dass der daemon jede Sekunde (eher öfter) in die Datenbank schaut und dann daraus die nötigen Informationen zieht. Das klingt mir aber ziemlich "anstrengend" für den Datenbankserver und ich wüsste gern ob ich da etwas entlasten kann.

              Kommentar


              • #8
                Wenn du keinen Cronjob verwenden willst und das andere Script nur nach einem update laufen muss, warum stößt du es dann nicht direkt "durch" das Update bedarfsgesteuert an?

                Kommentar


                • #9
                  Nein, einen Cronjob will ich nicht verwenden, ich will keine getakteten Berechnungen sondern "Echtzeitaktionen". Warum Cronjob nicht passt hatte ich hier: http://www.php.de/forum/webentwicklu...serspielfragen

                  Die Events müssen auch gerechnet werden wenn niemand gerade auf der Seite ist, da sie wiederum andere Events beeinflussen. D.h. wenn ich das alles auf den Client "auslager" wird mir das auf kurz oder lang gesehen um die Ohren fliegen.
                  Ich möchte nur einen möglichst günstigen Weg finden die Kommunikation zwischen Client und Daemon zu gestalten.

                  Nach weiterem drüber nachdenken ist vielleicht die Datenbank doch garnicht so ungeeignet. Da jedes eingetragene Ereignis mindestens X Minuten Zeit hat bis der Daemon etwas ausführen muss. Folglich muss ich auch nur alle X Minuten schauen was in der Datenbank steht.

                  Falls es eine "direktere" Kommunikationsmöglichkeit gibt, freue ich mich natürlich trotzdem wenn das hier jemand erwähnt.

                  Kommentar


                  • #10
                    Zitat von VPh Beitrag anzeigen
                    PHP-Code:
                    <?php foreach($armeen as $armee): ?>
                    <tr>
                      <td><?= $armee->genid ?></td>
                      <td><?= $armee->feld->getX() ?></td>
                      <td><?= $armee->feld->getY() ?></td>
                      <td><?= $armee->einheiten[0]->anzahl ?></td>
                      <td><?= $armee->einheiten[1]->anzahl ?></td>
                      <td><?= $armee->einheiten[2]->anzahl ?></td>
                    </tr>
                    <?php endforeach; ?>
                    Bei so echo-Blöcken kann es sein, dass die IDEs das HTML nicht analysieren können und Fehler durch fehlende Markierung nicht auffallen.
                    Das ist die bisher gängigste Templating-Variante, sieht man in vielen CMS Varianten und würde ich persönlich empfehlen. Da funktioniert dann das Highlighting der IDE's für PHP und HTML dann auch.

                    Kommentar

                    Lädt...
                    X