php 회원가입소스에서 복수회원 가입시 웹 페이지 인증 방법 좀

kimyh의 이미지

php 공부좀 할려고 회원가입 소스를 구해 설치중입니다.
어려운점은 이곳 KLDP 게시판을 통해 거의 다 해결되었는데

현재 설치중인 소스가 단일 회원가입 소스 입니다.

이경우 개인회원과 기업회원으로 나누어 회원을 가입시키고
인증 웹 페이지에서는 페이지의 내용에 따라 개인, 기업, 또는 개인이나 기업 모두, 가 들어갈수 있도록 인증 페이지를 만들려고 합니다.

그런데 개인회원과 기업회원으로 나누어 가입시키는것은 두개의 테이블을 만들어 각각 가입시키는것으로 해결 하였음니다

그러나 한개의 테이블에서 회원정보를 불러내 인증하는것은 문제될 것 이 없는데

기업 개인회원 모두 허용하는 인증 페이지의 경우 두개의 테이블의 회원정보(각각 아이디, 패스워드)를 불러내 인증하는 방법을 모르겠군요.

선배님들 좀 도와주세요.
감사합니다.

kimyh의 이미지

선배님들 도와주세요.
내용이 복잡해서 검색에도 잘 않나오는군요.
참고로 관련부분의 소스화일을 올려드립니다.개인회원 테이블은 memberPersonal이고 기업회원 테이블은 memberOffice
입니다. 물런 두개의 테이블은 똑 같은 의 db에 있고요.

페이지 인증 관련 소스는 logInForm.php 화일에서 아이디와패스워드를 입력하면
logOutResponse.php 에서 인증을 거처 페이지로 들어가도록 되어 있습니다.
참고로 관련된 부분의 소스를 올려드리오니 두개의 테이블에 있는 회원 아이디와 패스워드를
인증하여 개인,기업회원 모두가 1개의 페이지로 들어갈수 있는 방법좀 알려주세요.

logInForm.php

<?
@extract($HTTP_GET_VARS);
@extract($HTTP_POST_VARS);
@extract($HTTP_SESSION_VARS);
@extract($HTTP_COOKIE_VARS);
require("./config.php");
mysql_connect("$dbHost","$dbUser","$dbPass");
// 로긴폼에서 패스워드 찾기 화일로 이동시 처리후 동 화면으로 돌려주기위함
$thisPageURL = "$accountsURL/logInForm.$PHP"; 

// 설정된 현재 페이지를 쿠키저장
SetCookie("thisPageURL",$thisPageURL,"0","/",$cookieSite);
require ("./header.inc");
require ("./left.inc");
?>
<script language="JavaScript">
<!--
   function logInGo()
       {
       var str;
       str=document.logIn.id.value;
       if(str==""){
       alert("아이디를 입력해 주세요!!");
       document.logIn.id.focus();
       return false;
       }
              
       str=document.logIn.passwd.value;
       if(str=="")
       {
       alert("비밀번호를 입력해 주세요.");
       document.logIn.passwd.focus();
       return false;
       }
   }
//-->
</script>
<?
echo ("
<br><p><br><p><br><p>
<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">
~~~~~~~~~~
중략
~~~~~~~~~~~~~
</table>
    </td>
  </tr>
  <tr>
    <td>&nbsp;</td>
  </tr>
</table>
<?
echo ("</td>
  </tr>
</table>
");
require ("./footer.inc");
?>
위 화일에서 아이디와 패스워드를 입려하면 아래의 loginResponse.php화일에서 인증을 합니다.
-----------------------------------
loginResponse.php 화일
<?
@extract($HTTP_GET_VARS);
@extract($HTTP_POST_VARS);
@extract($HTTP_SESSION_VARS);
@extract($HTTP_COOKIE_VARS);
require("./config.php");
require("./errorMessages.inc");
// 아이디(ID)는 최소 4, 최대 10자의 영문자나 숫자가 조합된 문자열이어야 한다.
if(!ereg("[[:alnum:]+]{4,10}",$id)) {
   error("INVALID_ID");
   exit;
}
// 비밀번호는 최소 4자, 최대 10자의 영문자나 숫자가 조합된 문자열이어야 한다.
if(!ereg("[[:alnum:]+]{4,10}",$passwd)) {
   error("INVALID_PASSWD");
   exit;
}
// 로그인하기 위해 입력한 아이디와 비밀번호가 일치하는 레코드를 검색한다.
mysql_connect("$dbHost","$dbUser","$dbPass");
// 전달된 업소회원 id로 회원정보를 쿼리한다.
$result = mysql("$dbName","SELECT passwd, holding FROM $accountsTable WHERE id = '$id'");
$total = mysql_num_rows($result);
$row = mysql_fetch_row($result);
// 일치하는 ID가 없을 경우 
if (!$total) {
   error("LOGIN_ID_NOT_FOUND");
   exit;
}
if($row[1] == 'yes'){
   error("NOW_HOLDED");
   exit;
}
// 두 비밀번호를 비교하여 일치하지 않으면 에러처리 
if(strcmp($row[0],$passwd)) {      
    error("LOGIN_INVALID_PW");
    exit;
// 일시중지 처리 되어 있으면 에러처리
}else if($row[1] == 'yes'){
    error("NOW_HOLDED");
    exit;
}
// 위조건을 모두 통과하면,
else {
    // 쿠키를 생성한다.
    SetCookie("memberID",$id,$cookieEnduring,"/",$cookieSite);
    SetCookie("memberPasswd",$row[0],$cookieEnduring,"/",$cookieSite);
    SetCookie("memberPasswd",$rowp[0],$cookieEnduring,"/",$cookieSite);
    // 로긴이전에 신청한 서비스 페이지($pageURL)가 있을 경우 해당 페이지로 이동하고 아닐경우 초기페이지로 이동
    if($pageURL){
    &nbsp;&nbsp;&nbsp;&nbsp;echo ("<meta http-equiv='Refresh' content='0; URL=$pageURL'>");
    }else{
        echo ("<meta http-equiv='Refresh' content='0; URL=$homePage'>");
    }
}
?>
아마 초보인 제 생각으로는 위의 logInResponse.php 화일을 수정 해야 할것 같은데 고수 님들 좀 도와 주세요.
config.php 의 관련된 부분 소스
<?
~~```````
중략
~~~~~~~~~
$accountsTable = "memberOffice";  
$accountsTablep = "memberPersonal"; 
~~~~~~~~~
//홈페이지 URL. 끝에 "/"없이 
$homeURL = "http://www.budongsan.md"; 
//초기 페이지 URL 
$homePage = "http://www.budongsan.md/index.php"; 
//업소 회원관리 프로그램이 위치한 디렉토리 URL. 끝에 "/"없이 설정
$accountsURL = "http://www.budongsan.md/memberOffice";  
//개인 회원관리 프로그램이 위치한 디렉토리 URL. 끝에 "/"없이 설정
$accountsURLp = "http://www.budongsan.md/memberPersonal";  
//업소 회원관리 프로그램이 위치한 루트 디렉토리. 끝에 "/"없이 설정
$accountsRoot = "/usr/local/apache/htdocs/memberOffice";  
//개인 회원관리 프로그램이 위치한 루트 디렉토리. 끝에 "/"없이 설정
$accountsRoot = "/usr/local/apache/htdocs/memberPersonal";  
~~~~~~~~~~~~~
중략
~~~~~~~~~~~~
// 쿠키값 유지기간 설정
$cookieEnduring = 0;  //0이면 브라우져 종료시까지, time()=3600 이면 한시간 동안
// 설정된 쿠키값이 적용될 사이트
$cookieSite = ".budongsan.md";  // 맨앞에 '.' 추가
?>

살며 그리고 사랑하며...
정보는 공유할때 그 가치가 있는것.....
나의 조그만 지식공유는 남에게 엄청난 기쁨을 안겨 준다.

espereto의 이미지

LoginResponse.php 에서 업소회원 ID로만 처리하고 있는데요,
일치하는 ID가 없는 경우에는 개인회원 테이블에서 다시 검색해서 인증하도록 하면 될 듯.

근데, 왜 두 테이블을 나눠놨는지요? 궂이 나눌 필요가 없다면 하나로 합치고, 필드를 하나 둬서 개인회원인지 업체회원인지 구분하는 게 더 나을 것 같습니다만...... 두 경우의 회원 정보가 달라진다면 ID, 패스워드, 개인/업체 회원 정보 정도의 테이블을 하나 두고, 개인 회원 정보 테이블과 업체 회원 정보 테이블 이렇게 나누어도 될 것 같구요.

그리고, PHP쪽은 KLDP보다는 PHPSCHOOL이 더 나을 것 같습니다. 저도 PHP쪽 자료들 찾아볼 떈 PHPSCHOOL을 자주 쓴답니다. http://www.phpschool.com/

kimyh의 이미지

답변 감사합니다.
개인, 기업회원 테이블을 각 각 둔것은 가입 폼 양식이 달라서 한 테이블로 처리가 않될것 같아서입니다.

그래서 아래와 같은 방법으로 처리 할려고 하니 잘 않되는군요.
즉 회원이 memberOffice (기업회원)테이블 의 아이디와 패스워드를 불러서 인증을 하고 인증이되면 memberOffice 디렉토리에 있는 logInForm.php, -->logInResponse.php, -->인증 웹 페이지 순서로 인증을 하고

만일 memberPersonal (개인회원)테이블 에 있는 회원이 인증을 한다면 당연히 개인회원의 아이디와 패스워드가 memberOffice (기업회원)테이블 에는 없을것이므로 이경우 아래 화일과 같이 memberPersonal 디렉토리에 있는 logInForm.php를 열어 logInResponse.php, -->인증 웹 페이지 순서로 인증을 하면 될것 같아 아래처럼 화일을 바꾸어 시험해보니

memberOffice (기업회원) 은 인증이 잘되는데 memberPersonal (개인회원)테이블 에 있는 개인회원은 인증이 않됩니다.

왜 그런지 선배님들 좀 살펴 주셨으면 합니다.

수정한 memberOffice 디렉토리에 있는 logInResponse.php

<?
@extract($HTTP_GET_VARS);
@extract($HTTP_POST_VARS);
@extract($HTTP_SESSION_VARS);
@extract($HTTP_COOKIE_VARS);

require("./config.php");
require("./errorMessages.inc");
// 아이디(ID)는 최소 4, 최대 10자의 영문자나 숫자가 조합된 문자열이어야 한다.
if(!ereg("[[:alnum:]+]{4,10}",$id)) {
   error("INVALID_ID");
   exit;
}

// 비밀번호는 최소 4자, 최대 10자의 영문자나 숫자가 조합된 문자열이어야 한다.
if(!ereg("[[:alnum:]+]{4,10}",$passwd)) {
   error("INVALID_PASSWD");
   exit;
}

// 로그인하기 위해 입력한 아이디와 비밀번호가 일치하는 레코드를 검색한다.

mysql_connect("$dbHost","$dbUser","$dbPass");

// 전달된 업소회원 id로 회원정보를 쿼리한다.
$result = mysql("$dbName","SELECT passwd, holding FROM $accountsTable WHERE id = '$id'");
$total = mysql_num_rows($result);

$row = mysql_fetch_row($result);

// 일치하는 ID가 없을 경우 
if (!$total) {

//   error("LOGIN_ID_NOT_FOUND");

$file_open = fopen("/usr/local/apache/htdocs/memberPersonal/logInForm.php","r");
//if (!$file_open) {
//    echo ("화일을 열수 없습니다 나리님!");
//     } else {
//    echo ("화일을 열었 습니다 나리님!");
//}
fclose($file_open);

   exit;

}

if($row[1] == 'yes'){

   error("NOW_HOLDED");
   exit;
}

// 두 비밀번호를 비교하여 일치하지 않으면 에러처리 
if(strcmp($row[0],$passwd)) {      

//    error("LOGIN_INVALID_PW");

$file_open = fopen("/usr/local/apache/htdocs/memberPersonal/logInForm.php","r");

fclose($file_open);

    exit;

// 일시중지 처리 되어 있으면 에러처리
}else if($row[1] == 'yes'){

    error("NOW_HOLDED");
    exit;
}


// 위조건을 모두 통과하면,
 else {

    // 쿠키를 생성한다.
    SetCookie("memberID",$id,$cookieEnduring,"/",$cookieSite);
    SetCookie("memberPasswd",$row[0],$cookieEnduring,"/",$cookieSite);

    // 로긴이전에 신청한 서비스 페이지($pageURL)가 있을 경우 해당 페이지로 이동하고 아닐경우 초기페이지로 이동
    if($pageURL){
 
    	echo ("<meta http-equiv='Refresh' content='0; URL=$pageURL'>");
    
    }else{
     
        echo ("<meta http-equiv='Refresh' content='0; URL=$homePage'>");
    
    }
}
?>

도와 주세요.
PHP SCHOOL 에도 질문 올렸습니다.

싸이트 참고 ; http://budongsan.md

살며 그리고 사랑하며...
정보는 공유할때 그 가치가 있는것.....
나의 조그만 지식공유는 남에게 엄청난 기쁨을 안겨 준다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.