2016-02-05 110 views
-8

我正在使用php注册表单,但是当我点击注册按钮时,它会在电子邮件和密码字段中保存1,1而不是给定的电子邮件和密码。php数据库数据保存

<?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> 

+1

http://php.net/manual/en/function.isset.php,isset函数返回一个布尔值,更改为if(isset($ _ POST ['email'])){$ email = $ _ POST ['email'];}编辑:张贴为答案 –

+0

[您的脚本存在SQL注入攻击风险。](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql -injection-in-php) –

+0

请使用PHP的[内置函数](http://jayblanchard.net/proper_password_hashing_with_PHP.html)来处理密码安全性。如果您使用的PHP版本低于5.5,则可以使用'password_hash()'[兼容包](https://github.com/ircmaxell/password_compat)。 –

回答

1

http://php.net/manual/en/function.isset.php

Isset函数返回一个布尔值,尝试:

if(isset($_POST['email'])){ 
    $email=$_POST['email']; 
} 
if(isset($_POST['password'])){ 
    $password=$_POST['password']; 
} 
+0

或者你可以使用tenary操作符:'$ email =(isset($ _ POST ['email'])?$ _POST ['email']:“”);',因为当没有设置所有字段时会发生什么? *未定义的变量* – Qirel

+0

这不是你做错误处理的方式...... –

2

为什么它进入1原因“在你的数据库s是因为isset()的的为POST数组。

旁注:您的意思是不是使用三元运算符http://php.net/manual/en/language.operators.comparison.php

RTM:http://php.net/manual/en/function.isset.phpbool isset (mixed $var [, mixed $... ])返回boolean。

$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 statementsPDOprepared statements


密码

我也注意到,你可能会采用明文存储密码。如果您打算继续使用此功能,建议不要这样做。下面的

用途之一:

其他链接:

有关列长度重要旁注:

如果当你决定使用password_hash()或地下室,重要的是要注意,如果你现在的密码列的长度是低于60的任何东西,它将需要改变为(或更高)。本手册建议长度为255.

您需要更改列的长度,并使用新散列重新开始以使其生效。否则,MySQL将无声无息地失败。


脚注:

您也应该检查针对您的查询错误。

和错误报告是另一个,这将帮助你在这里。

0

我想应该是类似下面

$电子邮件= isset($电子邮件)? $ email:“” $ password = isset($ password)? $ password:“”