Ankündigung

Einklappen
Keine Ankündigung bisher.

Syntax für PHP-Variablen Übergabe

Einklappen

Neue Werbung 2019

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

  • Syntax für PHP-Variablen Übergabe

    Hi All!

    Zuerst ein Hallo an die Community und bin so frei gleich meine erste Frage zu zu stellen!( Natürlich habe ich versucht das Problem in Eigenregie zu lösen Ich bin leider kein Hobby-Programmierer und verfüge nur über rudimentäre Kenntnisse, benötige aber ein paar Custom-Änderungen in "meiner" App!

    Folgender Code-Auszug (DB-Seitig kenne ich mich recht gut aus) liest mir die gewünschten Daten aus meiner MYSQL-DB aus und füllt mit den Daten eine HTML-Tabelle.

    echo "<table border='1'>\n";
    while($zeile = $ergebnis->fetch_array()) {
    echo "<tr><td>" . htmlspecialchars($zeile['t_id']) . "</td>"
    . "<td>" . htmlspecialchars($zeile['t_name']) . "</td>"
    . "<td>" . htmlspecialchars($zeile['t_emblem']) ."</td>"
    . "<td>" . htmlspecialchars($zeile['last_name']) . "</td>"
    . "<td>" . htmlspecialchars($zeile['first_name']) . "</td>"
    . "<td>" . htmlspecialchars($zeile['Tore']) . "</td>"
    . "</tr>\n";
    }
    echo "</table>";

    Nun zu meiner Frage - in der Zeile "t_emblem" wird der Dateiname eines JPG's ausgelesen. Ich möchte allerdings diesen Wert (zbsp. xxxxxx.jpg) in der Zelle als Grafik ausgeben. Die Datei mit diesem Namen liegt auf dem Webserver. Wie muss der Syntax aussehen, dass ich in der betreffenden <td> mit <img scr=\xxxx\xxxxx> den Dateinamen so in den Pfad einbaue, dass die Grafik in der Zelle angezeigt wird?

    Ich habe trotz viel probieren keine "lauffähige" Version hingebracht!

    Ich denke, für Euch Profis ist das ein Klacks, und es würde mich freuen, wenn ihr mich auf den richtigen Weg führen könntet!

    Vielen Dank im Voraus


  • #2
    willkommen im forum,
    zum psoten vomn quellcode nützt man, der bessren lesbarkeit halber, code tags
    [php][/php][html][/html][code][/code]

    also:
    PHP-Code:
    echo "<table border='1'>\n";
    while(
    $zeile $ergebnis->fetch_array()) {
    echo 
    "<tr><td>" htmlspecialchars($zeile['t_id']) . "</td>"
    "<td>" htmlspecialchars($zeile['t_name']) . "</td>"
    "<td><img src=\"pfade/zu/datei/"  zeile['t_emblem']. "\" /> </td>"
    "<td>" htmlspecialchars($zeile['last_name']) . "</td>"
    "<td>" htmlspecialchars($zeile['first_name']) . "</td>"
    "<td>" htmlspecialchars($zeile['Tore']) . "</td>"
    "</tr>\n";
    }
    echo 
    "</table>"
    mit den ganzen echos und so wirste auf dauer nicht glücklich...

    Kommentar


    • #3
      Ich seh keine Versuche von dir.
      Von der Sache her ist es so, wie du es schon hast, musst eben nur das img noch da reinkleben und den PHP-Teil im src-Attribut ausgeben.
      evtl interessiert dich aber eher das: http://www.php.de/scriptboerse/
      Relax, you're doing fine.
      RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

      Kommentar


      • #4
        ViecFan dein Problem ist, dass du nicht weißt wie du den Pfad zum Bild korrekt zusammen setzen sollst, oder?

        Du könntest z. B. einfach einmalig ein var_dump(__DIR__) in das Skript einbauen. Dann musst du von diesem Pfad ausgehend zum Bild-Ordner gelangen.

        Bsp:
        __DIR__-Pfad: C:\Coding\Testprojekt\core
        Bild-Pfad: C:\Coding\Testprojekt\images
        Lösung:

        (Das Forum mag das nicht und wandelt es immer um, daher als Screenshot eingefügt)

        Kommentar


        • #5
          Hallo!

          PHP-Code:
          "<td><img src=\"images/bearleague/" .$zeile['t_emblem']. "\" /> </td>" 
          super das funktioniert!

          @moma
          @Vph

          natürlich habe ich im Netzt gesucht und verschiedene Ansätze probiert. Der Hund liegt hier aber wie immer im Detail (ein fehlendes Komma, Punkt, etc.) und nix geht mehr. Und dass es da x-Variationsmöglichkeiten und Ansätze gibt, ist mir hinlänglich "vetraut"

          Habe in der Lösung von moma den "." und das "$" ergänzt und jetzt geht es! (trotzdem mit ein paar mal probieren, wo der Fehler nun gelegen ist)

          UND ich habe was essentielles von euch gelernt, dass ich immer wieder brauchen werde!

          Vielen, vielen Dank nochmals - und vor allem in dieser Geschwindigkeit! - super Forum, super Leute!

          Wolfgang

          Kommentar


          • #6
            Zitat von moma Beitrag anzeigen
            mit den ganzen echos und so wirste auf dauer nicht glücklich...
            welche Technik würdest du mir generell empfehlen?
            Wobei es sich in diesem Fall (ich betreibe für meinen Eishockeyverein eine Seite und hierbei geht es um eine "Ligaverwaltung") um relativ wenig Daten handelt. Trotzdem bin ich natürlich daran interessiert mich auch in diesem Gebiet weiter zu entwickeln.....also wenn du mir die Richtung ansagst, die ich einschlagen soll, wäre ich dir dankbar!

            LG
            Wolfgang

            Kommentar


            • #7
              Zitat von monolith Beitrag anzeigen
              ViecFan dein Problem ist, dass du nicht weißt wie du den Pfad zum Bild korrekt zusammen setzen sollst, oder?
              Danke für dein Feedback - grundsätzlich fehlt mir die Selbstverständlichkeit den richtigen Syntax der Sprache zu verstehen, und der ist in einer Sprache wie PHP mannigfaltig!

              Kommentar


              • #8
                Zitat von monolith Beitrag anzeigen
                (Das Forum mag das nicht und wandelt es immer um, daher als Screenshot eingefügt)
                Automatische Komplettlösungserkennung (TM).
                Zitat von nikosch
                Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

                Kommentar


                • #9
                  PHP-Code:
                  <?php
                  echo "<table border='1'>\n";
                  while(
                  $zeile $ergebnis->fetch_array()) {
                  ?>
                  <tr>
                      <td>
                          <?= htmlspecialchars($zeile['t_id']) ?>
                      </td>
                      <td>
                          <img src="pfade/zu/datei/<?= zeile['t_emblem'?>" /> 
                      </td>
                  </tr>
                  <?php
                  }
                  echo 
                  "</table>";
                  Ich würds in der Art schonmal angenehmer finden(Das innerhalb der Schleife). "<=?" = Kurzform von echo

                  Könntest aber auch z.B. dein HTML, bzw. den Output, in eine Variable laden und dann alles mit echo $deineVariable; alles ausgeben.
                  Kannst dir ja auch mal heredoc und nowdoc ansehen.
                  http://php.net/manual/de/language.types.string.php
                  http://rubphp.blogspot.de/2012/08/he...oc-in-php.html (Artiekel nicht gelesen, nur überflogen. Könnte Unsinn drinstehen.)

                  Edit: Noch zum echo
                  echo besitzt zusätzlich eine Syntax-Kurzform, Sie können also ein öffnendes PHP-Tag von einem Gleichheitszeichen gefolgt notieren. Diese Syntax-Kurzform funktioniert nur, wenn short_open_tag in der php.ini eingeschaltet ist.
                  http://de2.php.net/manual/de/function.echo.php
                  Relax, you're doing fine.
                  RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

                  Kommentar


                  • #10
                    Zitat von ViecFan Beitrag anzeigen
                    Habe in der Lösung von moma den "." und das "$" ergänzt und jetzt geht es! (trotzdem mit ein paar mal probieren, wo der Fehler nun gelegen ist)
                    sorry, war nen typo und keine absicht.

                    wie machen, wenn nicht mirt echo?
                    ein ansatz hat VPh gezeigt, komme damit nicht zurecht, leider.
                    dann gäbe es noch die möglichkeit einer template engine, wie twig oder smarty.
                    da werde ich mir auch mal näher anschauen, zur zeit nutze ich sowas auch nicht.

                    den output in eine variable zu schreiben, anstatt überall zu echoen (das meinte ich eigentlich) hat einige vorteile. da wäre es nicht die schlechteste idee die markup syntax des table von der datenbankabfrage zu lösen, falls man selben inhalt mal anders darstellen will oder so.

                    ich würde also sowas versuchen:

                    PHP-Code:

                    $spez 
                    =  array('t_emblem' => "<img src='/pfad/to/%s' />");

                    function 
                    resultToTable($result,  $spez) {
                       
                    $table "";
                       foreach(
                    $result as $key => $value){
                          
                    $table .= "<tr>";
                          if (isset(
                    $spez[$key])){
                              
                    $table .= sprintf($spez[$key], $value);
                              
                    $table .= "</tr>";
                               
                    next;
                          }
                         
                    $table .= $value;
                         
                    $table .= "</tr>";
                       }
                         return 
                    $table;
                    }

                     
                    $table "<table border = 1>";
                     while(
                    $zeile $ergebnis->fetch_array()) {
                        
                    $table .=  resultToTable($zeile,  $spez)
                     }
                      
                    $table ."</table>"
                    var_dump($table); 
                    scheint mir aber nicht gelungen, sicher hat da der eine oder andere ne bessere lösung.

                    Kommentar


                    • #11
                      Zitat von moma Beitrag anzeigen
                      sorry, war nen typo und keine absicht.
                      Das sollte auch in keiner Weise Kritik sein, sondern nur der Beweis wie nah Erfolg/Misserfolg beianander liegt! - wenn man dann im Syntax der Sprache nicht sattelfest ist, irrt man im "komma-wald" herum!
                      ein ansatz hat VPh gezeigt, komme damit nicht zurecht, leider.
                      für mich als Einsteiger, ist es wichtig, dass der Code halbwegs "lesbar" ist!
                      Die Kurzschreibweisen (egal in welcher Programmiersprache) sind dann interessant und sinnvoll, wenn man sattelfest und genug Erfahrung hat!
                      @Vhp wobei ich dich sehr gut verstehe, dass du hier jede Menge Verbesserungs-Potential siehst - ich nehme mir das zu Herzen und werde im Laufe der Zeit sicher darauf zurückgreifen!
                      dann gäbe es noch die möglichkeit einer template engine, wie twig oder smarty..
                      die App soll ein Custom-Module einer bestehenden Joomla-Komponente werden. Trotzdem will/wollte ich zuerst "out of the box" die Funktionalität entwickeln/testen um einfach die Materie zu verstehen!
                      den output in eine variable zu schreiben, anstatt überall zu echoen (das meinte ich eigentlich) hat einige vorteile. da wäre es nicht die schlechteste idee die markup syntax des table von der datenbankabfrage zu lösen, falls man selben inhalt mal anders darstellen will oder so.
                      das ist ein interessanter Ansatz, den ich versuchen werde umzusetzen.
                      PHP-Code:

                      $spez 
                      =  array('t_emblem' => "<img src='/pfad/to/%s' />");

                      function 
                      resultToTable($result,  $spez) {
                         
                      $table "";
                         foreach(
                      $result as $key => $value){
                            
                      $table .= "<tr>";
                            if (isset(
                      $spez[$key])){
                                
                      $table .= sprintf($spez[$key], $value);
                                
                      $table .= "</tr>";
                                 
                      next;
                            }
                           
                      $table .= $value;
                           
                      $table .= "</tr>";
                         }
                           return 
                      $table;
                      }

                       
                      $table "<table border = 1>";
                       while(
                      $zeile $ergebnis->fetch_array()) {
                          
                      $table .=  resultToTable($zeile,  $spez)
                       }
                        
                      $table ."</table>"
                      var_dump($table); 
                      scheint mir aber nicht gelungen, sicher hat da der eine oder andere ne bessere lösung.
                      werde ich in jeden Fall probieren!

                      Danke für deine Mühe mich zu unterstützen!

                      Kommentar


                      • #12
                        Zitat von VPh Beitrag anzeigen
                        Ich würds in der Art schonmal angenehmer finden(Das innerhalb der Schleife). "<=?" = Kurzform von echo
                        und du wirst es nicht glauben - ich habe das jetzt mal auf deine Art umgebaut! - warum? - weil es in "meiner" Version nicht möglich war, innerhalb der HTML-Tags direkt CSS-Klassen zu vergeben (zbsp. den ersten <td>Tag.
                        Wahrscheinlich hätte ich das über DOM lösen können (first child, etc.) - aber es scheint mir so einfacher.
                        Jetzt ist halt die Frage ob diese Funktion üblicherweise als Default in der PHP-INI der Provider gesetzt ist.....

                        Aber nochmals, ihr habt mit echt zu einem großen Sprung nach vorne verholfen, sowohl im Ergebnis als auch beim Wissenstand!

                        Kommentar


                        • #13
                          Seit PHP 5.4 funktioniert <=? immer, auch wenn die Short-Tags aus sind. Wenn du also eine halbwegs aktuelle PHP-Version einsetzt, sollte das keine Probleme machen.

                          Kommentar


                          • #14
                            Zitat von tkausl Beitrag anzeigen
                            Automatische Komplettlösungserkennung (TM).


                            Wobei es ja anscheinend in dem Fall sogar über das Problem des TE hinaus ging.

                            Kommentar

                            Lädt...
                            X