Informática

Variáveis Variáveis

[ratings]

Neste post mostrarei uma rápida maneira de como criar sisteminhas que geram automa automaticamente combos de HTML e como usá-los de maneira produtiva para uma exclusão, por exemplo.

Para se fazer isso, usa-se o conceito de uma variável que não somente contém um valor que há distinção, que é o conceito de variável, mas também o seu próprio nome, ao que chamamos de “variáveis variáveis”.

Detalhe: não errei o nome e escrevi duas vezes não. Por isso coloquei entre aspas.

Qual é o conceito ?

Você pode usar, além da variável propriamente dita, o conteúdo dela como nome para fazer uma nova atribuição.

Exemplo da PHP.net

<?php
 $a = "ola";
 $$a = "mundo";
?>

Neste exemplo existem duas variáveis, que são $a contendo a palavra ola e $$a que é a “variável variável” contendo o “mundo”.

Uma das representações disso é:

<?
 echo "$a ${$a}";
?>

Num exemplo prático pode ser feito algo como:

<?php 
 ...
 $valor = "algo_$x";
 e $$valor iria conter o que nós queremos..
 ...
?>

Você irá entender o exemplo acima quando começarmos o nosso exemplo.

Vamos seguir sempre o conceito e tentar implementar. Temos então essa porção de código:

<?php
 for ($x=0;$x<10;$x++)
 {
  echo "<input type=checkbox name=\"ck_$x\" value=\"OK\"> Texto Aqui<BR>\n";
 }
?>

Fizemos um for muito peculiar em sistemas, onde “printamos” na tela o valor retornado do banco de dados e queremos gerar nossos checkbox dinamicamente.

Notem que o value é sempre o mesmo, e o nome há um fator diferenciado-os que é exatamente o conceito de variável variável. Cada nome do formulário é uma variável no PHP e logo estes nomes todos se diferenciam por um código auto incrementado.

Então vamos continuar.

O exemplo completo fica:

<?php
  if ($_POST["send"]) {
    // aqui entra todo o conceito..
    for ($x=0;$x<10;$x++) {
      $valor = "ck_$x";
      if ($$valor == "OK") {
        echo "O id $x foi selecionado!<BR>\n";
      }
    }
  }
?>

<html>
  <form name="legal" method="POST">
    <input type="hidden" name="send" value="anything">
    <?php
      for ($x=0;$x<10;$x++)
      {
        echo "<input type=\"checkbox\" name=\"ck_$x\" value=\"OK\"> Texto Aqui<BR>\n";
      }
    ?>
    <input type="submit" value="go !" name="enviar">
  </form>
</html>
<?}?>

A primeira má notícia é que este script vai funcionar somente quando a register_globals estiver habilitada, e a segunda é que não tem como usar algo como ${$_GET} ${$_POST} e assim por diante.

Aqui vai uma dica de como trabalhar com isso com a register_globals do php.ini setada como off:$a = &$_GET[“foo”];

E então $$a iria conter o conteúdo do vetor por referência e provavelmente com isso dê para trabalhar com a register_globals setada como off.

Não vou fazer um script completo para deixar a imaginação de cada um fluir e termos aqui bons exemplos de como melhorar a idéia proposta acima.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

error: Content is protected!!