<?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 => 'pt_BR',
  ),
  'this' => 
  array (
    0 => 'language.variables.external.php',
    1 => 'Vari&aacute;veis de fontes externas',
    2 => 'Vari&aacute;veis de fontes externas',
  ),
  'up' => 
  array (
    0 => 'language.variables.php',
    1 => 'Vari&aacute;veis',
  ),
  'prev' => 
  array (
    0 => 'language.variables.variable.php',
    1 => 'Vari&aacute;veis vari&aacute;veis',
  ),
  'next' => 
  array (
    0 => 'language.constants.php',
    1 => 'Constantes',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'pt_BR',
    '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">Variáveis de fontes externas</h2>

   <div class="sect2" id="language.variables.external.form">
    <h3 class="title">Formulários HTML (GET e POST)</h3>

    <p class="simpara">
     Quando um formulário é submetido para um script PHP, a informação deste
     formulário estará automaticamente disponível para o script. Há
     algumas maneiras de acessar estas informações, por exemplo:
    </p>

    <p class="para">
     <div class="example" id="example-1">
      <p><strong>Exemplo #1 Um formulário HTML simples</strong></p>
      <div class="example-contents">
<div class="htmlcode"><pre class="htmlcode">&lt;form action=&quot;foo.php&quot; method=&quot;post&quot;&gt;
    Nome:  &lt;input type=&quot;text&quot; name=&quot;username&quot; /&gt;&lt;br /&gt;
    Email: &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;Me aperte!&quot; /&gt;
&lt;/form&gt;</pre>
</div>
      </div>

     </div>
    </p>

    <p class="para">
     Existem apenas duas formas de acessar dados de formulários HTML.
     Os métodos disponíveis atualmente são listadas a seguir:
    </p>

    <p class="para">
     <div class="example" id="example-2">
      <p><strong>Exemplo #2 Acessando dados de um formulário HTML via POST</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">
     Utilizar um formulário GET é similar, exceto que será utilizada a variável
     predefinida GET em seu lugar. GET também se aplica à variável
     <code class="literal">QUERY_STRING</code> (a informação depois do &#039;?&#039; numa URL). Então,
     por exemplo, <code class="literal">http://www.example.com/test.php?id=3</code>
     contém os dados GET que estarão acessíveis com <var class="varname"><a href="reserved.variables.get.php" class="classname">$_GET['id']</a></var>.
     Veja também <var class="varname"><a href="reserved.variables.request.php" class="classname">$_REQUEST</a></var>.
    </p>

    <blockquote class="note"><p><strong class="note">Nota</strong>: 
     <p class="para">
      Pontos e espaços em nomes de variáveis são convertidos para sublinhados. Por
      exemplo <code class="literal">&lt;input name=&quot;a.b&quot; /&gt;</code> se tornará
      <code class="literal">$_REQUEST[&quot;a_b&quot;]</code>.
     </p>
    </p></blockquote>

    <p class="simpara">
     O PHP também entende arrays no contexto de variáveis de formulário
     (veja essa <a href="faq.html.php" class="link">FAQ</a>). Pode-se,
     por exemplo, agrupar variáveis relacionadas, ou utilizar este
     recurso para obter valores de uma entrada de seleção múltipla. No exemplo
     abaixo, o formulário é enviado para si mesmo, e depois de submetido, os dados
     são mostrados:
    </p>

    <p class="para">
     <div class="example" id="example-3">
      <p><strong>Exemplo #3 Variáveis de formulários mais complexos</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 />    Nome:  &lt;input type="text" name="personal[name]" /&gt;&lt;br /&gt;<br />    Email: &lt;input type="text" name="personal[email]" /&gt;&lt;br /&gt;<br />    Cerveja: &lt;br /&gt;<br />    &lt;select multiple name="beer[]"&gt;<br />        &lt;option value="heineken"&gt;Heineken&lt;/option&gt;<br />        &lt;option value="stella"&gt;Stella Artois&lt;/option&gt;<br />        &lt;option value="av42"&gt;Double Rye Ipa&lt;/option&gt;<br />    &lt;/select&gt;&lt;br /&gt;<br />    &lt;input type="submit" value="Enviar dados!" /&gt;<br />&lt;/form&gt;</span></code></div>
      </div>

     </div>
    </p>

    <blockquote class="note"><p><strong class="note">Nota</strong>: 
     <span class="simpara">
      Se um nome de variável externa se parece com sintaxe de array válida, as letras
      finais são silenciosamente ignoradas. Por exemplo, <code class="literal">&lt;input name=&quot;foo[bar]baz&quot;&gt;</code>
      se torna <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">Nomes de variáveis SUBMIT IMAGE</h4>

     <p class="simpara">
      Ao submeter um formulário, é possível utilizar imagens em vez
      do botão de submissão padrão com uma tag do tipo:
     </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">
      Quando o usuário clicar em algum lugar da imagem, o formulário
      será transmitido para o servidor com duas variáveis
      adicionais, <var class="varname">sub_x</var> e <var class="varname">sub_y</var>.
      Elas contém as coordenadas do
      clique do usuário na imagem. Os mais experientes percebem que os
      nomes reais dessas variáveis enviadas ao navegador contêm um ponto
      ao invés de um sublinhado, mas o PHP converte o ponto para um
      sublinhado automaticamente.
     </p>
    </div>

   </div>

   <div class="sect2" id="language.variables.external.cookies">
    <h3 class="title">Cookies HTTP</h3>

    <p class="simpara">
     O PHP suporta transparentemente cookies HTTP como os definidos pela <a href="https://datatracker.ietf.org/doc/html/rfc6265" class="link external">&raquo;&nbsp;RFC 6265</a>. Cookies são um
     mecanismo o armazenamento de dados no navegador,
     rastreando e identificando o retorno de usuários. Você pode definir cookies com
     a função <span class="function"><a href="function.setcookie.php" class="function">setcookie()</a></span>. Cookies são parte do
     cabeçalho HTTP, então a função SetCookie precisa ser chamada antes
     de qualquer saída ser enviada ao navegador. Esta é a mesma restrição
     da função <span class="function"><a href="function.header.php" class="function">header()</a></span>. Dados de cookies
     estão disponíveis nos arrays de dados de cookies apropriados,
     como <var class="varname"><a href="reserved.variables.cookies.php" class="classname">$_COOKIE</a></var> e também em <var class="varname"><a href="reserved.variables.request.php" class="classname">$_REQUEST</a></var>.
     Veja o manual de <span class="function"><a href="function.setcookie.php" class="function">setcookie()</a></span> para mais detalhes e
     exemplos.
    </p>

    <blockquote class="note"><p><strong class="note">Nota</strong>: 
     <span class="simpara">
      A partir dos PHP 7.2.34, 7.3.23 e 7.4.11, respectivamente, os <em>nomes</em>
      dos cookies recebidos não são decodificados (a partir do formato URL) por razões de segurança.
     </span>
    </p></blockquote>

    <p class="simpara">
     Se a intenção for atribuir vários valores a uma única variável do cookie, deve-se
     atribuí-la como um array:
    </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">"MyCookie[foo]"</span><span style="color: #007700">, </span><span style="color: #DD0000">'Testing 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">"MyCookie[bar]"</span><span style="color: #007700">, </span><span style="color: #DD0000">'Testing 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">
     Isso criará dois cookies separados embora <var class="varname">MyCookie</var> será
     agora um único array no script. Se a intenção for definir apenas um cookie
     com vários valores, pode-se utilizar <span class="function"><a href="function.serialize.php" class="function">serialize()</a></span> ou
     <span class="function"><a href="function.explode.php" class="function">explode()</a></span> nos valores primeiro.
    </p>

    <p class="simpara">
     Note que um cookie substituirá um anterior com o mesmo
     nome no navegador, a menos que o caminho ou o domínio seja diferente. Portanto,
     para uma aplicação de carrinho de compras, pode-se manter um contador
     e repassá-lo:
    </p>

    <div class="example" id="example-4">
     <p><strong>Exemplo #4 Um exemplo de <span class="function"><a href="function.setcookie.php" class="function">setcookie()</a></span></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">'count'</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">'count'</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">'count'</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">Pontos em nomes de variáveis recebidas</h3>

    <p class="para">
     Normalmente o PHP não altera o nome de variáveis quando elas
     são passadas para um script. Entretanto, deve ser notado que o
     ponto (ponto final) não é um caractere válido em nome de
     variável do PHP. Para ilustrar o motivo, veja o seguinte exemplo:
     <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">/* nome de variável inválido */<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

     Dessa forma, o interpretador entende isso como uma variável com nome de
     <var class="varname">$varname</var>, seguida do operador de concatenação
     de strings, seguida de uma string crua (uma string não delimitada que
     não bate com nenhuma palavra-chave ou reservada) &#039;ext&#039;. Obviamente,
     isso não tem os resultados pretendidos.
    </p>

    <p class="para">
     Nessa situação, é importante notar que o PHP
     substituirá automaticamente qualquer ponto nos nomes de variáveis recebidas por
     sublinhados.
    </p>

   </div>

   <div class="sect2" id="language.variables.determining-type-of">
    <h3 class="title">Determinando o tipo das variáveis</h3>

    <p class="para">
     Como o PHP determina os tipos de variáveis e faz conversões
     (geralmente) quando necessário, nem sempre é óbvio o tipo de uma variável
     em cada momento. O PHP inclui várias funções
     que permitem determinar qual o tipo de uma variável, por exemplo:
     <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>,e
     <span class="function"><a href="function.is-string.php" class="function">is_string()</a></span>. Veja também o capítulo sobre
     <a href="language.types.php" class="link">Tipos</a>.
    </p>
    <p class="para">
     Pelo fato do HTTP ser um protocolo de texto, a maioria, se não todo o conteúdo presente nos
     <a href="language.variables.superglobals.php" class="link">arrays superglobais</a>
     como <var class="varname"><a href="reserved.variables.post.php" class="classname">$_POST</a></var> e <var class="varname"><a href="reserved.variables.get.php" class="classname">$_GET</a></var> permanecerão
     como strings. O PHP não tentará converter valores para um tipo específico.
     No exemplo abaixo, <var class="varname"><a href="reserved.variables.get.php" class="classname">$_GET["var1"]</a></var> conterá a
     string &quot;null&quot; e <var class="varname"><a href="reserved.variables.get.php" class="classname">$_GET["var2"]</a></var> conterá a string &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">Registro de Alterações</h3>

    <p class="para">
     <table class="doctable informaltable">
      
       <thead>
        <tr>
         <th>Versão</th>
         <th>Descrição</th>
        </tr>

       </thead>

       <tbody class="tbody">
        <tr>
         <td>7.2.34, 7.3.23, 7.4.11</td>
         <td>
          Os <em>nomes</em> dos cookies recebidos não são mais decodificados (a partir do formato URL)
          por razões de segurança.
         </td>
        </tr>

       </tbody>
      
     </table>

    </p>
   </div>

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