회원가입 프로그램을 구해서 설치중인데 에러좀 봐 주세요
글쓴이: kimyh / 작성시간: 목, 2003/09/11 - 4:02오후
php 프로그램을 공부할려고 회원가입 프로그램을 구해서 설치하면서
소스를 공부하고 있습니다.
선배님들 좀 도와 주세요.
mysql db에 접속은 잘 되는것 같은데
db에 있는 내용을 불러와서 처리를 못하는것 같군요.
다음은 id 중복검사부분의 php 소스인데
실제 등록된 똑같은 아이디가 있는데도 "입력하신 는 사용할수 있는 아이디 입니다." 라고 나오는가 하면 똑같은 아이디가 있지도 않은데 사용할수 없는 아이디라고 나옵니다.
따라서 방금 입력한 id갑($id)의 값을 출력하지 못하며 db에 있는값과 비교를 못하는것 같습니다.
도와 주시면 정말 많은 도움이 되겠습니다.
mysql은 mysql-3.23.43 버전이고 php는 php-4.2.1 입니다.
<? include ("dbcon.php"); function err($errMsg) { echo("<script language=\"javascript\">\n"); echo(" alert(\"".$errMsg."\");\n"); echo(" history.back();\n"); echo("</script>"); exit; } if ($id) { err("ID를 입력하세요."); } $id = trim($id); $id = addslashes($id); $id = strtolower($id); $query = "SELECT count(*) FROM member WHERE id = '".$id."'"; $result = @mysql_query($query); $row = mysql_fetch_row($result); if ($row[0]>0) { err("이미 존재하는 ID입니다."); } else { ?> <html> <head> <meta http-equiv="content-type" content="text/html; charset=euc-kr"> <title>ID중복검사</title> <meta name="generator" content="Namo WebEditor v5.0"> </head> <body bgcolor="white" text="black" link="blue" vlink="purple" alink="red"> <p align="center"><b>ID 중복검사</b></p> <table cellpadding="3" cellspacing="1" width="500" align="center"> <tr> <td bgcolor="#8C8CFF"> <p align="center"><b><font color="white"> </font></b></p> </td> </tr> <tr> <td> <p align="center"> </p> <p align="center">입력하신 <? echo "$id"; ?> 는 사용 하실수 있는 ID입니다.</p> <p align="center"><a href="javascript:ok('<?=$id?>')">선택</a> | <a href="id.php">다시검색</a></p> <p align="center"> </p> </td> </tr> <tr> <td bgcolor="#8C8CFF"> <p align="center"> </p> </td> </tr> </table> </body> </html> <script language="javascript"> function ok(str) { opener.document.form.id.value = str; opener.document.form.pwd.focus(); this.close(); } </script> <? } ?>
다음은 DB 테이블입니다.
mysql> desc member; +------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+--------------+------+-----+---------+----------------+ | no | int(20) | | PRI | NULL | auto_increment | | id | varchar(32) | | PRI | | | | pwd | varchar(64) | | | | | | name | varchar(32) | | | | | | email | varchar(200) | | | | | | homeurl | varchar(200) | YES | | NULL | | | sex | char(1) | | | | | | birthtype | char(1) | | | | | | birthyear | varchar(4) | | | | | | birthmonth | char(2) | | | | | | birthday | char(2) | | | | | | zip1 | char(3) | | | | | | zip2 | char(3) | | | | | | address1 | varchar(200) | | | | | | address2 | varchar(200) | YES | | NULL | | | tel1 | char(3) | YES | | NULL | | | tel2 | varchar(4) | YES | | NULL | | | tel3 | varchar(4) | YES | | NULL | | | phone1 | char(3) | YES | | NULL | | | phone2 | varchar(4) | YES | | NULL | | | phone3 | varchar(4) | YES | | NULL | | | job | varchar(200) | YES | | NULL | | | hobby | varchar(200) | YES | | NULL | | | regdate | datetime | YES | | NULL | | +------------+--------------+------+-----+---------+----------------+
Forums:
id 변수를 우선 체크 뒤에 쿼리문을 체크 해보는게 좋겠네요.
우선 검사하는 php 파일에서
echo $id;
로 $id값이 제대로 넘어 왔는지 체크 한뒤에
쿼리문을 직접 mysql 커맨드 창에서 쳐본뒤에 결과값이 제대로
나오는지 확인해보는것이 좋을거 같습니다.
sql query 문을 echo 해서 보는것도 좋을거 같네요;
아마 이부분에서 문제가 있지 않나 싶습니다. 함수 앞에 @ 를 붙였기
때문에 에러 출력도 되지 않았을테구요..
만약 쿼리문이 문제라면
select count(*) from member where id='$id';
로 한번 수정해보세요. :)
i am holden ~
답변 정말 감사합니다.echo "$id";를 세 군데를 삽입해서 시험
답변 정말 감사합니다.
echo "$id";를 세 군데를 삽입해서 시험해봤는데(아래소스 참고)id값을 가져오지 못합니다.
그리고 $query = "select count(*) from member where id = '".$id."'";을 $query = "select count(*) from member where id='$id'; 로 바꾸어
실행해보면 Parse error: parse error, unexpected T_STRING in /usr/local/apache/htdocs/member/id_ok.php on line 36 라는 에라가 생깁니다.
선배님께서 지적하신대로 $query = "select count(*) from member where id = '".$id."'"; 이부분이 문제가 있는것 같군요.
그리고 위의 query 문을 mysql 컴맨드 창에 입력하면 아래와 같이 뭐가 나오기는 합니다. 실제 데이타는 샘플로 몇개 들어가 있습니다.
count(*)가 아래와 같이 0으로 나오는데 맞게 나온건지는 모르겠군요.
한번 더살펴주세요 이것만 해결되면 정말 좋을것 같군요.
살며 그리고 사랑하며...
정보는 공유할때 그 가치가 있는것.....
나의 조그만 지식공유는 남에게 엄청난 기쁨을 안겨 준다.
[quote]그리고 $query = "select count(*) fro
이 부분에서 Parse error 가 난이유는 아마 마지막에 " 를 닫아주지 않아서 그런거 같네요.
"select count(*) from member where id='$id'";
이렇게 하면 parse error는 나지 않을거에요.
$id값이 넘어 오지 않는걸 보니 그래서 생긴 문제 같아요.
쿼리문에서 $id 값이 없는데 그걸로 where 문에 사용을 하니
일치하는 검색결과가 없겠죠 ^^
이 파일은 회원 가입을 받아 처리하는 부분의 php 같은데 회원 가입 폼이
있는 html 에 문제가 있을수도 있겠네요. $id 값이 넘어오지 않는다는건..
아 .. 그리고 mysql 커맨드 창에서 테스트 하실때는
이렇게 하시면 $id 라는 값은 없기 때문제 제대로 된 테스트가 안되구요.
select count(*) from member where id='holden';
과 같이 임의로 테이블에 존재하는 아이디를 넣어 주셔야 테스트가되요
만약 테이블에 아이디가 있음에도 불구하고 0으로 나온다거나 제대로된
결과가 나오지 않는다면 쿼리값에 문제가 있는거 같은데.. 제가 보기엔 그런
거 같지는 않네요. $id값을 넘겨 받지 못해서 생기는 문제 같아요.. ^^;;
혹시 모르니 마지막 방편으로
$id = $_POST['id'];
해서 $id변수를 받아 보세요. register_global 설정에 따라 차이가 있을수
있으니.. ^^
i am holden ~
우선 답변 대단히 감사합니다.답변을 학수 고대했는데 해 주셨군요.
우선 답변 대단히 감사합니다.
답변을 학수 고대했는데 해 주셨군요.
알려주신대로 해보고 글 올리겠습니다.
우선 감사부터 드립니다.
살며 그리고 사랑하며...
정보는 공유할때 그 가치가 있는것.....
나의 조그만 지식공유는 남에게 엄청난 기쁨을 안겨 준다.
선배님 정말 감사합니다.알려주신대로 $id = $_PO
선배님 정말 감사합니다.
알려주신대로 $id = $_POST['id']; 를 아래 소스처럼 삽입을 했더니 잘됩니다.
이 감사한 마음을 어떻게 전해야 할지 모르겠군요.
살며 그리고 사랑하며...
정보는 공유할때 그 가치가 있는것.....
나의 조그만 지식공유는 남에게 엄청난 기쁨을 안겨 준다.
위에 답변 해주신 chamguru님 다시한번 감사 드리고요우편번호 찾
위에 답변 해주신 chamguru님 다시한번 감사 드리고요
우편번호 찾는 부분에서도 계속 에러가 납니다.
검색에서 찾아보니 쿼리 실행하는 부분이 없다고 하는데 어디를 어떻게
수정을 해야할지 모르겠군요.
수고 스러우시겠지만 다시 한번 부탁 드립니다.
그런데
if ($dong) {
err("검색할 동을 입력하세요.");
}
이부분을
if (!$dong) {
err("검색할 동을 입력하세요.");
}
이렇게 고치면 동을 입력 했는데도 계속 동을 입력 하라는 창만 뜹니다.
!을 지우고
if ($dong) {
err("검색할 동을 입력하세요.");
}
이렇게 하면 아래와 같은 에러 메세지가 뜹니다.
원 소스에는 ! 가 있습니다.
우편번호 찾는 소스 부분;
에러메세지 ;
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /usr/local/apache/htdocs/member/zip_ok.php on line 18
살며 그리고 사랑하며...
정보는 공유할때 그 가치가 있는것.....
나의 조그만 지식공유는 남에게 엄청난 기쁨을 안겨 준다.
마찬가지로 변수를 받아오지 못해서 생기는 에러 같습니다.
아까 위에 에러와 마찬자기로 변수를 받아오지 못해서 생기는 에러 같습니다.
PHP 가 4.2.1 부터인가..(확실치 않음;) register_global 옵션이 off로 되
어 있을겁니다. 아마.. 보안상의 이유로 off해놨는데 그 해당 프로그램이 이전
버전의 PHP 에 맞추어져 제작되다 보니까 제대로 작동하지 않는거 같습니다.
그럴 경우에는 PHP 설정에서 register_global 옵션을 On 하시면 해결될
겁니다. 단 보안에 문제점이 생길수 있기 때문에, 원치 않으시다면 소스를
일일히 수정하져야 알겁니다. $_POST['변수명']; 이런식으로 POST 배열에
서 가져오셔야 할겁니다. 일일히 가져오시는게 귀찮다면 foreach 문으로
한번에 가져올 수도 있습니다.
이런식으로 하면 한번에 가져오실수 있을 겁니다. GET 방식의 경우도 마찬
가지로
이런식으로 가져올 수 있겠네요
i am holden ~
밤 늦게 까지 상세한 답변 정말 고맙습니다.알려주신대로 [cod
밤 늦게 까지 상세한 답변 정말 고맙습니다.
알려주신대로
를 삽입했으나 같은 내용의 에러가 나네요.
수정한 소스;
에러메세지;
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /usr/local/apache/htdocs/member/zip_ok.php on line 25
살며 그리고 사랑하며...
정보는 공유할때 그 가치가 있는것.....
나의 조그만 지식공유는 남에게 엄청난 기쁨을 안겨 준다.
result 값에 문제가 있어서 생기는 에러 입니다.
바로 이부분에서 mysql_query()함수를 통하여 받는 $result 값에 문제가
있기때문에 mysql_num_rows() 함수가 접근하려 하자 에러가 나는거 같
습니다. 아까도 말씀드렸다 시피 이는 변수값을 제대로 못 얻어와 생기는 경우
인거 같습니다.
foreach 문이 안된다면 extract() 함수를 사용할것을 권장합니다.
@extract($HTTP_POST_VARS);
@extract($HTTP_GET_VARS);
변수를 사용하기전에 사용하셔야 합니다. 코드 상단에 두시는게 좋을듯
하네요. 만약 위와 같이했는데도 에러가 난다면
$dong = $_POST['dong'];
이렇게 헤서 받아 보시구요 그래도 에러가 난다면 그때는 mysql_query
문에 이상이 있는것으로 생각됩니다.
아까와 마찬가지로 mysql 커맨드 창에서 해당 쿼리
를 직접 처보시면 됩니다.
mysql> select zipcode,sido,gugun,dong,bunji from zipcode where dong like '%서초동%';
이런식으로 테스트 해보셔서 검색된다면 쿼리의 문제는 아닐겁니다.
i am holden ~
지금이 12시 40분인데 정말 죄송합니다.정말 고맙습니다.mysql&
지금이 12시 40분인데 정말 죄송합니다.
정말 고맙습니다.mysql> select zipcode,sido,gugun,dong,bunji from zipcode where dong like '%서초동%'; 를 mysql 컴맨드창에 처보니
zipcode가 없다고 나오네요.
데이터베이스 테이블에 zipcode,sido,gugun,dong,bunji 등의 항목은 사실상 없거든요.
zip_ok.php와 같은 디렉토리에 zipcode.sql 만 있습니다.
아마 이게 문제인거 같은데 zipcode.sql 을 데이터베이스와 어떻게 매칭을 시킨가요. 정말 초보라서요.
데이터베이스테이블은 zip1, zip2, address1, address2 만 있습니다.
zipcode,sido,gugun,dong,bunji 를 모두 데이터 베이스 테이블에 만들어 주어야 하는지요.
그리고 $dong = $_POST['dong']; 을 삽입해서 확인해보면 $dong을 불러옵니다.
밤늦게 정말 죄송합니다.
살며 그리고 사랑하며...
정보는 공유할때 그 가치가 있는것.....
나의 조그만 지식공유는 남에게 엄청난 기쁨을 안겨 준다.
선배님 해결 했습니다.정말 많은 도움이 있었기에 해결되었습니다.역
선배님 해결 했습니다.
정말 많은 도움이 있었기에 해결되었습니다.
역시 db에 zipcode 테이블을 만들어주니까 되더군요.
앞으로 공부하다가 않되는 부분이 있으면 다시 질문 드릴테니 많은 도움 주시길 바랍니다.
밤늦게까지 참으로 감사합니다.
김양현 올림
살며 그리고 사랑하며...
정보는 공유할때 그 가치가 있는것.....
나의 조그만 지식공유는 남에게 엄청난 기쁨을 안겨 준다.
위에 답변해 주신 내용중에 db에 있는 내용을 불러오지 못한것은 php
위에 답변해 주신 내용중에 db에 있는 내용을 불러오지 못한것은 php 4.2.x 대 버전부터 보안상의 이유로 register_global 옵션이 off로 되어 있어서 그렇다고 하셨는데 매 프로그램 마다 전달 폼 타입이 POST 인가 GET 인가를 확인하여
@extract($HTTP_POST_VARS);
@extract($HTTP_GET_VARS); 를 적어 주는게 여간 복잡하지 않습니다.
또한 post 인지 get 인지 잘못 확인하여 바꾸어 적어주면 또 php가 작동을 하지않고요.
그래서 php 에서 환경설정하여 폼 전달형태가 post 이든 get 이든 항상 잘 작동 되도록 할려면 어떻게 ㅎ환경을 설정 해 주어야 하는지요.
알려주시면 많은 도움이 되겠습니다.
감사합니다.
살며 그리고 사랑하며...
정보는 공유할때 그 가치가 있는것.....
나의 조그만 지식공유는 남에게 엄청난 기쁨을 안겨 준다.
register_globals 옵션을 on으로 하시면 됩니다.
php 설정에서 register_global 옵션을 on 으로 설정하시면 될겁니다. 8)
i am holden ~
답변 감사드립니다.php가 있는 디렉토리에서 php.ini-dist
답변 감사드립니다.
php가 있는 디렉토리에서 php.ini-dist 화일과 /usr/local/lib 디렉토리에 있는 php.ini 화일을 바꾸고 시스템을 재부팅 했는데도 마찬 가지 입니다.
뭐가 잘못된 것일까요?
살며 그리고 사랑하며...
정보는 공유할때 그 가치가 있는것.....
나의 조그만 지식공유는 남에게 엄청난 기쁨을 안겨 준다.
댓글 달기