<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/language.variables.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'de',
  ),
  'this' => 
  array (
    0 => 'language.variables.external.php',
    1 => 'Variablen aus externen Quellen',
    2 => 'Variablen aus externen Quellen',
  ),
  'up' => 
  array (
    0 => 'language.variables.php',
    1 => 'Variablen',
  ),
  'prev' => 
  array (
    0 => 'language.variables.variable.php',
    1 => 'Variable Variablen',
  ),
  'next' => 
  array (
    0 => 'language.constants.php',
    1 => 'Konstanten',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'de',
    'path' => 'language/variables.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="language.variables.external" class="sect1">
   <h2 class="title">Variablen aus externen Quellen</h2>

   <div class="sect2" id="language.variables.external.form">
    <h3 class="title">HTML-Formulare (GET and POST)</h3>

    <p class="simpara">
     Sobald ein Formular an ein PHP-Skript übergeben wird, werden die
     Informationen dieses Formulars dem Skript automatisch zur Verfügung
     gestellt. Es gibt ein paar Möglichkeiten, auf diese Informationen
     zuzugreifen, zum Beispiel:
    </p>

    <p class="para">
     <div class="example" id="example-1">
      <p><strong>Beispiel #1 Ein einfaches HTML-Formular</strong></p>
      <div class="example-contents">
<div class="htmlcode"><pre class="htmlcode">&lt;form action=&quot;foo.php&quot; method=&quot;post&quot;&gt;
    Name:  &lt;input type=&quot;text&quot; name=&quot;username&quot; /&gt;&lt;br /&gt;
    E-Mail: &lt;input type=&quot;text&quot; name=&quot;email&quot; /&gt;&lt;br /&gt;
    &lt;input type=&quot;submit&quot; name=&quot;submit&quot; value=&quot;Und ab!&quot; /&gt;
&lt;/form&gt;</pre>
</div>
      </div>

     </div>
    </p>

    <p class="para">
     Es gibt nur zwei Möglichkeiten, um auf die Daten von HTML-Formularen
     zuzugreifen. Die zurzeit verfügbaren Methoden werden unten aufgeführt:
    </p>

    <p class="para">
     <div class="example" id="example-2">
      <p><strong>Beispiel #2 Zugriff auf die Daten eines einfachen HTML-POST-Formulars</strong></p>
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">$_POST</span><span style="color: #007700">[</span><span style="color: #DD0000">'username'</span><span style="color: #007700">];<br />echo </span><span style="color: #0000BB">$_REQUEST</span><span style="color: #007700">[</span><span style="color: #DD0000">'username'</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

     </div>
    </p>

    <p class="para">
     Die Verwendung eines GET-Formulars ist, davon abgesehen, dass stattdessen
     die entsprechende vordefinierte GET-Variable verwendet werden kann,
     ähnlich. Außerdem wird GET auch für den <code class="literal">QUERY_STRING</code>
     (die Information nach dem &#039;?&#039; in einer URL) verwendet. So enthält zum
     Beispiel <code class="literal">http://www.example.com/test.php?id=3</code>
     GET-Daten, auf die mit <var class="varname"><a href="reserved.variables.get.php" class="classname">$_GET['id']</a></var> zugegriffen werden
     kann. Siehe auch <var class="varname"><a href="reserved.variables.request.php" class="classname">$_REQUEST</a></var>.
    </p>

    <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
     <p class="para">
      Punkte und Leerzeichen in Variablennamen werden in Unterstriche
      umgewandelt. Zum Beispiel wird <code class="literal">&lt;input name=&quot;a.b&quot;
      /&gt;</code> zu <code class="literal">$_REQUEST[&quot;a_b&quot;]</code>.
     </p>
    </p></blockquote>

    <p class="simpara">
     Im Zusammenhang mit Formular-Variablen versteht PHP auch Arrays (siehe
     auch die <a href="faq.html.php" class="link">zugehörige FAQ</a>). So können z. B.
     zusammengehörige Variablen gruppiert werden, oder diese Funktionalität
     kann verwendet werden, um Werte aus einer Eingabe mit Mehrfachauswahl
     abzurufen. Schicken wir zum Beispiel ein Formular an sich selbst und
     lassen nach dem Versand die Daten anzeigen:
    </p>

    <p class="para">
     <div class="example" id="example-3">
      <p><strong>Beispiel #3 Komplexere Formular-Variablen</strong></p>
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">if (</span><span style="color: #0000BB">$_POST</span><span style="color: #007700">) {<br />    echo </span><span style="color: #DD0000">'&lt;pre&gt;'</span><span style="color: #007700">;<br />    echo </span><span style="color: #0000BB">htmlspecialchars</span><span style="color: #007700">(</span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$_POST</span><span style="color: #007700">, </span><span style="color: #0000BB">true</span><span style="color: #007700">));<br />    echo </span><span style="color: #DD0000">'&lt;/pre&gt;'</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?&gt;<br /></span>&lt;form action="" method="post"&gt;<br />    Name:  &lt;input type="text" name="personal[name]" /&gt;&lt;br /&gt;<br />    E-Mail: &lt;input type="text" name="personal[email]" /&gt;&lt;br /&gt;<br />    Bier: &lt;br /&gt;<br />    &lt;select multiple name="bier[]"&gt;<br />        &lt;option value="oettinger"&gt;Öttinger&lt;/option&gt;<br />        &lt;option value="bitburger"&gt;Bitburger&lt;/option&gt;<br />        &lt;option value="stuttgarter"&gt;Stuttgarter Schwabenbräu&lt;/option&gt;<br />    &lt;/select&gt;&lt;br /&gt;<br />    &lt;input type="submit" value="Und ab!" /&gt;<br />&lt;/form&gt;</span></code></div>
      </div>

     </div>
    </p>

    <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
     <span class="simpara">
      Beginnt der Name einer externen Variablen mit einer gültigen
      Array-Syntax, dann werden darauf folgende Zeichen stillschweigend
      ignoriert. Zum Beispiel wird
      <code class="literal">&lt;input name=&quot;foo[bar]baz&quot;&gt;</code> zu
      <code class="literal">$_REQUEST[&#039;foo&#039;][&#039;bar&#039;]</code>.
     </span>
    </p></blockquote>

    <div class="sect3" id="language.variables.external.form.submit">
     <h4 class="title">IMAGE-SUBMIT-Variablennamen</h4>

     <p class="simpara">
      Zur Übertragung eines Formulars kann auch ein Bild statt eines
      Übertragungs-Schalters (Submit-Button) verwendet werden, dessen Tag wie
      folgt aussieht:
     </p>

     <div class="informalexample">
      <div class="example-contents">
<div class="htmlcode"><pre class="htmlcode">&lt;input type=&quot;image&quot; src=&quot;image.gif&quot; name=&quot;sub&quot; /&gt;</pre>
</div>
      </div>

     </div>

     <p class="simpara">
      Klickt der Benutzer irgendwo auf das Bild, wird das entsprechende
      Formular an den Webserver übertragen. Hierbei sind zwei zusätzliche
      Variablen vorhanden, <var class="varname">sub_x</var> und
      <var class="varname">sub_y</var>. Diese enthalten die Koordinaten des
      Klickpunktes innerhalb des Bildes. Die Erfahreneren werden bemerken,
      dass die Variablen, die vom Browser gesendet werden, einen Punkt statt
      eines Unterstrichs enthalten. Dieser Punkt wird von PHP automatisch in
      einen Unterstrich verwandelt.
     </p>
    </div>

   </div>

   <div class="sect2" id="language.variables.external.cookies">
    <h3 class="title">HTTP-Cookies</h3>
    <p class="simpara">
     PHP unterstützt HTTP-Cookies auf völlig transparente Weise, wie in
     <a href="https://datatracker.ietf.org/doc/html/rfc6265" class="link external">&raquo;&nbsp;RFC 6265</a> definiert. Cookies sind
     ein Mechanismus zur Speicherung von Daten auf dem Client-Rechner, um
     damit wiederkehrende Benutzer nachzuverfolgen oder zu identifizieren. Mit
     der Funktion <span class="function"><a href="function.setcookie.php" class="function">setcookie()</a></span> ist es möglich, Cookies zu
     erzeugen. Cookies sind Teil des HTTP-Headers, deshalb muss die Funktion
     <span class="function"><a href="function.setcookie.php" class="function">setcookie()</a></span> aufgerufen werden, bevor irgendeine Ausgabe
     an den Browser gesendet wird. Dabei handelt es sich um die gleiche
     Einschränkung, die auch für die Funktion <span class="function"><a href="function.header.php" class="function">header()</a></span> gilt.
     Cookie-Daten stehen dann in den entsprechenden Cookie-Daten-Arrays, zum
     Beispiel <var class="varname"><a href="reserved.variables.cookies.php" class="classname">$_COOKIE</a></var>, sowie in
     <var class="varname"><a href="reserved.variables.request.php" class="classname">$_REQUEST</a></var> zur Verfügung. Weitere Details und Beispiele
     sind auf der Seite <span class="function"><a href="function.setcookie.php" class="function">setcookie()</a></span> des Handbuchs zu finden.
    </p>

    <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
     <span class="simpara">
      Aus Sicherheitsgründen werden ab PHP 7.2.34, 7.3.23 bzw. 7.4.11 die
      <em>Namen</em> der eingehenden Cookies nicht mehr
      URL-dekodiert.
     </span>
    </p></blockquote>

    <p class="simpara">
     Wenn einer einzelnen Cookie-Variablen mehrere Werte zugewiesen werden
     sollen, müssen diese als Array zugewiesen werden. Zum Beispiel:
    </p>
    <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />  setcookie</span><span style="color: #007700">(</span><span style="color: #DD0000">"MeinCookie[foo]"</span><span style="color: #007700">, </span><span style="color: #DD0000">'Ich teste 1'</span><span style="color: #007700">, </span><span style="color: #0000BB">time</span><span style="color: #007700">()+</span><span style="color: #0000BB">3600</span><span style="color: #007700">);<br />  </span><span style="color: #0000BB">setcookie</span><span style="color: #007700">(</span><span style="color: #DD0000">"MeinCookie[bar]"</span><span style="color: #007700">, </span><span style="color: #DD0000">'Ich teste 2'</span><span style="color: #007700">, </span><span style="color: #0000BB">time</span><span style="color: #007700">()+</span><span style="color: #0000BB">3600</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>

    <p class="simpara">
     Dadurch werden zwei einzelne Cookies erzeugt, obwohl
     <var class="varname">MyCookie</var> im Skript nun ein einziges Array ist. Wenn nur
     ein Cookie mit mehreren Werten gesetzt werden soll, empfiehlt es sich,
     zuerst <span class="function"><a href="function.serialize.php" class="function">serialize()</a></span> oder <span class="function"><a href="function.explode.php" class="function">explode()</a></span>
     auf das Array anzuwenden.
    </p>

    <p class="simpara">
     Es ist zu bedenken, dass ein Cookie ein vorhergehendes Cookie gleichen
     Namens im Browser überschreibt, es sei denn, der Pfad oder die Domain sind
     anders. Für eine Warenkorb-Anwendung kann somit z. B. ein Zähler mitgeführt
     und weitergegeben werden:
    </p>

    <div class="example" id="example-4">
     <p><strong>Beispiel #4 Ein <span class="function"><a href="function.setcookie.php" class="function">setcookie()</a></span>-Beispiel</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">if (isset(</span><span style="color: #0000BB">$_COOKIE</span><span style="color: #007700">[</span><span style="color: #DD0000">'zaehler'</span><span style="color: #007700">])) {<br />    </span><span style="color: #0000BB">$count </span><span style="color: #007700">= </span><span style="color: #0000BB">$_COOKIE</span><span style="color: #007700">[</span><span style="color: #DD0000">'zaehler'</span><span style="color: #007700">] + </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br />} else {<br />    </span><span style="color: #0000BB">$count </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">setcookie</span><span style="color: #007700">(</span><span style="color: #DD0000">'zaehler'</span><span style="color: #007700">, </span><span style="color: #0000BB">$count</span><span style="color: #007700">, </span><span style="color: #0000BB">time</span><span style="color: #007700">()+</span><span style="color: #0000BB">3600</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">setcookie</span><span style="color: #007700">(</span><span style="color: #DD0000">"Cart[</span><span style="color: #0000BB">$count</span><span style="color: #DD0000">]"</span><span style="color: #007700">, </span><span style="color: #0000BB">$item</span><span style="color: #007700">, </span><span style="color: #0000BB">time</span><span style="color: #007700">()+</span><span style="color: #0000BB">3600</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>

   </div>

   <div class="sect2" id="language.variables.external.dot-in-names">
    <h3 class="title">Punkte in eingehenden Variablennamen</h3>
    <p class="para">
     Normalerweise verändert PHP die Variablennamen nicht, wenn sie einem
     Skript übergeben werden. Es sollte aber beachtet werden, dass der Punkt
     (&quot;.&quot;) kein gültiger Bestandteil eines Variablennamens ist. Deshalb achten
     Sie auf folgendes:
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$varname</span><span style="color: #007700">.</span><span style="color: #0000BB">ext</span><span style="color: #007700">;  </span><span style="color: #FF8000">/* ungültiger Variablenname */<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

     Der PHP-Parser sieht eine Variable namens <var class="varname">$varname</var>,
     gefolgt von einem Zeichenketten-Verbindungsoperator, dieser wiederum
     gefolgt von der offenen Zeichenkette &#039;ext&#039; (also nicht eingegrenzt durch
     &#039;&quot;&#039; und auch keinem Schlüsselwort oder reserviertem Bezeichner
     entsprechend). Das kann natürlich nicht zum gewünschten Ergebnis führen.
    </p>

    <p class="para">
     Deshalb ist es wichtig zu wissen, dass PHP in den ihm übergebenen
     Variablen alle Punkte (.) automatisch durch einen Unterstrich (_)
     ersetzt.
    </p>

   </div>

   <div class="sect2" id="language.variables.determining-type-of">
    <h3 class="title">Bestimmung des Variablen-Typs</h3>

    <p class="para">
     Da PHP den Typ der Variablen bestimmt und (im Allgemeinen) selbst eine
     entsprechende Umformung vornimmt, ist es nicht immer klar, welchen Typ
     eine Variable gerade hat. PHP beinhaltet einige Funktionen, die dies
     herausfinden, wie zum Beispiel: <span class="function"><a href="function.gettype.php" class="function">gettype()</a></span>,
     <span class="function"><a href="function.is-array.php" class="function">is_array()</a></span>, <span class="function"><a href="function.is-float.php" class="function">is_float()</a></span>,
     <span class="function"><a href="function.is-int.php" class="function">is_int()</a></span>, <span class="function"><a href="function.is-object.php" class="function">is_object()</a></span> und
     <span class="function"><a href="function.is-string.php" class="function">is_string()</a></span>. Lesen Sie bitte auch das Kapitel über
     <a href="language.types.php" class="link">Typen</a>.
    </p>
    <p class="para">
     Da HTTP ein Text-Protokoll ist, werden die meisten, wenn nicht alle
     Inhalte von
     <a href="language.variables.superglobals.php" class="link">superglobalen Arrays</a>,
     wie <var class="varname"><a href="reserved.variables.post.php" class="classname">$_POST</a></var> und <var class="varname"><a href="reserved.variables.get.php" class="classname">$_GET</a></var>, als
     Zeichenketten erhalten bleiben. PHP wird nicht versuchen, die Werte in
     spezifische Typen umzuwandeln. Im Beispiel weiter unten enthält
     <var class="varname"><a href="reserved.variables.get.php" class="classname">$_GET["var1"]</a></var> die Zeichenkette &quot;null&quot; und
     <var class="varname"><a href="reserved.variables.get.php" class="classname">$_GET["var2"]</a></var> die Zeichenkette &quot;123&quot;.
     <div class="example-contents">
<div class="cdata"><pre>
/index.php?var1=null&amp;var2=123
</pre></div>
     </div>

    </p>
   </div>

   <div class="sect2" id="language.variables.external.changelog">
    <h3 class="title">Changelog</h3>

    <p class="para">
     <table class="doctable informaltable">
      
       <thead>
        <tr>
         <th>Version</th>
         <th>Beschreibung</th>
        </tr>

       </thead>

       <tbody class="tbody">
        <tr>
         <td>7.2.34, 7.3.23, 7.4.11</td>
         <td>
          Aus Sicherheitsgründen werden die <em>Namen</em> der
          eingehenden Cookies nicht mehr URL-dekodiert.
         </td>
        </tr>

       </tbody>
      
     </table>

    </p>
   </div>

  </div><?php manual_footer($setup); ?>