Simone: PHP Varibalen aussem String mit echo anzeigen

Hallo ich habe folgendes Problem ich habe ein String der $table_td heißt in dem wiederum Variablen stehen wie z.B: $var_ansprechpartner oder $var_vorname etc. In denen auch wirklich Werte drin stehen ich habe es getestet.
Also wenn ich nun den String $table_td mit echo ausgebe dann wird $var_ansprechpartner oder $var_vorname etc. nicht angezeigt! Aber warum? Ich versteh das nicht? Was mache ich falsch oder wie lautet die richtige Lösung? Gruß Simone

$table_td = "
  <tr>
   <td class='table_data'>
    <strong><a href='vorschau.php?id=$var_ansprechpartner'>
    <img src='img/vorschau-frame.gif' width='12' height='13' border='0'>$var_ansprechpartner</a></strong>
   </td>
   <td class='table_data'><a href='$var_vorname'>$var_vorname</a></td>
   <td class='table_data'><a href='$var_nachname'>$var_nachname</a></td>
   <td class='table_data'><a href='$var_ort'>$var_ort</a></td>
   <td class='table_data-trans'><a href='ansprechpartner_editieren.php?id=$id'><img src='./img/edit.gif' editieren' width='20' height='22' border='0'></a></td>
  </tr>
 ";

////

echo $table_td;

  1. probier es mit:
    (' durch " ersetzen)
    (".$var.")

    $table_td = "<tr>";
    $table_td .= "<td class="\table_data=">";
    $table_td .= "<strong><a href="\vorschau.php?id=".$var_ansprechpartner."">";
    $table_td .= "<img src="\img/vorschau-frame.gif"\ width="\12"\ height="\13"\ border="\0">".$var_ansprechpartner."</a></strong>";
    $table_td .= "</td>";
    $table_td .= "<td class="\table_data"><a href="".$var_vorname."">".$var_vorname."</a></td>";
    $table_td .= "<td class="\table_data"><a href="".$var_nachname."">".$var_nachname."</a></td>";
    $table_td .= "<td class="\table_data"><a href="".$var_ort."">".$var_ort."</a></td>";
    $table_td .= "<td class="\table_data-trans"><a href="\ansprechpartner_editieren.php?id=".$id.""><img src="./img/edit.gif"\ editieren width="\20"\ height="\22"\ border="\0"></a></td>";
    $table_td .= "<tr>";

    ciao, markus

    1. probier es mit:
      (' durch " ersetzen)
      (".$var.")

      ciao, markus

      Hallo Markus da deine schreibweise etwas falsch ist aber davon abgesehen wenn ich es korregiere geht es auch nicht.

      Die Variable wie schon gesagt vor der echo Ausgabe definiert.

      Das mit den CSS mit den ID habe ich noch nicht richtig verstanden daswegen mache ich es bisher so.

      1. So inziwschen habe ich den Fehler gefunden und zwar habe ich folgendes gemacht oben im Script habe ich diesen String erzeugt und erst in einer While Schlife wurde der String aufgerufen aber so wie es mir scheint wird in der While Schleife die Varibale nicht dem String übergeben wo meine $var_ Varibale drin stehen.

        Wobei ich über dem echo Aufruf jede Variable definiert habe.

        1. Hello Simone,

          das habe ich früher immer mit SQL-Strings gemacht. Habe die brav definiert und dann im Script ein paarmal aufgerufen und mich gewundert, dass nix vernünftiges rauskam...

          Da hilft nur eins: Pack die Definition in eine Funktion:

          function make_table_td($data)
          {
            extract($data);

          $table = "
             <tr>
             <td class='table_data'>
              <strong><a href='vorschau.php?id=$var_ansprechpartner'>
              <img src='img/vorschau-frame.gif' width='12' height='13' border='0'>$var_ansprechpartner</a></strong>
             </td>
             <td class='table_data'><a href='$var_vorname'>$var_vorname</a></td>
             <td class='table_data'><a href='$var_nachname'>$var_nachname</a></td>
             <td class='table_data'><a href='$var_ort'>$var_ort</a></td>
             <td class='table_data-trans'><a href='ansprechpartner_editieren.php?id=$id'><img src='./img/edit.gif' editieren' width='20' height='22' border='0'></a></td>
            </tr>
           ";

          return $table;
          }

          Ich habe hier mal als Anregung extract() reingeschrieben. Wenn Du das Array $data vorher brav mit den passenden Displacements (Variablen-Anteile des Arrays) gefüllt hast, reicht diese eine Zeile um auf einfache Referenzen zurückzukommen...

          Liebe Grüße aus http://www.braunschweig.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          1. Da hilft nur eins: Pack die Definition in eine Funktion:

            function make_table_td($data)
            {
              extract($data);

            $table = "
               <tr>
               <td class='table_data'>
                <strong><a href='vorschau.php?id=$var_ansprechpartner'>
                <img src='img/vorschau-frame.gif' width='12' height='13' border='0'>$var_ansprechpartner</a></strong>
               </td>
               <td class='table_data'><a href='$var_vorname'>$var_vorname</a></td>
               <td class='table_data'><a href='$var_nachname'>$var_nachname</a></td>
               <td class='table_data'><a href='$var_ort'>$var_ort</a></td>
               <td class='table_data-trans'><a href='ansprechpartner_editieren.php?id=$id'><img src='./img/edit.gif' editieren' width='20' height='22' border='0'></a></td>
              </tr>
             ";

            return $table;
            }

            Hallo

            aber wenn ich nun die Funktion mit make_table_td($data); aufrufe kommen nur Fehler...

            Ich verstehe auch nicht was ich mit extract machen soll? Ich habe mir zwar die Definition durchgelesen aber ich verstehe es trotzdem nicht wozu ich das hier brauche?

            Gruß Simone

            1. Hello,

              aber wenn ich nun die Funktion mit make_table_td($data); aufrufe kommen nur Fehler...

              Was für Fehler kommen denn? Bitte mehr Input! Ich kann deine Webcam im Moment gerade nicht fernsteuern. Sorry ;-)

              Ich verstehe auch nicht was ich mit extract machen soll? Ich habe mir zwar die Definition durchgelesen aber ich verstehe es trotzdem nicht wozu ich das hier brauche?

              Du sollst damit gar nichts machen. Das macht die Funktion (hoffentlich) für Dich:

              $data=Array();
              $data["var_ansprechpartner"] = "ich";
              $data["var_vorname"] = "Paul";
              $data["...."] ....

              echo make_table_td($data);

              Man sollte zusammengehörige Daten immer in Arrays binden. Die lassen sich dann nämlich ganz bequem mit Schleifenfunktionen handhaben.

              foreach()
              extract()
              strip()  ist selbstgeschrieben und entfernt rekursiv alle \ array_map()
              serialize()
              ...

              Und immer an die Tabellenbindung denken dabei. Wenn man die Displacementbezeichner (das sind die Namen in den []) gleichnamig mit denen in der Tabelle oder datei macht, kann man wunderbar jonglieren. Das ganze Datenhandling kostet dann  ur noch wenige Zeilen.

              Ich sdchreibe keine Meterlangen Inserts oder Updates mehr *gg*

              Liebe Grüße aus http://www.braunschweig.de

              Tom

              --
              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
              1. Ich verstehe auch nicht was ich mit extract machen soll? Ich habe mir zwar die Definition durchgelesen aber ich verstehe es trotzdem nicht wozu ich das hier brauche?

                Du sollst damit gar nichts machen. Das macht die Funktion (hoffentlich) für Dich:

                $data=Array();
                $data["var_ansprechpartner"] = "ich";
                $data["var_vorname"] = "Paul";
                $data["...."] ....

                echo make_table_td($data);

                Man sollte zusammengehörige Daten immer in Arrays binden. Die lassen sich dann nämlich ganz bequem mit Schleifenfunktionen handhaben.

                foreach()
                extract()
                strip()  ist selbstgeschrieben und entfernt rekursiv alle \ array_map()
                serialize()
                ...

                Ich versuche schon immer es einfacher zumachen aber das geht nur Stück für Stück...

                Also als Fehlermeldung bekomme ich folgendes:

                Warning: extract() expects first argument to be an array in /var/www/wgs/script/ansprechpartner/edit-site.php on line 59

                In Zeile 59 steht folgendes:

                extract($data);

                Mir sagt das nun gar nichts da ich es immer noch nicht wirklich verstanden habe... :-(

                1. Hello,

                  01  $data=Array();
                  02  $data["var_ansprechpartner"] = "ich";
                  03  $data["var_vorname"] = "Paul";
                  04  $data["...."] ....
                  05
                  06  echo make_table_td($data);

                  Also als Fehlermeldung bekomme ich folgendes:

                  Warning: extract() expects first argument to be an array in /var/www/wgs/script/ansprechpartner/edit-site.php on line 59

                  Mir sagt das nun gar nichts da ich es immer noch nicht wirklich verstanden habe... :-(

                  Dann mach doch einfach genau das, was ich Dir hingeschrieben habe:

                  Schreib die Zeile 01 ab
                  Schreib die Zeile 02 ab
                  schreib die Zeile 03 ab
                  überleg Dir, wie es wohl weitergehen mag und machs fertig...
                  schreib die Zeile 06 ab.

                  Starte das Script nochmal

                  Dann sag mir, welche Fehlermeldung es gegeben hat.

                  Liebe Grüße aus http://www.braunschweig.de

                  Tom

                  --
                  Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
              2. Ah ich habe es nun verstanden aber wieso ich nun bei dem Funktionaufruf echo vorschreiben muß verstehe ich nicht wirklich das habe ich sonstso nie gemacht oder habe auch nicht gedacht das es gehen würde....

                echo make_table_td($data);

                Also ist var_ansprechpartner = die Variable $var_ansprechpartner
                und wenn ich das Array wieder auslese spreche ich var_ansprechpartner mit $var_ansprechpartner an? Richtig?

                $data["var_ansprechpartner"] = $var_ansprechpartner;

                Also gehe davon aus das geht nur mit assoc... Array?

                Gruß Simone

                1. Hello,

                  Ah ich habe es nun verstanden aber wieso ich nun bei dem Funktionaufruf echo vorschreiben muß verstehe ich nicht wirklich das habe ich sonstso nie gemacht oder habe auch nicht gedacht das es gehen würde....

                  echo make_table_td($data);

                  ... weil die Funktion eine Reisenvariable zusammenbaut mit allen Zeilenumbrüchen und Breaks und Tags und Werten und dann mittels der return-Anweisung als Funktionsergebnis zurückgibt. Du kannst das Ergebnis auch in eine andere Variable umstapeln und dann ausgeben:

                  $text = make_table_id($data);
                  echo $text";

                  Ich habe mir da gewisse Konventionen angewöhnt:

                  Funktionen, die direkt ausgeben fangen mit "put_" an
                  Funktionen, die einen HTML-String erzeugen, fangen mit "make_" an
                  Funktionen, die Werte ermitteln (z.B. aus DBs) fangen mit "get_" an
                  Funktionen, die Werte wegschreiben in DBs fangen mit "save_" an.

                  Das kann man natürlich so machen, wie man will. Aber es hat sich als äußerst praktisch erwiesen.

                  Also ist var_ansprechpartner = die Variable $var_ansprechpartner
                  und wenn ich das Array wieder auslese spreche ich var_ansprechpartner mit $var_ansprechpartner an? Richtig?

                  $data["var_ansprechpartner"] = $var_ansprechpartner;

                  Das stimmt soweit.

                  Also gehe davon aus das geht nur mit assoc... Array?

                  Das habe ich noch nie ausprobiert. Aber ich könnte mir vorstellen, dass extract() mit der Prefix-Option in der Lage ist, auch indizierte Arrays auszupacken

                  übrigens verpackt man mit compact() seine Variablen in ein Array.

                  Aber da Du ja in Zukunft gar keine "losen" Variablen mehr im Script anlegen wirst, mit Ausnahme von vielleicht Zählern ($i, $j, $k) und sowas... ;-)))
                  Da brauchst Du compact() gar nicht. Aber extract ist sehr praktisch, weil man sich damit (in Funktionen) viel Tipparbeit sparen kann. Schau Dir nochmal die Prefix-Option an.

                  Weißt Du eigentlich auch, dass man Arrays direk teinander zuweisen kann, dass Du auch Teilarrays eines größeren in kleine Arrays kopieren kannst durch Zuweisung, dass man Arrays auch addieren kann ->

                  $gesamt = $teil1 + $teil2;

                  Oder:

                  <?php   #### datenstrukturen.php ###

                  $person = array();
                  $adresse = array();
                  $namen = array();

                  $adresse["strasse"]="SelfHTML-Weg";
                  $adresse["ort"]="Internetzingen";

                  $namen["vorname"] = "Thomas";
                  $namen["nachname"] = "Fischer";

                  $person["adresse"] = $adresse;
                  $person["namen"] = $namen;

                  #Und das kann man sich dann zum debug bequem ausgeben:

                  echo "<pre>";
                  print_r($person);
                  echo "</pre>";

                  ?>

                  Und wenn man nun seine Formulare in HTML geschickt aufbaut, geht fast alles automatisch:

                  <input type="text" name="data[vorname]" ....>
                  aber:
                  <input type="submit" name="btn[speichern]" ....>

                  Dann schau Dir mal nach dem Post (submit)

                  echo "<pre>";
                  print_r($_POST);
                  echo "</pre>";

                  an.
                  Alle zu speichernden Daten sind dann in
                    $_POST["data"]["vorname"]
                    $_POST["data"]["name"]
                    ...

                  und die Buttons und Entscheidungen sind in ...["btn"]...
                  Die willst Du ja nicht abspeichern.
                  Radios und Checkboxen und Selects können in beiden Gruppen stehen, jenachdem, ob man damit Entscheidungen treffen will, oder die Auswahl abspeichern will.

                  Ich denke, das reicht für heute - oder?

                  Liebe Grüße aus http://www.braunschweig.de

                  Tom

                  --
                  Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                  1. Hallo Tom,

                    das waren mal wieder eine Masse Informationen die ich erstmal verdauen muß.

                    Ich schaue mir gerne was von anderen Leuten ab wie man was besser, kürzer oder einfacher schreiben kann.

                    Aber ich sage es mal so man fängt erstmal klein an und ist erstmal froh es erstmal zum laufen bekommen zuhaben zum Schluß wenn alles fertig ist merkt man das man es besser anders programmiert hätte...

                    Aber nur durch ausprobieren merkt man wie was funktioniert.

                    Ich sage erstmal besten Dank nun werde ich erstmal weiter coden...

                    Gruß Simone

    2. hi,
      sorry - habs nur in der formarea gemacht.
      jetzt ist es mit Editor 100%ig richtig!!!

      $table_td = "<tr>";
      $table_td .= "<td class="table_data=">";
      $table_td .= "<strong><a href="vorschau.php?id=".$var_ansprechpartner."">";
      $table_td .= "<img src="img/vorschau-frame.gif" width="12" height="13" border="0">".$var_ansprechpartner."</a></strong>";
      $table_td .= "</td>";
      $table_td .= "<td class="table_data"><a href="".$var_vorname."">".$var_vorname."</a></td>";
      $table_td .= "<td class="table_data"><a href="".$var_nachname."">".$var_nachname."</a></td>";
      $table_td .= "<td class="table_data"><a href="".$var_ort."">".$var_ort."</a></td>";
      $table_td .= "<td class="table_data-trans"><a href="ansprechpartner_editieren.php?id=".$id.""><img src="./img/edit.gif" width="20" height="22" border="0"></a></td>";
      $table_td .= "<tr>";

      wenns so nicht geht, liegt es sicher an deinen variablen!

      ciao,
      markus

  2. Hallo Simone,

    Auf den ersten Blick kann ich nichts verdaechtiges entdecken.

    Ich selbst verwende nie Strings, die ueber mehrere Zeilen gehen.
    Es ist aber durchaus erlaubt.
    Dafuer koennte man uebrigens auch die HEREDOC-Syntax verwenden:
    http://www.php.net/manual/de/language.types.string.php#language.types.string.syntax.heredoc

    Zwei Fragen:

    • sind die uebrigen Variablen zu dem Zeitpunkt bereits definiert,
        wo Du $table_td definierst?
    • stehen gewisse Dinge in Funktionen?

    Gruesse,

    Thomas

    P.S.
    Zum HTML: Das  class='table_data' in jeder einzelnen Zelle
    ist hoechstwahrscheinlich ueberfluessig. Vermutlich
    reicht es, der Tabelle eine Klasse oder ID zu geben,
    und dann mit Verschachtelungs-Selektoren zu arbeiten.