Вопрос

У меня есть базовая html-форма, повторяемая через 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>

Я хотел бы передать значение pk в up.php

Изменение action="up.php?pk=$pk" не сработало.

Это было полезно?

Решение

Используйте скрытое поле:

<input type="hidden" name="pk" value="<?php echo $pk; ?>">

Кстати, печать больших объемов HTML-кода, подобного тому, что есть у вас, есть уродливый.Подумайте о том, чтобы либо отказаться от PHP для этого, либо использовать HEREDOC, шаблонизатор или фреймворк.

Редактировать:

Как отмечено ниже, вы не должны печатать данные GET и POST обратно на страницу, предварительно не очистив их.Предполагая, что pk является первичным ключом, вы должны обернуть $pk выше с помощью внутренний функция, по крайней мере.

Другие советы

Я согласен со всеми комментариями относительно какого-либо элемента управления вводом переменной $_GET['pk'].Я бы порекомендовал модуль filter в php, который, как мне кажется, в значительной степени является установленным модулем по умолчанию.

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

Вы можете найти более подробную информацию о модуле фильтрации здесь: текст ссылки

Я также согласен с Паоло Бергантино, это не самый красивый способ сделать это, и шаблонизатор, heredocs или regexp могли бы быть лучшим способом повышения удобочитаемости и ремонтопригодности системы.

Вы не можете использовать переменную внутри строки, заключенной в одинарные кавычки:

$pk = 123;
echo 'Hello $pk'; // echos Hello $pk
echo "Hello $pk"; // echos Hello 123
echo 'Hello ' . $pk; // echos Hello 123

Лучший способ передать это в виде скрытого поля внутри формы

Попробуйте что-нибудь вроде этого:

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

Конечно, вы должны знать, что $_GET["pk"] может содержать практически все, что угодно, поэтому подумайте о какой-нибудь очистке входных данных.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top