2016-07-07 1 views
-2

좋아요, 원래이 질문은 php에 올렸지 만 이후로는 내가 거의 알지 못하는 서버 설정 문제 일 수 있다는 것을 깨달았습니다. 나는 PHP 스크립트를 남겨두고 누군가가 이것에 대해 약간의 포인터를 가지고 있기를 바라고 있습니다. 이미 권한을 확인했습니다 (755).apache2 and php - please please

"NetworkError: 500 Internal Server Error - http://localhost/register.php?name=uname&password=upassword"

내가 여기에 누군가가 내 오류를 잡을 수있을 것이라고 기대했다 -이 명백한 경우 내가 가서 미안 해요 학습했습니다.

<?php 

define('USER', 'root'); 
define('PASS', 'password'); 



     $dbh = new PDO('mysql:host=localhost;dbname=users', USER, PASS); 

$uname = $_POST['uname']; 
$upassword = password_hash($_POST['upassword'], PASSWORD_DEFAULT); 

$query = 'INSERT INTO `users` (`name`, `password`) VALUES (?,?)'; 
$query->bind_param($uname, $upassword); 



$queryResults = $dbh->prepare($query); 
    $queryResults->execute(); 

    $queryResults = null; 
    $dbh = null; // close the connection 

?>

이 나에게 (파이어 폭스에 불을 지르고에서) PHP 스크립트를 나타내는 500 내부 서버 오류를주고 유지하고, 내가 잘못 갈거야 어디 정말 알아낼 수 없습니다. 필요한 경우 아약스를 게시 할 수도 있습니다.

+0

단지 참고 사항 : 결코 인증 데이터를 $ _GET을 통해 전달하십시오. mitom 공격으로 $ _POST도 인식 할 수 있지만 모든 단일 로그 파일에 $ _GET이 표시됩니다. 또한 : 결코 암호를 일반 텍스트로 저장하지 마십시오. [password_hash] (http://php.net/manual/en/function.password-hash.php)를 사용하십시오 –

답변

3

쿼리 문자열 http://localhost/register.php?name=uname&password=upassword"을 사용하고 있습니다. 그것의 순전히 GET 방법.

GET 방법이 있는지 확인하려면 GET 방법 데이터에 액세스해야합니다.

$uname = ""; 
if(isset($_GET['uname'])) { 
    $uname = $_GET['uname']; 
} 

$upassword = ""; 
if(isset($_GET['password'])) { 
    $upassword = $_GET['password']; 
} 

if(($uname != "") && ($upassword != "")) { 
    $upassword = password_hash($upassword, PASSWORD_DEFAULT) 

    $query = sprintf("INSERT INTO `users` (`name`, `password`) VALUES (%s, %s)", $uname, $upassword); 

    ----- Statements ------ 
} 
+0

http (POST/PUT/DELETE) http 메소드 그러나'REQUEST_URI'는 항상'$ _GET' 수퍼 글로벌으로 파싱됩니다. –

+0

정보를 제공해 주셔서 감사합니다 .- 모든 $ _GET을 $ _POST로 바꾸면 POST 메서드가 올바르게 사용됩니다. GET을 사용하지 않도록 POST를 변경해야합니까? – user6559071

+0

@ user6559071 아무 것도 필요 없습니다. 대답이 만족 스러우면 틱을 클릭하여 답변으로 표시하십시오. –

1

나는 왜 그것이 500 오류를 던지고 있는지 모르지만 코드에 오류가 있습니다.

$query 변수가 문자열이고 $query->bind_param() 메서드가 없습니다. 나는 당신이 (bindParam가 PDO 동안 bind_param이 MySqli입니다)이 작업을 수행하려고하는 가정

당신이 $_GET 대신 $_POST을 사용해야합니다보다 당신이 URL을 통해 변수를 전달하는 또한 이후
$dbh->prepare($query); 
$sth->bindParam($uname, $upassword); 

. 이러한 매개 변수 $_GET에 존재하는 경우에만 그냥 사용할 것보다 반드시 먼저 확인합니다?name=uname&password=upassword 변수 이름은 namepassword을 의미

if (!empty($_GET['name'])) { 
    $uname = $_GET['name']; 
} 

참고. 값은 $_GET['name'] = 'uname'/$_GET['password'] = 'upassword'입니다.

안전하지 않으므로 $ _GET을 (를) 사용하여 사용자 이름과 비밀번호를 전달하지 마십시오. 안전한 파일을 사용하여 저장하십시오.