Boa tarde!
Com relação aos dois ficheiros a seguir, eu envio pelo formulário de index.php a variável $key da caixa de texto, que será recebida por $_POST de ficheiro.php.
Minhas dúvidas são:
1) Como este $_POST sabe que receberá o valor desta variável $key, se não é feita qualquer referência a ela ($key)?
2) Se existissem duas caixas de texto, cada uma com a sua variável ($key1 e $key2), como poderia receber cada uma delas sem dar problemas?
Agradeceria imenso se alguém pudesse responder a estas dúvidas, porque já pesquisei demais as respostas pela net e não achei nada!
**index.php**
<?php
define('MYSQL_HOST','localhost');
define('MYSQL_USER','root');
define('MYSQL_PASSWORD','');
define('MYSQL_DB','comic_book');
$conexao = mysqli_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PASSWORD);
if(!$conexao)
{
die ('Problemas de conexão!!!'.mysqli_connect_error());
}
$selected = mysqli_select_db($conexao, MYSQL_DB)
or die(mysqli_error(MYSQL_DB));
$sql = 'SELECT * FROM frm_admin';
$result = mysqli_query($conexao, $sql)
or die(mysqli_error($sql));
while ($row = mysqli_fetch_array($result))
{
$admin[$row['constant']]['value'] = $row['value'];
}
$menuoption = 'boardadmin';
$menuItems = array('boardadmin' => 'Board Admin', 'edituser' => 'Users',
'forums' => 'Forums', 'bbcode' => 'BBcode');
?>
<form method="post" action="ficheiro.php">
<?php
foreach ($admin as $key => $value)
{
echo '<input type="text" name="'.**$key**.'" value="'.$value['value'].'"/><br>';
}
?>
<p><input type="submit" value="Update"/></p>
</form>
**ficheiro.php**
<?php
define('MYSQL_HOST','localhost');
define('MYSQL_USER','root');
define('MYSQL_PASSWORD','');
define('MYSQL_DB','comic_book');
$conexao = mysqli_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PASSWORD);
if(!$conexao)
{
die ('Problemas de conexão!!!'.mysqli_connect_error());
}
$selected = mysqli_select_db($conexao, MYSQL_DB)
or die(mysqli_error(MYSQL_DB));
//------------------------------------------------------------------------
foreach (**`$_POST`** as $key => $value)
{
echo $key.' ------> ';
echo $value.'<br>';
}
Como este
$_POST
sabe que receberá o valor desta variável$key
, se não é feita qualquer referência a ela ($key
)?
Bom, vamos por partes.
O que o PHP faz é gerar um HTML. Quando vc faz algo como:
foreach ($admin as $key => $value) {
echo '<input type="text" name="'. $key. '" value="'.$value['value'].'"/><br>';
}
O que acontece é que o PHP roda este código (no caso, um loop pelo array $admin
), e gera um HTML contendo seja lá o que for que tem no array.
No seu caso, o array $admin
é populado com dados que vem do banco de dados. Mas vamos supor que seu conteúdo seja algo como:
$admin = [ 'nome' => [ 'value' => 'fulano' ], 'idade' => [ 'value' => 42 ] ];
Se eu rodar o foreach
acima, o resultado vai ser:
<input type="text" name="nome" value="fulano"/><br>
<input type="text" name="idade" value="42"/><br>
E é esse HTML que será enviado para o cliente (no caso, o browser). Repare que o browser não sabe nada sobre a variável $key
, porque ela só existe no lado do servidor - ou seja, no código PHP que gerou o HTML. Tudo que o browser enxerga é o resultado final (o HTML gerado).
Depois, quando você submete o formulário, estes campos são colocados em $_POST
(a chave “nome” contendo o valor “fulano”, e a chave “idade” contendo o valor “42”), que é um array criado automaticamente e que fica disponível para ser usado pelo código PHP.
Aí, quando vc faz um foreach
em $_POST
, ele vai percorrendo as suas chaves e valores, e a cada iteração estes são colocados nas variáveis $key
e $value
.
O HTML não sabe nada sobre essas variáveis, elas só existem no PHP. E o PHP, por sua vez, usa as variáveis para construir um HTML que é mostrado no browser. E o browser envia os dados de volta para o PHP (que pode usar variáveis para gerar outro HTML, que pode enviar dados de volta para o PHP e assim por diante).
Muito agradecido, Hugo, sua explicação clareou bastante!!!