Mike: PHP - aus zwei Variablen eine Variable zusammensetzen

[edit 20190816, Betreff korrigiert]

Hallo in die Runde!

Ich brüte über einem Problem, das ich nicht lösen kann. Ich habe ein umfangreiches Formular, wobei die einzelnen Werte durch Variablen zusammengesetzt werden.

name="'.$daten['id'].'-'.$i.'" 

jetzt möchte ich nach Absenden des Forumlars diesen Wert, falls vorhanden wieder an die richtige Stelle einfügen, also mit VALUE=''

Der Wert ist dann zum Beispiel in dieser Variable

$_POST['1-1']

jetzt versuche ich dies aus meine beiden Variablen zusammenzusetzen

also aus $daten['id'] und $i

$_POST[$daten['id']-$i]

aber leider geh das nicht so wie ich es mir gedacht habe.

  1. Tach!

    Der Wert ist dann zum Beispiel in dieser Variable

    $_POST['1-1']
    

    Das ist ein String als Key.

    jetzt versuche ich dies aus meine beiden Variablen zusammenzusetzen

    also aus $daten['id'] und $i

    $_POST[$daten['id']-$i]
    

    aber leider geh das nicht so wie ich es mir gedacht habe.

    Weil das eine Subtraktion ist und kein String. Du musst das hier genauso machen wie du das in deinem ersten Code-Stück gemacht hast.

    dedlfix.

    1. Meinst du so?

      value="'.$_POST[$daten['id']"-"$i].'"
      

      aber das geht irgendwie nicht.

      so geht es

      $variable = $daten['id'].'-'.$i;
      
      
      value="'.$_POST[$variable].'"
      

      aber ich würde es lieber in der POST Variable zusammensetzen

      1. Hallo Mike,

        value="'.$_POST[$daten['id']"-"$i].'"
        

        Das ist immer noch eine Subtraktion.

        Bis demnächst
        Matthias

        --
        Pantoffeltierchen haben keine Hobbys.
        ¯\_(ツ)_/¯
        1. Hallo Matthias,

          value="'.$_POST[$daten['id']"-"$i].'"
          

          Das ist immer noch eine Subtraktion.

          Nein. Das ist ein Syntax-Fehler.

          Mike, mache es genau so, wie du es in dem Fall mit $variable machst:

          value="' . $_POST[$daten['id'] . "-" . $i] . '"
          

          LG,
          CK

          1. Dann war ja mein Ansatz gar nicht mal so schlecht, nur schlampig in der Ausführung.

            Super Danke

      2. Tach!

        Meinst du so?

        value="'.$_POST[$daten['id']"-"$i].'"
        

        Ja, aber syntaktisch richtig muss es schon sein. Da fehlen die Punkte als Stringverknüpfungsoperator.

        $variable = $daten['id'].'-'.$i;
        

        aber ich würde es lieber in der POST Variable zusammensetzen

        Hier hast du die Punkte richtig notiert.

        dedlfix.

  2. Lieber Mike,

    ergänzend zu den Vorschlägen der anderen möchte ich Dir für das Verknüpfen von String-Werten noch die Funktion sprintf ans Herz legen. Ich finde, dass sich manches dann besser im Quelltext liest und auch die Syntax mit den Punkten nicht mehr stört.

    Ein Beispiel:

    $html = sprintf(
      '<p><label>Theme <input name="theme" value="%2$s"></label></p>'
      . '<p><label>Benutzername <input name="user" value="%1$s"></label></p>',
      htmlspecialchars($_POST['user']),
      htmlspecialchars($_POST['theme'])
    );
    

    Ich finde, dass man den HTML-Code in seinem Zusammenhang deutlich besser lesen kann, da nur noch (nummerierte!) Platzhalter darin stehen. Außerdem sieht man, dass die Daten aus $_POST in korrekter Weise ihrem Kontext nach behandelt werden, ehe sie in den HTML-Code eingebettet werden.

    Liebe Grüße

    Felix Riesterer

    1. Tach!

      ergänzend zu den Vorschlägen der anderen möchte ich Dir für das Verknüpfen von String-Werten noch die Funktion sprintf ans Herz legen. Ich finde, dass sich manches dann besser im Quelltext liest und auch die Syntax mit den Punkten nicht mehr stört.

      Ein Beispiel:

      $html = sprintf(
        '<p><label>Theme <input name="theme" value="%2$s"></label></p>'
        . '<p><label>Benutzername <input name="user" value="%1$s"></label></p>',
        htmlspecialchars($_POST['user']),
        htmlspecialchars($_POST['theme'])
      );
      

      Alternativer Vorschlag: HTML nicht in einem String notieren, sondern außerhalb von PHP. Das können die meisten Editoren dann auch als HTML erkennen und dafür Unterstützung bieten. Code in Strings hingegen ist oft nur unspezifischer Text.

      ?>
      <p>
        <label>Theme <input name="theme" value="<?=htmlspecialchars($_POST['theme'])>"></label>
      </p>
      <p>
        <label>Benutzername <input name="user" value="<?=htmlspecialchars($_POST['user'])>"></label>
      </p>
      ___PHP0___

      (Die letzte Zeile hat die Forumssoftware auf dem Gewissen, ich hab da <?php notiert.)

      dedlfix.

      1. Lieber dedlfix,

        Alternativer Vorschlag: HTML nicht in einem String notieren, sondern außerhalb von PHP.

        ich kann jetzt nicht beurteilen, ob das dem OP schon hilft, oder noch überfordert. Aber ja, wenn man HTML als HTML schreibt, ist es in meinen Augen besser, echte HTML-Dateien als Vorlagen zu verwenden.

        Das können die meisten Editoren dann auch als HTML erkennen und dafür Unterstützung bieten. Code in Strings hingegen ist oft nur unspezifischer Text.

        Richtig.

        Liebe Grüße

        Felix Riesterer