사이트/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개 / 댓글 4개
SELECT * FROM Register2 WHERE ID = 'admin' and PASSWORD = 'de3248ecb11c0d9860d231b147e0ddfd'
위 query를 DB에서 직접 실행해 보세요.
SELECT * FROM Register2 WHERE ID = 'admin'
이렇게 하셔서 password 컬럼 값도 확인해 보세요.
프로그램에는 이상이 없어 보입니다.
혹시 password varchar() 이 md5()결과 값보다 작은 것은 아닌지 모르겠군요.
답변에 대한 댓글 1개
PASSWORD=test123
이렇게 했는데 왜
where 'admin' and PASSWORD = 'de3248ecb11c0d9860d231b147e0ddfd'
이렇게 되었나 모르겠네요.
답변에 대한 댓글 1개
[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개
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]
$query = $con->query("SELECT * FROM Register2 ~~
$cnt = $query->num_rows;
다음처럼 수정해보세요
$query = $con->query("SELECT count(*) as cnt FROM Register2 ~~
$cnt = $query->cnt;
답변에 대한 댓글 1개
<?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을 반환합니다 ㅠ_ㅠ
답변을 작성하려면 로그인이 필요합니다.
정상적으로 1로 출력이 됩니다 ㅠ.ㅠ 감사합니다 엑스엠엘님.;;
처음에 md5를 할 마음 없이...20으로 제한한걸 모르고 있었네여
20을 초과해서 33자로 등록이 잘 되었습니다. 감사합니다 ㅎㅎ