【问题标题】:Use form input to build url with php.使用表单输入通过 php 构建 url。
【发布时间】:2012-04-16 21:59:55
【问题描述】:

我正在尝试创建一个表单,用户可以在其中输入他们的 id(用户名),它将作为变量附加到我的 php 脚本中使用的 url 中。这就是我所拥有的。

<?php
if(isset($_POST['submit']))
{
    $id = $_POST['id'];
    echo 'http://example.com/default.asp?action=data&id=$id';
}
?>
<form method="post" action="<? echo $_SERVER['PHP_SELF']; ?>">
   <input type="text" name="id"><br>
   <input type="submit" name="submit" value="Submit Form"><br>
</form> 

它正确地收集了用户的 id,如果我只是回显 $id,它会输出正确的值,但是当我尝试回显 url 时,它只是输出 $id 而不是 $id 变量的实际值。我做错了什么?

【问题讨论】:

  • 为什么不使用GET方法并为其他参数添加隐藏字段?
  • 使用双引号作为回声。或使用单引号并将 $id 连接到 url 字符串。
  • 你真的应该在谷歌上查找跨站脚本或 XSS,目前你在 10 行代码内有 2 种攻击途径......气味

标签: php forms


【解决方案1】:
echo "http://example.com/default.asp?action=data&id=$id";
     ^---wrong quotes                                  ^--- ditto

单引号字符串不插入变量。

【讨论】:

    【解决方案2】:

    单引号不会对变量进行插值,要么使用双引号,要么使用字符串连接......三个选项:

        echo "http://example.com/default.asp?action=data&id=".$id;
    

        echo "http://example.com/default.asp?action=data&id=$id";
    

        echo 'http://example.com/default.asp?action=data&id='.$id;
    

    【讨论】:

    • 已修复...抱歉,我打字速度很快 :(
    【解决方案3】:

    这一行:

    echo 'http://example.com/default.asp?action=data&id=$id';
    

    应该是

    echo 'http://example.com/default.asp?action=data&id='.$id;
    

    如果您在 PHP 中对字符串使用单引号,它将打印字符串中的任何内容而不计算任何内容(即不计算任何变量)。所以你可以使用双引号或像我上面那样附加变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-09
      • 2016-03-05
      • 1970-01-01
      • 2020-12-14
      • 1970-01-01
      • 2011-05-18
      • 2012-09-22
      相关资源
      最近更新 更多