2012-10-09 43 views
1

我在我的网站上有一个用户创建表单,它无法将任何新用户数据添加到相关的MySQL表中。我真的不太确定它为什么不添加数据,也不会抛出任何会告诉我发生了什么问题的错误。adduser_process.php不向MySQL表添加信息

目前,我有以下的用户创建形式:

<form name="adduser_form" action="process/adduser_process.php" method="post"> 
    Username:<input id="username" type="test" name="username" /> 
    Email:<input id="email" type="text" name="email" /> 
    Password:<input id="password" type="password" name="password" /> 
    <input id="add_usr" type="button" value="Add User" onclick="formhash(this.form, this.form.password);" /> 
</form> 

在点击“添加用户”按钮,formhash JS创建一个哈希密码,然后将表单提交给adduser_process.php:

function formhash(form, password) { 
    var p = document.createElement("input"); 
    form.appendChild(p); 
    p.name = "p"; 
    p.type = "hidden"; 
    p.value = hex_sha512(password.value); 
    password.value = ""; 
    form.submit(); 
} 

adduser_process.php工作如下(故意留出标签):

include '../includes/lgn_connect.php'; 
include '../includes/functions.php'; 
sec_session_start(); 

$password = $_POST['p']; 

$random_salt = hash('sha512', uniqid(mt_rand(1, mt_getrandmax()), true)); 

$password = hash('sha512', $password.$random_salt); 

if($insert_stmt = $mysqli->prepare("INSERT INTO users (username, email, password, salt) VALUES (?, ?, ?, ?)")) { 
$insert_stmt->bind_param('ssss', $username, $email, $password, $random_salt); 

$insert_stmt->execute(); 
} 
+1

$ username和$ email是否设置? –

+0

不,没有。我现在感到很惭愧。 –

回答

2

的第一个错误是你必须settted类型testtext用户名

<input id="username" type="test" name="username" />  //should be 
<input id="username" type="text" name="username" /> 

的第二个错误与if条件,你没有条件增加了额外的()

if($insert_stmt = $mysqli->prepare("INSERT INTO users (username, email, password, salt) VALUES (?, ?, ?, ?)")) //should be 

if(($insert_stmt = $mysqli->prepare("INSERT INTO users (username, email, password, salt) VALUES (?, ?, ?, ?)"))) 

第三个错误是sec_session_start();不函数开始会话它应该是

session_start(); 
+0

sec_session_start()是我在函数php中定义的一个自定义函数,部分从随机网络人员和部分我自己的东西中被窃取,这比使用session_start()更加明智/安全,所以这不是错误。其他...是错误,应该立即修复。 –