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

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

QA

애플리케이션 연동 작업 중 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()결과 값보다 작은 것은 아닌지 모르겠군요.

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

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


$query = $con->query("SELECT * FROM Register2 ~~
$cnt = $query->num_rows;
 
다음처럼 수정해보세요
 
$query = $con->query("SELECT count(*) as cnt FROM Register2 ~~
$cnt = $query->cnt;

 


<?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.";
	}
}

?>


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

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

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

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


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


위와같이 하니깐

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

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

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


<?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);
}

?>

PASSWORD=test123

이렇게 했는데 왜

where 'admin' and PASSWORD = 'de3248ecb11c0d9860d231b147e0ddfd'

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

답변을 작성하시기 전에 로그인 해주세요.
전체 123,125 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT