我正在使用php进行注册表单,但是当我点击注册按钮时,它会在电子邮件和密码字段中保存1,1而不是给出电子邮件和密码。
<?php
include("connection.php")
?>
<?php
$email=isset($_POST['email']);
$password=isset($_POST['password']);
if(isset($_POST['register']))
{
$q= "insert into admin (email, password) values ('$email', '$password')";
$qr=mysqli_query($con, $q);
if($qr)
{
echo "data added sucessfully";
}
else
{
die();
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Log in</title>
</head>
<body>
<form method="post" action="">
<input type="email" name="email">
<br>
<input type="password" name="password">
<br>
<button type="submit" name="register" value="register">register</button>
</form>
</body>
</html>
答案 0 :(得分:2)
它在数据库中输入1
的原因是因为POST数组的isset()
。
旁注:您可能打算使用三元运算符http://php.net/manual/en/language.operators.comparison.php
RTM:http://php.net/manual/en/function.isset.php bool isset ( mixed $var [, mixed $... ] )
,返回布尔值。
$email=isset($_POST['email']);
$password=isset($_POST['password']);
您需要删除isset()
。
$email=$_POST['email'];
$password=$_POST['password'];
然后检查它们是否为空。
if(!empty($_POST['email']) && !empty($_POST['password']) )
并放在if(isset($_POST['register'])){...}
我不知道你为什么要将代码嵌入到textarea中 修改:我看到你在编辑中删除了它。
还要确保您的列类型能够存储字符串而不是整数,并且足够长以容纳存储的数据。
您目前的代码向SQL injection开放。使用prepared statements或PDO与prepared statements。
<强>密码强>
我还注意到您可能以纯文本格式存储密码。如果您打算使用此功能,则不建议这样做。
使用以下其中一项:
crypt()
bcrypt()
scrypt()
password_hash()
功能。其他链接:
关于列长的重要说明:
如果您决定使用password_hash()
或隐藏,请务必注意,如果您当前的密码列的长度低于60,则需要将其更改为(或更高)。手册建议长度为255。
您需要更改列的长度并重新开始使用新哈希才能使其生效。否则,MySQL将无声地失败。
<强>脚注:强>
您还应该根据查询检查错误。
和错误报告是另一个可以帮助你的人。
答案 1 :(得分:1)
http://php.net/manual/en/function.isset.php
Isset函数返回一个布尔值,尝试:
if(isset($_POST['email'])){
$email=$_POST['email'];
}
if(isset($_POST['password'])){
$password=$_POST['password'];
}
答案 2 :(得分:0)
我认为应该是下面的内容
$ email = isset($ email)? $ email:&#34;&#34; $ password = isset($ password)? $ password:&#34;&#34;