<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/faq.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'pt_BR',
  ),
  'this' => 
  array (
    0 => 'faq.html.php',
    1 => 'PHP e HTML',
    2 => 'PHP e HTML',
  ),
  'up' => 
  array (
    0 => 'faq.php',
    1 => 'FAQ',
  ),
  'prev' => 
  array (
    0 => 'faq.passwords.php',
    1 => 'Hash de senhas',
  ),
  'next' => 
  array (
    0 => 'faq.com.php',
    1 => 'PHP e COM',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'pt_BR',
    'path' => 'faq/html.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="faq.html" class="chapter">
  <h1 class="title">PHP e HTML</h1>

  

  <p class="para">
   PHP e HTML possuem muita interação: PHP pode gerar HTML, e o HTML
   pode passar informações para o PHP. Antes de ler esses faqs, é importante
   que você aprenda como recuperar <a href="language.variables.external.php" class="link">
   variáveis de fontes externas</a>. A página do manual
   neste tópico inclui muitos exemplos.
  </p>

  <div class="qandaset"><ol class="qandaset_questions"><li><a href="#faq.html.encoding">
     
      Que codifica&ccedil;&atilde;o/decodifica&ccedil;&atilde;o &eacute; preciso quando eu passo um valor atrav&eacute;s de um formul&aacute;rio/URL?
     
    </a></li><li><a href="#faq.html.form-image">
     
      Estou tentando usar uma tag &lt;input type=&quot;image&quot;&gt;, mas as vari&aacute;veis
      $foo.x e $foo.y n&atilde;o est&atilde;o
      dispon&iacute;veis. $_GET[&#039;foo.x&#039;] n&atilde;o existem
      tamb&eacute;m. Onde elas est&atilde;o?
     
    </a></li><li><a href="#faq.html.arrays">
     Como eu crio arrays em um HTML &lt;form&gt;?
    </a></li><li><a href="#faq.html.select-multiple">
     
      Como eu fa&ccedil;o para obter os resultados de uma m&uacute;ltipla sele&ccedil;&atilde;o de uma tag HTML?
     
    </a></li><li><a href="#faq.html.javascript-variable">
     
      Como eu posso passar uma vari&aacute;vel do Javascript para o PHP?
     
    </a></li></ol></div>
   <dl class="qandaentry" id="faq.html.encoding">
    <dt><strong>
     
      Que codificação/decodificação é preciso quando eu passo um valor através de um formulário/URL?
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Existem muitos estágios para o qual a codificação é importante. Assumindo que
      você tenha uma <span class="type"><a href="language.types.string.php" class="type string">string</a></span> <var class="varname">$data</var>, o qual contém
      a string que você quer passar de um jeito não codificado, esses são os
      estágios relevantes:
      <ul class="itemizedlist">
       <li class="listitem">
        <p class="para">
         Interpretação HTML. A fim de especificar uma string aleatória, você
         <em>precisa</em> incluí-la entre aspas, e converter todo o valor dos caracteres especiais para a realidade HTML usando
         <span class="function"><a href="function.htmlspecialchars.php" class="function">htmlspecialchars()</a></span>.
        </p>
       </li>
       <li class="listitem">
        <p class="para">
         URL: Uma URL consiste de diversas partes. Se você quer que seus dados sejam
         interpretados como um item, você <em>precisa</em> codificá-los com
         <span class="function"><a href="function.urlencode.php" class="function">urlencode()</a></span>.
        </p>
       </li>
      </ul>
     </p>
     <p class="para">
      <div class="example" id="example-1">
       <p><strong>Exemplo #1 Um elemento oculto de formulário HTML </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: #DD0000">"&lt;input type='hidden' value='" </span><span style="color: #007700">. </span><span style="color: #0000BB">htmlspecialchars</span><span style="color: #007700">(</span><span style="color: #0000BB">$data</span><span style="color: #007700">) . </span><span style="color: #DD0000">"' /&gt;\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
        </div>

      </div>
      <blockquote class="note"><p><strong class="note">Nota</strong>: 
       <span class="simpara">
        É errado usar <span class="function"><a href="function.urlencode.php" class="function">urlencode()</a></span> com
        <var class="varname">$data</var>, porque é a responsabilidade do navegador fazer a função de
        <span class="function"><a href="function.urlencode.php" class="function">urlencode()</a></span> nos dados. Todos os navegadores populares fazem isso
        corretamente. Observe que isso acontecerá independentemente do método (ou seja,
        GET ou POST). Mesmo assim, isso só será notado em caso de solicitação GET,
        porque as requisições POST normalmente são escondidas.
       </span>
      </p></blockquote>
      <div class="example" id="example-2">
       <p><strong>Exemplo #2 Dados a serem editados pelo usuário</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: #DD0000">"&lt;textarea name='mydata'&gt;\n"</span><span style="color: #007700">;<br />    echo </span><span style="color: #0000BB">htmlspecialchars</span><span style="color: #007700">(</span><span style="color: #0000BB">$data</span><span style="color: #007700">).</span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />    echo </span><span style="color: #DD0000">"&lt;/textarea&gt;"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
        </div>

      </div>
      <blockquote class="note"><p><strong class="note">Nota</strong>: 
       <span class="simpara">
        Os dados são mostrados no navegador como pretendido, porque o navegador irá
        interpretar os símbolos de escape do HTML.
       </span>
       <span class="simpara">
        Em consequência do envio, tanto via GET como POST, os dados vão ser urlencoded
        pelo navegador para transferência, e urldecoded diretamente pelo PHP. Resumindo,
        você não precisa fazer qualquer urlencoded/urldecoded pelo php,
        tudo é feito automaticamente.
       </span>
      </p></blockquote>
      <div class="example" id="example-3">
       <p><strong>Exemplo #3 Em uma URL</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: #DD0000">"&lt;a href='" </span><span style="color: #007700">. </span><span style="color: #0000BB">htmlspecialchars</span><span style="color: #007700">(</span><span style="color: #DD0000">"/nextpage.php?stage=23&amp;data=" </span><span style="color: #007700">.<br />        </span><span style="color: #0000BB">urlencode</span><span style="color: #007700">(</span><span style="color: #0000BB">$data</span><span style="color: #007700">)) . </span><span style="color: #DD0000">"'&gt;\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
        </div>

      </div>
      <blockquote class="note"><p><strong class="note">Nota</strong>: 
       <span class="simpara">
        De fato você está fingindo uma requisição HTML GET, portanto é necessário
        <span class="function"><a href="function.urlencode.php" class="function">urlencode()</a></span> os dados manualmente.
       </span>
      </p></blockquote>
      <blockquote class="note"><p><strong class="note">Nota</strong>: 
       <span class="simpara">
        Você precisa <span class="function"><a href="function.htmlspecialchars.php" class="function">htmlspecialchars()</a></span> toda a URL, porque a
        URL ocorre como um valor de um atributo-HTML. Neste caso, o navegador
        irá primeiramente un-<span class="function"><a href="function.htmlspecialchars.php" class="function">htmlspecialchars()</a></span> o valor, e então passar
        a URL. O PHP vai entender a URL corretamente, porque você codificou os dados com
        <span class="function"><a href="function.urlencode.php" class="function">urlencode()</a></span>.
       </span>
       <span class="simpara">
        Você vai notar que <code class="literal">&amp;</code> na URL é substituído
        por <code class="literal">&amp;amp;</code>. Embora a maioria dos navegadores vão se recuperar
        se vecê esquecer disso, isso nem sempre é possível. Então, mesmo se a URL
        não é dinâmica, você <em>precisa</em>
        <span class="function"><a href="function.htmlspecialchars.php" class="function">htmlspecialchars()</a></span> a URL.
       </span>
      </p></blockquote>
     </p>
     
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.html.form-image">
    <dt><strong>
     
      Estou tentando usar uma tag &lt;input type=&quot;image&quot;&gt;, mas as variáveis
      <var class="varname">$foo.x</var> e <var class="varname">$foo.y</var> não estão
      disponíveis. <var class="varname"><a href="reserved.variables.get.php" class="classname">$_GET['foo.x']</a></var> não existem
      também. Onde elas estão?
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Ao enviar um formulário, é possível usar uma imagem em vez de
      um botão submit padrão, como na tag:
      <div class="example-contents">
<div class="htmlcode"><pre class="htmlcode">&lt;input type=&quot;image&quot; src=&quot;image.gif&quot; name=&quot;foo&quot; /&gt;</pre>
</div>
      </div>

      Quando o usuário clica em qualquer lugar na imagem, o formulário que o acompanha
      será transmitido para o servidor com duas variáveis adicionais:
      <var class="varname">foo.x</var> e <var class="varname">foo.y</var>.
     </p>
     <p class="para">
      Porque <var class="varname">foo.x</var> e <var class="varname">foo.y</var> faria
      nome de variáveis inválidas no PHP, elas são automaticamente convertidas para
      <var class="varname">foo_x</var> e <var class="varname">foo_y</var>. Ou seja, os
      períodos são substituídos por sublinhados. Então, você teria acesso a essas variáveis
      como qualquer outro descrito na seção sobre como recuperar
      <a href="language.variables.external.php" class="link">variáveis de fontes
      externas</a>. Por exemplo, <var class="varname"><a href="reserved.variables.get.php" class="classname">$_GET['foo_x']</a></var>.
      <blockquote class="note"><p><strong class="note">Nota</strong>: 
       <p class="para">
         Os espaços nos nomes das variáveis requisitadas são convertidas para sublinhado.
       </p>
      </p></blockquote>
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.html.arrays">
    <dt><strong>
     Como eu crio arrays em um HTML &lt;form&gt;?
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Para obter o resultado do seu &lt;form&gt; enviado como um
      <a href="language.types.array.php" class="link">array</a> para seu script PHP
      você nomeia os elementos &lt;input&gt;, &lt;select&gt; ou &lt;textarea&gt;
      como estes:
      <div class="example-contents">
<div class="htmlcode"><pre class="htmlcode">&lt;input name=&quot;MyArray[]&quot; /&gt;
&lt;input name=&quot;MyArray[]&quot; /&gt;
&lt;input name=&quot;MyArray[]&quot; /&gt;
&lt;input name=&quot;MyArray[]&quot; /&gt;</pre>
</div>
      </div>

      Observe os colchetes após o nome da variável, é isso que
      torna uma variável um array. Você pode agrupar os elementos dentro de diferentes arrays,
      atribuindo o mesmo nome a diferentes elementos:
      <div class="example-contents">
<div class="htmlcode"><pre class="htmlcode">&lt;input name=&quot;MyArray[]&quot; /&gt;
&lt;input name=&quot;MyArray[]&quot; /&gt;
&lt;input name=&quot;MyOtherArray[]&quot; /&gt;
&lt;input name=&quot;MyOtherArray[]&quot; /&gt;</pre>
</div>
      </div>

      Isso produz dois arrays, MyArray e MyOtherArray, que serão enviados
      para o script PHP. Também é possível atribuir chaves específicas
      para seus arrays:
      <div class="example-contents">
<div class="htmlcode"><pre class="htmlcode">&lt;input name=&quot;AnotherArray[]&quot; /&gt;
&lt;input name=&quot;AnotherArray[]&quot; /&gt;
&lt;input name=&quot;AnotherArray[email]&quot; /&gt;
&lt;input name=&quot;AnotherArray[phone]&quot; /&gt;</pre>
</div>
      </div>

      O array AnotherArray irá conter agora as chaves 0, 1, email e phone.
      </p>
      <p class="para">
       <blockquote class="note"><p><strong class="note">Nota</strong>: 
        <p class="para">
         Especificar uma chave de array é opcional no HTML. Se você não especificar
         as chaves, o array preenche na ordem em que os elementos aparecem
         no formulário. Nosso primeiro exemplo irá conter as chaves 0, 1, 2 e 3.
        </p>
       </p></blockquote>
      </p>
      <p class="para">
      Veja também:
      <a href="ref.array.php" class="link">Funções de Array </a> e
      <a href="language.variables.external.php" class="link">Variáveis de fontes
      Externas</a>.
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.html.select-multiple">
    <dt><strong>
     
      Como eu faço para obter os resultados de uma múltipla seleção de uma tag HTML?
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      A seleção de múltiplas tags em uma construção HTML permite aos usuários
      selecionar múltiplos itens de uma lista. Esses itens são então passados
      ao manipulador de ações para o formulário. O problema é que eles
      são todos passados com o mesmo nome widget. I.e.
      <div class="example-contents">
<div class="htmlcode"><pre class="htmlcode">&lt;select name=&quot;var&quot; multiple=&quot;yes&quot;&gt;</pre>
</div>
      </div>

      Cada opção selecionada chegará ao manipulador de ações como:
      <div class="example-contents"><div class="cdata"><pre>
var=option1
var=option2
var=option3
      </pre></div></div>

      Cada opção irá substituir o conteúdo da variável anterior
      <var class="varname">$var</var>. A solução é usar
      a característica &quot;array de elementos do formulário&quot; do PHP. A seguir
      devem ser usados:
      <div class="example-contents">
<div class="htmlcode"><pre class="htmlcode">&lt;select name=&quot;var[]&quot; multiple=&quot;yes&quot;&gt;</pre>
</div>
      </div>

      Isso diz ao PHP para tratar <var class="varname">$var</var> como um array e
      cada atribuição de um valor para [var] acrescenta um item ao array.
      O primeiro item se torna <var class="varname">$var[0]</var>, o próximo
      <var class="varname">$var[1]</var>, etc. A função <span class="function"><a href="function.count.php" class="function">count()</a></span>
      pode ser chamado para determinar quantas opções foram selecionadas,
      e a função <span class="function"><a href="function.sort.php" class="function">sort()</a></span> pode ser usada para classificar
      o array de opções se necessário.
     </p>
     <p class="para">
      Note que se você está usando JavaScript o <code class="literal">[]</code>
      no nome do elemento pode lhe causar problemas quando você tenta
      se referir ao elemento pelo nome. Ao invés use o ID numérico do elemento
      do formulário, ou coloque o nome da variável entre aspas simples e
      use isso como um índice para os elementos do array, por exemplo:
      <div class="example-contents"><div class="cdata"><pre>
variable = document.forms[0].elements[&#039;var[]&#039;];
      </pre></div></div>

     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.html.javascript-variable">
    <dt><strong>
     
      Como eu posso passar uma variável do Javascript para o PHP?
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Uma vez que o Javascript é (normalmente) uma tecnologia da parte do cliente, e
      o PHP é (normalmente) uma tecnologia da parte do servidor, e uma vez que o HTTP é um
      protocolo &quot;sem lado&quot;, as duas linguagens não podem compartilhar variáveis
      diretamente.
     </p>
     <p class="para">
      É , no entanto, possível passar variáveis entre as duas.
      Uma maneira de realizar isso é gerar um código Javascript
      com PHP, e ter um navegador que se atualize, passando variáveis
      específicas de volta para o script PHP. O exemplo abaixo mostra
      precisamente como fazer isso -- isso permite ao código PHP capturar a altura
      e largura da tela, algo que normalmente só é possível no
      lado do cliente.
     </p>
     <p class="para">
      <div class="example" id="example-4">
       <p><strong>Exemplo #4 Gerando Javascript com PHP</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">$_GET</span><span style="color: #007700">[</span><span style="color: #DD0000">'width'</span><span style="color: #007700">]) AND isset(</span><span style="color: #0000BB">$_GET</span><span style="color: #007700">[</span><span style="color: #DD0000">'height'</span><span style="color: #007700">])) {<br />  </span><span style="color: #FF8000">// exibe as variáveis da geometria<br />  </span><span style="color: #007700">echo </span><span style="color: #DD0000">"A largura da tela é: "</span><span style="color: #007700">. </span><span style="color: #0000BB">$_GET</span><span style="color: #007700">[</span><span style="color: #DD0000">'width'</span><span style="color: #007700">] .</span><span style="color: #DD0000">"&lt;br /&gt;\n"</span><span style="color: #007700">;<br />  echo </span><span style="color: #DD0000">"A altura da tela é: "</span><span style="color: #007700">. </span><span style="color: #0000BB">$_GET</span><span style="color: #007700">[</span><span style="color: #DD0000">'height'</span><span style="color: #007700">] .</span><span style="color: #DD0000">"&lt;br /&gt;\n"</span><span style="color: #007700">;<br />} else {<br />  </span><span style="color: #FF8000">// passar as variáveis de geometria<br />  // (preserve a string de consulta original<br />  //   -- variáveis POST precisam ser manipuladas de forma diferente)<br /><br />  </span><span style="color: #007700">echo </span><span style="color: #DD0000">"&lt;script language='javascript'&gt;\n"</span><span style="color: #007700">;<br />  echo </span><span style="color: #DD0000">"  location.href=\"</span><span style="color: #007700">{</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'SCRIPT_NAME'</span><span style="color: #007700">]}</span><span style="color: #DD0000">?</span><span style="color: #007700">{</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'QUERY_STRING'</span><span style="color: #007700">]}</span><span style="color: #DD0000">"<br />            </span><span style="color: #007700">. </span><span style="color: #DD0000">"&amp;width=\" + screen.width + \"&amp;height=\" + screen.height;\n"</span><span style="color: #007700">;<br />  echo </span><span style="color: #DD0000">"&lt;/script&gt;\n"</span><span style="color: #007700">;<br />  exit();<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
       </div>

      </div>
     </p>
    </dd>
   </dl>

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