아보커 리누렉스 한 잔 보내드릴게요.

제발 알려주세요.


$getPASS = mysqli_result($getPASS, 0);

요즘 버전 형식으로 쓰라는거 같은 오류가 나타나는데 도저히 모르겠어요.


Fatal error: Uncaught Error: Call to undefined function sqli_fatch_row() in /home/hosting_users/ikh2005/www/member/login2.php:32 Stack trace: #0 {main} thrown in /home/hosting_users/ikh2005/www/member/login2.php on line 32




아래 블로그에서 참고한건데 제대로 된건지 좀 봐주세요. 여러군데 고쳤는데도 고칠 곳이 계속 나오네.

---------------------------------------------------------------------------------------------------

2) 로그인 처리


가장 중요한 부분은 아무래도 여기다.

그런데 사전작업이 조금 필요하다. 로그인을 하려면 아이디/비밀번호가 일단 데이터베이스에 등록되어 있어야 하니깐,

mySQL 안에 임의로 MEMBERS라는 테이블 안에 id(char), password(char), token(char 64) 정도로 필드를 만들어두자.

각각의 필드는 다음의 역할을 할 것이다.


1) id : 로그인에 필요한 아이디
2) password: 로그인에 필요한 비밀번호
3) token: 로그인 한 후에 로그인 유지를 위해 임의의 값을 여기에 넣어둔 후 대조함으로써 로그인 유지


그리고 적당히 자신이 로그인에 쓸 아이디와 비밀번호를  mySQL에 하나 넣어둔다. token 값은 그냥 0으로 두고.


이제 코딩을 해보자면, 

<?php
//세션을 사용하기 위해 선언하는 부분
session_cache_limiter('');
session_start();
//데이터베이스에 접근하기 위한 부분
$dbid = "DB아이디";
$dbpass = "DB비밀번호";
$dbname ="DB네임";
$dbhost = "localhost";
$sqlConn = mysql_connect($dbhost, $dbid, $dbpass);
mysql_select_db($dbname, $sqlConn);
//아이디와 비밀번호의 값을 POST방식으로 받는 것
$id = $_POST['loginID'];
$pass = $_POST['loginPASS'];
//입력받은 아이디가 존재하는지 체크하기 위해 데이터베이스에서 id를 가져옴
$getID = "SELECT id FROM MEMBERS WHERE id='$id'";
$getID = mysql_query($getID);
$getID = mysql_fetch_array($getID);
//아이디가 있다면
if($getID['id']) {
//아이디를 바탕으로 그 아이디가 가진 곳의 비밀번호를 가져온다
$getPASS = "SELECT password FROM MEMBERS WHERE id='$id'";
$getPASS = mysql_query($getPASS);
$getPASS = mysql_result($getPASS, 0);
//데이터베이스에서 가져온 비밀번호가 입력받은 비밀번호와 같다면,
if($getPASS == $pass) {
//64자리의 무작위 문자열을 생성한다.
//이 64자리의 임의의 수가 바로 토큰으로 로그인 대조에 사용할 키 값.
$key = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789^/';
for($i=0;$i<=63;$i++)
$token .= $key[rand(0,63)];
//방금 만든 토큰을 데이터베이스에 업데이트한다.
//입력받은 아이디가 있는 위치에 업데이트.
$updateToken = "UPDATE MEMBERS SET token='$token' WHERE id='$id'";
$updateToken = mysql_query($updateToken);
//세션에 토큰 즉 키 값을 등록한다.
$_SESSION['token'] = $token;
return 0;
}
else {
echo "PASSWORD ERROR";
return 1;
}
}
else {
echo "ID DOESN'T EXIST";
return 1;
}
?>

isset()이나 is_null()로 변수를 좀 체크하는게 좋긴하겠지만.. 이정도로도 적당히 넘어갈 수 는 있을 것 같다.

설명은 주석으로 붙여놨으니 필요없을듯 하다.


--------------------------------------------------------------------------------------------------

아래는 내가 한거

<?php
 //세션을 사용하기 위해 선언하는 부분
 session_cache_limiter('');
 session_start();

 error_reporting(E_ALL);
 ini_set("display_errors", 1);
 

//데이터베이스에 접근하기 위한 부분
 $dbid = "";
 $dbpass = "";
 $dbname ="";
 $dbhost = "";
 
 $sqlConn = mysqli_connect($dbhost, $dbid, $dbpass);
 mysqli_select_db($sqlConn, $dbname);
 
 //아이디와 비밀번호의 값을 POST방식으로 받는 것
 $loginID = $_POST['loginID'];
 $loginPASS1 = $_POST['loginPASS'];

 //입력받은 아이디가 존재하는지 체크하기 위해 데이터베이스에서 id를 가져옴
 $getID = "SELECT loginID FROM userDB WHERE loginID='".$loginID."'";
 $getID = mysqli_query($sqlConn, $getID);
 $getID = mysqli_fetch_array($getID);
 
 //아이디가 있다면
 if($getID['loginID']) {
  //아이디를 바탕으로 그 아이디가 가진 곳의 비밀번호를 가져온다
  $getPASS = "SELECT loginPASS1 FROM userDB WHERE loginID='".$loginID."'";
  $getPASS = mysqli_query($sqlConn, $getPASS);
  $getPASS = mysqli_result($getPASS, 0);                                                                <<<<----------- 일단 여기서 오류가 납니다. 이 전에 다른것도 많았는데 일단 해결.
  
  //데이터베이스에서 가져온 비밀번호가 입력받은 비밀번호와 같다면,
  if($getPASS == $loginPASS1) {
   //64자리의 무작위 문자열을 생성한다.
   //이 64자리의 임의의 수가 바로 토큰으로 로그인 대조에 사용할 키 값.
   $key = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789^/';
   for($i=0;$i<=63;$i++)
    $token .= $key[rand(0,63)];
   
   //방금 만든 토큰을 데이터베이스에 업데이트한다.
   //입력받은 아이디가 있는 위치에 업데이트.
   $updateToken = "UPDATE userDB SET token='$token' WHERE loginID='".$loginID."'";
   $updateToken = mysqli_query($updateToken);
  
   //세션에 토큰 즉 키 값을 등록한다.
   $_SESSION['token'] = $token;
  
   return 0;
  }
  else {
   echo "PASSWORD ERROR";
   return 1;
  }
 }
 
 else {
  echo "ID DOESN'T EXIST";
  return 1;
 }
?>