2017-11-16 13 views
-1

내 웹 사이트에서 작동하는 '간단한'등록 기능을 얻으려고합니다. 오류 메시지는 아래 이미지에 나와 있습니다. 단순히 매개 변수의 값을 가져 와서 데이터베이스에 기록해야합니다.간단한 PHP/MySql 등록 함수가 매개 변수를받지 않습니다.

Error Messages

PHP :

<?php 
//connection details 
/*$servername = "XXXXXXXXX"; 
$username = "sqlXXXXXXXXX"; 
$password = "password"; 
$dbname = "sqlXXXXXXXXX";*/ 

$servername = "localhost"; 
$username = "root"; 
$password = ""; 
$dbname = "coursework"; 

$conn = mysqli_connect($servername, $username, $password, $dbname); 

$username=$_POST['name']; 
$email=$_POST['email']; 
$password=$_POST['password']; 
$admin=0; 

$hash = crypt($password); 

//prepared statement 
$stmt = mysqli_prepare($conn, "INSERT INTO USERS (username, email, hash, admin) VALUES (?,?,?,?)"); 

//dealing with the parameters 
mysqli_stmt_bind_param($stmt, "sssi", $username, $email, $hash, $admin); 

mysqli_stmt_execute($stmt); 

//close statement and connection 
mysqli_stmt_close($stmt); 
mysqli_close($conn); 

?> 
+0

암호에 대해 동일한 변수를 사용하고 있습니다. 그 이유는 무엇입니까? 모든 POST 배열에도 값이 있는지 확인하십시오. –

+0

PHP 5.5.0 이상인 경우 대신 'password_hash' (http://php.net/manual/en/function.password-hash.php)를 사용하십시오. password_hash는 자체 소금을 생성합니다. –

+2

나는/귀가 먹은 귀로 여기에 빠져있는 것처럼 보입니다. 응답 구역에 게시하는 사람들에게만 응답합니다. –

답변

0

첫 번째 오류는 당신이 당신의 crypt 기능에 salt 매개 변수를 놓친 것을 알려줍니다. 예를 들어 cryptsalt으로 사용하는 경우 this을 확인할 수 있습니다.

CAREFUL : 소금을 잃어서는 안됩니다. 정적 문자열이거나 사용자가 만든 타임 스탬프 (사용자가 변경할 수없는 것)와 같이 사용자에 따라 다를 수 있습니다.

+0

http://php.net/manual/en/function.crypt.php => * "소금 매개 변수는 선택 사항입니다."*. –

+0

나는 그 문제에 대해 더 많이 알고있다. –

+0

salt 매개 변수는 선택 사항입니다. 그러나 crypt()는 소금이없는 약한 해시를 만듭니다. PHP 5.6 이상에서는 E_NOTICE 오류가 발생하지 않습니다. 더 나은 보안을 위해 충분한 소금을 지정해야합니다 ... 적어도 topisstarter가 PHP 5.5.0+를 사용하고 있으므로 이제 그는 –