애플리케이션 연동 작업 중 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이 왜 반환되는지 아시는분이 계실까요?
<?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
SELECT * FROM Register2 WHERE ID = 'admin' and PASSWORD = 'de3248ecb11c0d9860d231b147e0ddfd'
위 query를 DB에서 직접 실행해 보세요.
SELECT * FROM Register2 WHERE ID = 'admin'
이렇게 하셔서 password 컬럼 값도 확인해 보세요.
프로그램에는 이상이 없어 보입니다.
혹시 password varchar() 이 md5()결과 값보다 작은 것은 아닌지 모르겠군요.
$query = $con->query("SELECT * FROM Register2 ~~
$cnt = $query->num_rows;
다음처럼 수정해보세요
$query = $con->query("SELECT count(*) as cnt FROM Register2 ~~
$cnt = $query->cnt;
!-->
1. echo "SELECT * FROM Register2 WHERE ID = '$ID' and PASSWORD = '$PASSWORD'";
하셔서 나오는 query문을 직접 실행해 보세요.
2. db.php 내용을 올려 보세요.
PASSWORD=test123
이렇게 했는데 왜
where 'admin' and PASSWORD = 'de3248ecb11c0d9860d231b147e0ddfd'
이렇게 되었나 모르겠네요.