2015-01-12 1 views
1

이제 SQL 데이터베이스를 사용하는 방법을 배우기 시작했습니다. 나는 YouTube 튜토리얼을 따라 가고 있었다. 그러나 데이터베이스에 연결하는 데 문제가있는 것 같습니다. 나는 cPanel에서 phpMyAdmin과 MySQL을 사용하고 있습니다.PHP 및 SQL 로그인 - "사용자를 찾을 수 없음"

로그인 페이지를 테스트 할 때 phpMyAdmin에서 수동으로 설정 한 사용자 계정의 정보를 입력했지만 "입력 한 사용자 이름을 찾을 수 없습니다."라는 오류가 계속 표시됩니다.

내가 뭘 잘못하고 있니? 정확한 데이터베이스 이름과 암호 및 올바른 데이터베이스 이름을 입력하고 있음을 알고 있습니다. 여기

<?php 

mysql_connect("localhost", "username", "password"); 
mysql_select_db("databasename"); 

?> 

내 login.php입니다 : 여기

내 connect.php의

if ($_POST['loginbtn']) 
{ 
$user = $_POST['user']; 
$password = $_POST['password']; 

if ($user) 
{ 
    if ($password) 
    { 
     require("connect.php"); 

     $password = md5(md5("additional".$password."additional")); 

     // echo "$password"; 

     $query = mysql_query("SELECT * FROM users WHERE username='$user'"); 
     $numrow = mysql_num_rows($query); 
     if (!numrows == 1) 
     { 
      $row = mysql_fetch_assoc($query); 

      $dbid = $row['id']; 
      $dbuser = $row['username']; 
      $dbpass = $row['password']; 
      $dbactive = $row['active']; 

      if ($password == $dbpass) 
      { 
       if ($dbactive == 1) 
       { 
        //set session info 
        $_SESSION['userid'] = $dbid; 
        $_SESSION['username'] = $dbuser; 

        echo "You have been logged in as <b>$dbuser</b>. <a href='./member.php'>Click here</a> to go to the member page."; 
       } 
       else 
        echo "You must activate your account before you can logon. $form"; 
      } 
      else 
       echo "You did not enter the correct password. $form"; 
     } 
     else 
      echo "The username you entered was not found. $form"; 

     mysql_close(); 
    } 
    else 
     echo "You must enter your password. $form"; 
} 
else 
    echo "You must enter your username. $form"; 
} 
else 
echo $form; 

?> 
+4

변장 *으로 축복을 부르십시오. MD5 및 더 이상 사용되지 않는 MySQL 기능은 치명적인 혼란을 야기합니다. 그 자습서는 철저히 웹에서 제거해야합니다. 너는 너의 열쇠를 버리고 문을 활짝 열어 놓는 것도 좋을 것이다. MD5 주제에 대해 읽어보십시오. http://security.stackexchange.com/questions/19906/is-md5-considered-insecure –

+1

[** 준비된 명령문과 함께 ** mysqli **] (http : //www.php .net/manual/ko/mysqli.quickstart.prepared-statements.php) 또는 [** 준비된 명령문이있는 PDO **] (http://php.net/pdo.prepared-statements). 암호 저장을 위해서는 [** CRYPT_BLOWFISH **] (http://security.stackexchange.com/q/36471) 또는 PHP 5.5의 ['password_hash()'] (http : // www.php.net/manual/en/function.password-hash.php) 함수를 호출합니다. PHP <5.5의 경우 [password_hash() 호환 팩]을 사용하십시오 (https://github.com/ircmaxell/password_compat). –

+0

데이터베이스에 연결 중입니다. 그러나'! numrows == 1'은 하나의 결과 (쿼리에서 한 행) 만 반환했다면'입력 한 사용자 이름을 찾을 수 없습니다 ... '라고 말합니다. 아마도'numrows == 1 '또는'numrows> 0 '일 수 있습니다. –

답변

2

내게로와 프레드[email protected] 발견으로, 당신의 가능한 문제는이 2 줄에 있습니다 :

$numrow = mysql_num_rows($query); 
if (!numrows == 1) 

첫 번째 줄은 괜찮지 만, 대신 이 필요합니다.

두 번째 줄은 문제가있는 곳입니다. 더 accuratly

if(!(defined('numrows') || 'numrows') == 1) 

또는 :

현재 귀하의 if은 동일합니다

if(defined('numrows')) 
{ 
    if(!numrows == 1) 
    { 
     // [code here ...] 
    } 
} 
else if(!'numrows' == 1) 
{ 
    // [same code here ...] 
} 

당신이 원하는 바가 아니다. (PHP는 정의되지 않은 경우 알려지지 않은 상수를 문자열로 암시 적으로 변환합니다.)

또한 numrows의 부정이 1인지 확인합니다. numrows이 0이지만 코드가있는 경우 마치 성공한 것처럼 계속됩니다.

이를 사용해야합니다 :

$numrows = mysql_num_rows($query); 
if ($numrows) 

이하를 :

if (mysql_num_rows($query)) 

을 내가 $numrows==1을하지 않는 이유는 무엇입니까?

글쎄, 0과 다른 숫자는 부울 값 True과 같으므로 쓸데없는 것 근처에서 확인하십시오.
가독성을 높이는 데 도움이됩니다.

관련 문제