채택완료

애플리케이션 연동 작업 중 1이 나와야 하는데 0이 나오는 이유를 모르겠네요

사이트/handler.php?action=register&ID=admin&PASSWORD=test123 (DB에 정상등록 가능)

사이트/handler.php?action=login&ID=admin&PASSWORD=test123 (DB에서 0을 반환...)

 

아래 소스로 로그인을 시도시 0이 반환되는데..뭐가 문제인지 알 수가 없어서요

register 부분은 DB 에 잘 등록이 됩니다.

 

login 부분만 0으로 반환이 되는데 뭐가 문제인 걸까요?

에러가 나는것도 아니고 같은 아이디와 비번을 등록하거나 다르게 등록하거나 0으로만

출력이 되는데 제가 오타라도 낸 걸까요? 

 

PHP 버전은 8 입니다..

 

그냥 홈페이지 디렉토리에 php 파일 하나 만들어서 애플리케이션으로 DB연동 작업을 하려고 하는데

시작부터 막히는 부분이라.. 난감 하네요 php 버전이 달라서 그런건지 이유를 도통 모르겠습니다

 

고수님들의 눈에는 if문의 login에 0이 왜 반환되는지 아시는분이 계실까요?

 

Copy
<?php

include('db.php');

$action = $_GET['action'];

$ID = $con->real_escape_string($_GET['ID']);
$PASSWORD = $con->real_escape_string(md5($_GET['PASSWORD']));

if(!$action)
{
    echo "Please enter an action.";
}
else
{
    if($action == "register")
    {

        if($query = $con->query("INSERT INTO Register2 (ID,PASSWORD) VALUES ('$ID','$PASSWORD')"))
        {
            echo "1";
        }
        else
        {
            echo "0";
        }
    }
    else if($action == "login")
    {
        $query = $con->query("SELECT * FROM Register2 WHERE ID = '$ID' and PASSWORD = '$PASSWORD'");
        $cnt = $query->num_rows;

        if($cnt > 0)
        {
            echo "1";
        }
        else
        {
            echo "0";
        }
    }
    else
    {
        echo "Invalid action.";
    }
}

?>
|

답변 4개 / 댓글 4개

채택된 답변
+20 포인트

SELECT * FROM Register2 WHERE ID = 'admin' and PASSWORD = 'de3248ecb11c0d9860d231b147e0ddfd'

위 query를 DB에서 직접 실행해 보세요.

SELECT * FROM Register2 WHERE ID = 'admin'

이렇게 하셔서 password 컬럼 값도 확인해 보세요.

 

프로그램에는 이상이 없어 보입니다.

 

혹시 password varchar() 이 md5()결과 값보다 작은 것은 아닌지 모르겠군요.

답변에 대한 댓글 1개

우어어어어;;;; 마지막 부분의 Varchar() 값이 20으로 되있었는데;; 50으로 바꿔주니
정상적으로 1로 출력이 됩니다 ㅠ.ㅠ 감사합니다 엑스엠엘님.;;

처음에 md5를 할 마음 없이...20으로 제한한걸 모르고 있었네여
20을 초과해서 33자로 등록이 잘 되었습니다. 감사합니다 ㅎㅎ

PASSWORD=test123

이렇게 했는데 왜

where 'admin' and PASSWORD = 'de3248ecb11c0d9860d231b147e0ddfd'

이렇게 되었나 모르겠네요.

답변에 대한 댓글 1개

혹시 아래처럼 md5 암호화 때문에 여쭤보시는 걸까요?
[code]
$PASSWORD = $con->real_escape_string(md5($_GET['PASSWORD']));
[/code]

md5 암호화를 풀거나 걸어도 동일하게 0을 반환합니당 T_T

1. echo "SELECT * FROM Register2 WHERE ID = '$ID' and PASSWORD = '$PASSWORD'";

하셔서 나오는 query문을 직접 실행해 보세요.

2. db.php 내용을 올려 보세요.

답변에 대한 댓글 1개

[code]
else if($action == "login")
{
echo "SELECT * FROM Register2 WHERE ID = '$ID' and PASSWORD = '$PASSWORD'";
}
else
{
echo "Invalid action.";
}
[/code]

위와같이 하니깐

SELECT * FROM Register2 WHERE ID = 'admin' and PASSWORD = 'de3248ecb11c0d9860d231b147e0ddfd'

정상적으로 출력은 잘 되는거 같습니다.

db.php 는 아래와 같이 간단하게 되어 있습니다

[code]
<?php

$host = "localhost";
$user = "유저";
$pass = "비밀번호";
$data = "데이터베이스";

$con = new mysqli($host, $user, $pass, $data);

if($con->connect_errno)
{
printf("Connect failed: %s\n", $con->connect_errno);
}

?>
[/code]

Copy
$query = $con->query("SELECT * FROM Register2 ~~

$cnt = $query->num_rows;
 

다음처럼 수정해보세요

 

$query = $con->query("SELECT count(*) as cnt FROM Register2 ~~

$cnt = $query->cnt;

 

답변에 대한 댓글 1개

[code]
<?php

include('db.php');

$action = $_GET['action'];

$ID = $con->real_escape_string($_GET['ID']);
$PASSWORD = $con->real_escape_string(md5($_GET['PASSWORD']));

if(!$action)
{
echo "Please enter an action.";
}
else
{
if($action == "register")
{

if($query = $con->query("INSERT INTO Register2 (ID,PASSWORD) VALUES ('$ID','$PASSWORD')"))
{
echo "1";
}
else
{
echo "0";
}
}
else if($action == "login")
{
$query = $con->query("SELECT count(*) as cnt FROM Register2 WHERE ID = '$ID' and PASSWORD = '$PASSWORD'");
$cnt = $query->cnt;

if($cnt > 0)
{
echo "1";
}
else
{
echo "0";
}
}
else
{
echo "Invalid action.";
}
}

?>
[/code]

수정해 보았는데 동일하게 0을 반환합니다 ㅠ_ㅠ

답변을 작성하려면 로그인이 필요합니다.