Isset 仍然没有做好它的工作
Isset still not doing its job
我在整个堆栈溢出中都看到了这个问题,但是 none 的方法有所帮助。
表格:
<form action="login.php" method="POST">
<input name="username" type="text" placeholder="User Name">
<input name="rawpassword" type="password" placeholder="Password">
<input value="Login" type="submit">
</form>
Login.php:
// Gets user entered details from form.
if (isset($_POST['username'])) {
$username=$_POST['username'];
} else {
$username=null;
}
if (isset($_POST['rawpassword'])) {
$rawpassword=$_POST['rawpassword'];
} else {
$rawpassword=null;
}
// Hashes password through SHA-1.
$password = sha1($rawpassword);
echo "$username";
echo "$rawpassword";
echo "$password";
我的问题是
if (isset($_POST['']))
返回为 false 并将使变量 null 和 echos null(无)。但如果我这样做:
if (!isset($_POST['']))
它returns每个人都会遇到的未定义索引错误。
将不胜感激。
if (isset($_POST['username']) && isset($_POST['submit'])) {
$username=$_POST['username'];
}
请尝试检查提交,因为用户名和其他字段并不总是设置。
我希望这会成为问题,因为没有 html.
问题不清楚
尝试在
中使用它
HTML
<form action="login.php" method="POST">
<input name="username" type="text" placeholder="User Name" required>
<input name="rawpassword" type="password" placeholder="Password" required>
<input value="Login" type="submit" name="Login">
</form>
PHP
<?php
if (filter_input(INPUT_POST,'Login')==='Login') {
$username=$_POST['username'];
$rawpassword=$_POST['rawpassword'];
// Hashes password through SHA-1.
$password = sha1($rawpassword);
} else {
$username='';
$rawpassword='';
}
echo $username;
echo $rawpassword;
echo $password;
我建议使用 empty() instead of isset()。因为 isset()
只会检查 (POST) 变量是否已设置而不是 NULL。它不会检查它是否为空。如果有人只是点击提交而没有输入任何用户名或密码,您的代码仍然会接受。如果您改用 empty()
,它还会检查用户名和密码是否不为空。由于 empty()
与 isset()
完全相同,而且还会检查它是否不为空,因此不再需要使用 isset()
.
<?php
if(!empty($_POST['username'] && !empty($_POST['rawpassword'])){
$username = $_POST['username'];
$rawpassword = $_POST['rawpassword'];
// Hashes password through SHA-1.
$password = sha1($rawpassword);
} else {
$username = null;
$rawpassword = null;
}
echo $username;
echo $rawpassword;
echo $password;
?>
此外,在回显变量时不必将变量放在引号内。
我已经解决了我遇到的问题,显然我没有做足够的研究来发现问题是 JQuerymobile(应该提到我正在使用 JQuerymobile)有它自己的请求页面的特殊方式.
我需要做的就是将 data-ajax="false"
添加到 <form>
标签中,现在一切都按照我希望的方式运行。
谢谢大家的建议和帮助。
我在整个堆栈溢出中都看到了这个问题,但是 none 的方法有所帮助。
表格:
<form action="login.php" method="POST">
<input name="username" type="text" placeholder="User Name">
<input name="rawpassword" type="password" placeholder="Password">
<input value="Login" type="submit">
</form>
Login.php:
// Gets user entered details from form.
if (isset($_POST['username'])) {
$username=$_POST['username'];
} else {
$username=null;
}
if (isset($_POST['rawpassword'])) {
$rawpassword=$_POST['rawpassword'];
} else {
$rawpassword=null;
}
// Hashes password through SHA-1.
$password = sha1($rawpassword);
echo "$username";
echo "$rawpassword";
echo "$password";
我的问题是
if (isset($_POST['']))
返回为 false 并将使变量 null 和 echos null(无)。但如果我这样做:
if (!isset($_POST['']))
它returns每个人都会遇到的未定义索引错误。
将不胜感激。
if (isset($_POST['username']) && isset($_POST['submit'])) {
$username=$_POST['username'];
}
请尝试检查提交,因为用户名和其他字段并不总是设置。 我希望这会成为问题,因为没有 html.
问题不清楚尝试在
中使用它HTML
<form action="login.php" method="POST">
<input name="username" type="text" placeholder="User Name" required>
<input name="rawpassword" type="password" placeholder="Password" required>
<input value="Login" type="submit" name="Login">
</form>
PHP
<?php
if (filter_input(INPUT_POST,'Login')==='Login') {
$username=$_POST['username'];
$rawpassword=$_POST['rawpassword'];
// Hashes password through SHA-1.
$password = sha1($rawpassword);
} else {
$username='';
$rawpassword='';
}
echo $username;
echo $rawpassword;
echo $password;
我建议使用 empty() instead of isset()。因为 isset()
只会检查 (POST) 变量是否已设置而不是 NULL。它不会检查它是否为空。如果有人只是点击提交而没有输入任何用户名或密码,您的代码仍然会接受。如果您改用 empty()
,它还会检查用户名和密码是否不为空。由于 empty()
与 isset()
完全相同,而且还会检查它是否不为空,因此不再需要使用 isset()
.
<?php
if(!empty($_POST['username'] && !empty($_POST['rawpassword'])){
$username = $_POST['username'];
$rawpassword = $_POST['rawpassword'];
// Hashes password through SHA-1.
$password = sha1($rawpassword);
} else {
$username = null;
$rawpassword = null;
}
echo $username;
echo $rawpassword;
echo $password;
?>
此外,在回显变量时不必将变量放在引号内。
我已经解决了我遇到的问题,显然我没有做足够的研究来发现问题是 JQuerymobile(应该提到我正在使用 JQuerymobile)有它自己的请求页面的特殊方式.
我需要做的就是将 data-ajax="false"
添加到 <form>
标签中,现在一切都按照我希望的方式运行。
谢谢大家的建议和帮助。