在我的网站上,我有一份注册表。用户只需输入电子邮件,密码并重新输入密码即可。
然而,即使我填写了所有字段,我仍然得到一个错误回应,说我没有填写表格。我不明白我做错了什么(相对较新的PHP)
请注意我没有尝试清理用户输入,因此我知道我的代码很容易受到SQL注入的攻击!!!
<?php
include("database.php");
include("requirements.php");
if(isset($_POST['register'])) {
$email = $_POST['email'];
$password = $_POST['password'];
$confpassword = $_POST['confpassword'];
}
if(isset($password) && isset($email) && isset($confpassword)){
if($password != '' && $email != '' && $confpassword != ''){
if($password == $confpassword){
if(strlen($password) <= 20 && strlen($password) >= 6){
if(strlen($email) > 6){
$hash = password_hash($password, PASSWORD_DEFAULT);
$insert_user = mysqli_query($con, "INSERT INTO users (email, password, salt) VALUES ('".$email."', '".$password."', '".$salt."')");
if($insert_user)
{
echo "Thank you for registering, you can now login to your account and create a listing.";
}
else
{
echo "Sorry there was an error - please try again later. If the issue continues please contact support.";
}
}
else
{
echo "You need to insert an email.";
}
}
else
{
echo "The entered email address needs to be above 6 characters.";
}
}
else
{
echo "The password must be between 6 and 20 characters long.";
}
}
else
{
echo "The two passwords you have entered do not match.";
}
}
else
{
echo "You have not inserted all of the required fields that were needed.";
}
它只是跳到最后说“你还没有插入所需的所有必填字段。”甚至没有尝试查询数据库。
Database.php只是连接数据库信息(表,密码等)
谢谢!
答案 0 :(得分:1)
我会尝试手动将值分配给PHP变量($ email,$ password,$ confpassword)。
if(isset($_POST['register'])) {
$email = $_POST['email'];
$password = $_POST['password'];
$confpassword = $_POST['confpassword'];
}
//Test variables
$email = 'test@email.com';
$password = 'testpassword';
$confpassword = 'testpassword';
if(isset($password) && isset($email) && isset($confpassword)){
if($password != '' && $email != '' && $confpassword != ''){
提交表单后,如果工作正常,您就会知道问题在于您的$ _POST数据被分配给PHP变量。如果这不起作用,您就会知道您的逻辑存在问题以及它如何处理变量。这至少会缩小您需要查看的范围。
答案 1 :(得分:0)
为了理解发生了什么,你应该使用&#34; var_dump($ variable)&#34;在代码开始时起作用。 它是一个显示变量内容的调试函数(对数组有用)。
1)如果只有一个字段为空,则该字段的名称在某处出现问题。
2)如果所有字段都为空,则表单或提交按钮出现问题。
只是一个提示:而不是使用&#34; isset&#34;然后检查你的字段是否已填满,你可以使用&#34;!empty($ variable)&#34;,在一个函数调用中它确实是相同的;)
狐猴
答案 2 :(得分:0)
顺便说一下,我复制了你的代码,并使用:
调用它<form action="test.php" method="post">
<input type="text" name="email" />
<input type="text" name="password" />
<input type="text" name="confpassword" />
<input type="submit" name="register" />
</form>
完美无缺。我认为您的错误在HTML表单中。