2013-04-17 10 views
-1

이것은 매우 쉬운 것처럼 보이지만, 저의 삶은 왜 이것이 작동하지 않는지 알 수 없습니다. 단순히 객체에 함수를 전달하려고하는데 다음과 같은 에러가 발생합니다 :함수의 매개 변수로 객체를 전달하지 않습니다.

catch 가능한 치명적 오류 : write_query()에 전달 된 인수 3은 C : \ xampp \ htdocs에서 호출 된 mysqli의 인스턴스 여야합니다. \ CSP의 \ 로그인 \ 라인 (28)에 login.php와 C에서 정의 : \ XAMPP \ htdocs를 \ CSP \ php_scripts \ login_script.php 라인 (40)

이 제 기능 정의입니다 : 내가

function conn_database() 
    { 
     if (!empty($_POST['userid']) && !empty($_POST['password'])) 
     { 
      $conn = new mysqli('localhost', 'root', '', 'csp'); 

      if (mysqli_connect_errno()) 
      { 
       echo 'Connection to database failed:'.mysqli_connect_error(); 
       exit(); 
      } 
      return $conn; 
     } 

    } 


function write_query($userid, $password, mysqli $conn) 
    { 
     $query = 'select * from authorized_users ' 
     ."where userid= '$userid'" 
     ."and password_id='$password'"; 
     $result = $conn->query($query); 
     return $result; 
    } 

다음과 같이 호출합니다.

$conn = conn_database(); 
$result = write_query($userid, $password, $conn); 

나는 write_query()의 정의에 힌팅을 사용하고 있지만, 오류에서 이해할 수있는 것으로부터 세 번째 인자는 mysqli의 인스턴스로 간주되지 않는다. (저는 암호를 모두 소금으로 만들어야한다는 것을 알고 있습니다. 먼저 이것을 작동 시키려고합니다.) 모든 제안은 인정 될 것입니다

+1

이 줄은'false ($ _ POST [ 'userid']) &&! empty ($ _ POST [ 'password']))'를 반환합니다. 'get_connection' 안에'var_dump ($ _ POST)'를 쓰면 문제를 디버그하는 데 도움이됩니다. –

+0

conn_database() 함수는 아마도 NULL을 반환합니다. 나는 if 문장 ($ _POST ...)의 요점을 볼 수 없다. 전혀 이해가되지 않는다. – bestprogrammerintheworld

+0

@bestprogrammerintheworld OP 로직은 사용자가 로그인 ('login.php') 자격증 명을 제출할 때만 데이터베이스에 연결하려고한다는 것입니다. – Prisoner

답변

2

세 번째 매개 변수는 mysqli의 인스턴스가 아닙니다. null입니다. 이는 get_connection 함수가 아무 것도 반환하지 않기 때문입니다.

왜이 확인됩니다

if (!empty($_POST['userid']) && !empty($_POST['password'])) 

이것은 당신이 코드 만 시도하고 만 useridpassword에 대한 포스트 데이터를 제공하는 경우 SQL 서버에 연결을 의미합니다. 이 원하는 행동 경우이 같은 함수 밖에서 뭔가를 if 문을 넣어해야합니다

if (!empty($_POST['userid']) && !empty($_POST['password'])) 
    $conn = conn_database(); 
    $result = write_query($userid, $password, $conn); 
} 

을가 useridpassword에 관계없이, 설정되지 않은 것 같습니다 있지만. 입력에 name 속성을 확인하고 스크립트에 게시되는 내용을 확인하려면 var_dump($_POST)을 수행하십시오.

+0

나의 추론은 사용자가 적어도 빈 양식에 시간/리소스를 낭비하지 않고 데이터베이스에 연결하기 전에 사용자 이름과 암호를 채우려 고 시도했는지 확인하는 것이 었습니다. 하지만 당신의 해결책은 그것을 고쳤습니다. –

관련 문제