为什么PHP程序没有通过GET传递变量?

时间:2014-08-24 05:12:28

标签: php get

这是我为了获取用户名和密码而编写的file.php,但由于某种原因它无效。

<?php 
    if(isset($_GET["submit"])) {

    $username = $_GET["username"];
    $username = $_GET["password"];
    print "Your username: $username";
    print "And password: $password";
    }
?>

<!DOCTYPE>
<html>
  <head><title>OHO</title></head>
  <body>
    <form action="form.php" type="get">
    Username:<input type="text" name="username"><br />
    Password:<input type="password" name="password"><br />
    Submit   <input type="submit" value="submit">
    </form>
  </body>
</html>

3 个答案:

答案 0 :(得分:4)

在第4,5行,您已将变量名称定义为$username

$username = $_GET["username"];
$username = $_GET["password"];

必须是:

$username = $_GET["username"];
$password = $_GET["password"];

下一个错误是定义表单方法:

<form action="form.php" method="get">

最终建议使用strip_tags()来防止XSS攻击

$username = strip_tags($_GET["username"]);
$password = strip_tags($_GET["password"]);

并使用密码加密方法存储在数据库中

答案 1 :(得分:1)

首先,条件语句if(isset($_GET["submit"]))基于命名元素,因此不会从其中执行任何操作。

<input type="submit" value="submit">

将其命名为

<input type="submit" value="submit" name="submit">

另外,$username = $_GET["password"];需要$password = $_GET["password"];

您已为两者声明了相同的变量。

type="get"也应该是method而不是type - 类型是元素而不是表单本身。

我注意到您可能正在以纯文本形式存储密码,这是不推荐的,而且非常不安全,同时通过GET方法发送该信息;使用POST。

要获得更安全的方法,请使用CRYPT_BLOWFISH或PHP 5.5的password_hash()函数。对于PHP&lt; 5.5使用password_hash() compatibility pack

答案 2 :(得分:0)

根据所有其他回答,

您还应该查看 FILTER_INPUT

$username = filter_input(INPUT_GET, 'username');
$password = filter_input(INPUT_GET, 'password');
  

filter_input - 按名称获取特定的外部变量,并可选择过滤它

在那里,您可以验证电子邮件,根据需要对事物进行编码等等

相关问题