【问题标题】:passing parameters to php in a form?以表格形式将参数传递给php?
【发布时间】:2009-04-29 19:00:27
【问题描述】:

我有通过 php 回显的基本 html 表单:

<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" 无效。

【问题讨论】:

  • 注意!!!不要将未格式化的值(例如 echo $_GET['pk'])打印到页面!这是一个安全漏洞,它引入了一系列问题(XSS 仅举一个例子)。如果“pk”是数据库的主键并且它是一个数字,您可以使用正则表达式或 intval() 函数进行清理
  • 我不会将它打印到页面上,它会被传递给 up.php,在那里它将通过参数化查询插入到数据库中 为什么需要在传输过程中对其进行清理?

标签: php forms


【解决方案1】:

使用隐藏字段:

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

顺便说一句,像你那样打印大量的 HTML 。考虑使用 HEREDOC、模板引擎或框架退出 PHP。

编辑

如下所述,您不应将 GET 和 POST 数据打印回页面,而无需先对其进行清理。假设 pk 是一个主键,你应该用intval 函数将上面的$pk 包装起来,至少

【讨论】:

  • 对此表示赞同,但请参阅我附在关于从 GET/POST 数据中打印值的问题的注释。
  • 叹息。是的,是的,我知道。我只能在这里回答这么多次,直到我不再关心为止。编辑以反映这一点。
【解决方案2】:

我同意所有关于 $_GET['pk'] 变量的某种输入控制的 cmets。我会推荐 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>

您可以在此处找到有关过滤器模块的更多信息:link text

我也同意 Paolo Bergantino 的观点,这不是最漂亮的方法,模板引擎、heredocs 或 regexp 可能是提高系统可读性和可维护性的更好方法。

【讨论】:

    【解决方案3】:

    您不能在单引号字符串中使用变量:

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

    传递它的最佳方式是作为表单内的隐藏字段

    【讨论】:

      【解决方案4】:

      试试这样:

      <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"] 可能包含几乎所有内容,因此请考虑对输入进行某种处理。

      【讨论】:

        猜你喜欢
        • 2023-04-10
        • 1970-01-01
        • 1970-01-01
        • 2016-08-19
        • 1970-01-01
        • 2017-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多