2017-01-04 107 views
0

好吧,所以我有我的数据库的问题。我正在尝试创建一个注册页面,一切正常,没有问题。我正在使用xampp phpmyadmin,并且每次在输入一些信息后点击注册按钮,我的数据库中都没有任何东西出现。用户信息没有被保存到我的数据库

<?php 
session_start(); 

$db = mysqli_connect("localhost", "root", "", "saver",); 


if (isset($_POST[ 'register_btn'])) { 
session_start(); 
$username = mysql_real_escape_string($db,$POST['username']); 
$email = mysql_real_escape_string($db,$POST['email']); 
$password = mysql_real_escape_string($db,$POST['password']); 
$password2 = mysql_real_escape_string($db,$POST['password2']); 

if ($password == $password2) { 
//create user 
$password = md5($password); //hashes password before entering into database 
$sql = "INSERT INTO users(username, email, password) VALUES('$username',  $email', $password,)"; 
mysqli_query($db, $sql); 
$_SESSION['message'] = "You are now logged in"; 
$_SESSION['username'] = $username; 
header("location: home.php"); // Redirect to home page 
}else{ 
$_SESSION['message'] = "The two passwords do not match"; 
    } 
} 
?> 

<html> 
<head> 
<title> Submission form </title> 
</head> 

<body> 
<form method="post" action="saver.php"> 
<table> 
<tr> 
<td>Username:</td> 
<td><input type="text" name="username" class="textInput"> 
</tr> 

<tr> 
<td>Email:</td> 
<td><input type="email" name="email" class="textInput"> 
</tr> 

<tr> 
<td>Password:</td> 
<td><input type="password" name="password" class="textInput"> 
</tr> 

<tr> 
<td>Password again:</td> 
<td><input type="password" name="password2" class="textInput"> 
</tr> 

<tr> 
<td></td> 
<td><input type="submit" name="register_btn" value="Register"> 
</tr> 
</table> 
</form> 
</body> 
</html> 
+0

您应该提供代码,以便我们提供帮助。这也值得添加更多相关的标签。你使用什么语言? –

+0

当然。好吧,我加入了,我使用PHP。我很感谢你的帮助@EmettSpeer –

回答

1

可以发现并通过打开和阅读PHP错误日志记录解决所有您所遇到的问题。 Read How to do that

您的问题是,这些行:

$db = mysqli_connect("localhost", "root", "", "saver",); 

$username = mysql_real_escape_string($db,$POST['username']); 

首先,你$db有一个留底了逗号,将其删除。这会导致一个可能致命的PHP错误,您应该使用error reporting

其次,$db对象是MySQLi标识符,不是MySQL标识符,但是您已将它传递给MySQL_函数。因此脚本将停止发生错误,或者数据库将插入空值。这就是为什么你没有得到任何保存。

另外(正如Luke所指出的)MySQL_函数有一个反转的参数顺序,所以你可能只是简单地忘记将i添加到函数名称!


你也无法正常包裹你的价值观在MySQL - 每个值将需要被包裹在单引号,如您有'$username'做你需要做同样的事情$email$arseword

而且你还需要删除尾随逗号从你的MySQL values集合太...

一些额外的注意事项:

  • 你在你同时使用mysqli_mysql_功能码。您应该只使用正在使用MySQLi_函数。
  • 您应该认真考虑(如在; 请做这个!!!)使用Prepared Statements而不是过程SQL。
  • 对散列密码,MD5绝对是not suitable。停下来。使用password_hash
  • header(Location:);搬迁指令应立即随后通过脚本终止如exit;die();
  • session_start()只应在脚本的顶部称为一次
  • 说真的,使用准备好的陈述。他们周围有数百个很好的例子。
  • 你将通过使用和阅读并对PHP Error Logging作出反应,为自己节省数百小时的压力(以及许多人)!

编辑:
作为澄清Luke

实际问题是mysql_real_escape_string只接受一个参数(即mysql_real_escape_string($ POST [ '用户名']))。无论MySQLi是否被使用,它都可以使用,但是当然应该避免使用预处理语句。

+0

ohhh,非常感谢你的时间和帮助,我非常感谢它,并会开始工作,并让你知道发生了什么@martin –

+1

实际的问题是'mysql_real_escape_string'只接受一个参数(即'mysql_real_escape_string($ POST ['username']);')。不管MySQLi是否被使用,它都可以使用,但它当然应该避免用于预先准备的语句。此外,位置标题和退出 - 回应*东西*通常是一个好主意,基于浏览器无论何种原因重定向 - 用户只会看到白色屏幕。也不要使用散列验证游戏得分;) –

+0

另一种情况:从不在生产站点上启用PHP的日志记录。确保它保存到文件中,而不是意外地将一堆信息泄露给最终用户。 –

0

嘿家伙我发现了这个问题。它在插入部分。我的编辑器中有“用户”,我的数据库中有“user_info”。所以我只是将“用户”改为“user_info”。非常感谢你的帮助。我怎么能给你信用?

+0

很高兴你找到它。您可以通过点击答案旁边的向上箭头来提供信用。如果您将自己的awsr(此答案)标记为正确答案(带有勾号),这也将很有用,并且这将结束该问题。干杯。 – Martin

相关问题