Passando parâmetros para PHP em um formulário?
Pergunta
Eu tenho a forma básica HTML ecoada através do PHP:
<html>
<body>
<?php
if (isset($_GET["pk"]))
{ $pk = $_GET["pk"];}
echo '<form action="up.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" />
<br />
<input type="submit" name="submit" value="Submit" />
</form>';
?>
</body>
</html>
Eu gostaria de passar o valor de pk para up.php
Modificando ação = "up.php? Pk = $ pk" não funcionou.
Solução
Use um campo oculto:
<input type="hidden" name="pk" value="<?php echo $pk; ?>">
A propósito, imprimir grandes quantidades de html como você tem feio. Considere sair do PHP para fazê -lo, usando o heredoc, um mecanismo de modelo ou uma estrutura.
EDITAR:
Como observado abaixo, você não deve imprimir e postar dados de volta à página sem higienizá -los primeiro. Supondo que PK seja uma chave primária, você deve envolver $pk
acima com o intval função, pelo menos.
Outras dicas
Concordo com todos os comentários sobre algum tipo de controle de entrada da variável $ _Get ['PK']. Eu recomendaria o módulo de filtro no PHP, que é praticamente um módulo instalado padrão, acredito.
<html>
<body>
<?php
$param = filter_input(INPUT_GET, 'pk', FILTER_SANITIZE_ENCODED);
?>
<form action="up.php<?php echo (isset($param) && $param != false) ? '?pk=' . $params : ''); ?>" method="post"enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" />
<br />
<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>
Você pode encontrar mais informações sobre o módulo de filtro aqui: Texto do link
Também concordo com Paolo Bergantino, essa não é a maneira mais bonita de fazê -lo, e um mecanismo de modelo, Heredocs ou Regexp pode ser uma maneira melhor de aumentar a legibilidade e a manutenção do sistema.
Você não pode usar uma variável dentro de uma string de citação única:
$pk = 123;
echo 'Hello $pk'; // echos Hello $pk
echo "Hello $pk"; // echos Hello 123
echo 'Hello ' . $pk; // echos Hello 123
A melhor maneira de passar por isso seria como um campo oculto dentro do formulário
Experimente sTH assim:
<html>
<body>
<?php
$params = "";
if (isset($_GET["pk"]))
{ $params = "?pk=" . $_GET["pk"];}
echo '<form action="up.php' . $params . '" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" />
<br />
<input type="submit" name="submit" value="Submit" />
</form>';
?>
</body>
</html>
É claro que você deve estar ciente de que $ _Get ["PK"] pode conter praticamente qualquer coisa, então pense em algum tipo de higienização de insumos.