Como o $_POST sabe que vai rfeceber a variável $key?

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!!!