php 에서 변수값이 입력값과는 전혀 다른값이 나오는건 왜 그런

kimyh의 이미지

이럴경우 어떻게 설명을 해야할지 이제 php를 처음 시작하는 지라 질문 하기도 쉽지 않군요,
회원가입폼에서 입력한 내용하고는 전혀 상관없는 내용이 등록 확인 화면에서 나옵니다.
생년월일 입력에서 월, 일은 제대로 나오는데 생년(태어난 해)이 255라는 숫자만 계속 나오고
회원 가입한 날짜는 가입일과는 전혀 관계없는 1863637162 등 숫자가 나옵니다 .

아무리 소스를 찾아봐도 에러를 발견할수가 없군요.

등록확인부분 소스;

<?
//viewFrom=admin 인 경우의 조회방법을 추가할 것 
@extract($HTTP_GET_VARS);
@extract($HTTP_POST_VARS);
@extract($HTTP_SESSION_VARS);
@extract($HTTP_COOKIE_VARS);

require("./config.php");
require("./errorMessages.inc");

//$id = $_COOKIE['memberID']; 
//$passwd = $_COOKIE['passwd'];
//$memberID = $_COOKIE['memberID'];

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

//--------------

if($viewFrom == 'admin'){    
$result=mysql("$dbName","SELECT * FROM $accountsTable WHERE aid = $aid");
}else{    
$result=mysql("$dbName","SELECT * FROM $accountsTable WHERE id = '$memberID'");
}

//--------------

while($row = mysql_fetch_array($result)){$name = $row[name];

$ssNum1 = $row[ssNum1];   
$ssNum2 = $row[ssNum2];   
$holding = $row[holding];   
$id = $row[id];   
$passwd = $row[passwd]; 
$birthYear = $row[birthYear];  //------------------> 생년이 나오는 부분
echo "$passwd, $birthYear, ee"; //--->시험확인용으로 삽입
//--->yhkim, 255, ee ------------>위의 결과
$birthMonth = $row[birthMonth]; 
$birthDay = $row[birthDay];   
$calendar = $row[calendar];   
$sex = $row[sex];   
$email = $row[email];   
$mailing = $row[mailing];   
$phone1 = $row[phone1];   
$phone2 = $row[phone2];   
$phone3 = $row[phone3];   
$pPlace = $row[pPlace];   
$cellular1 = $row[cellular1];   
$cellular2 = $row[cellular2];   
$cellular3 = $row[cellular3];   
$zipCode1 = $row[zipCode1];   
$zipCode2 = $row[zipCode2];   
$address = $row[address];   
$aPlace = $row[aPlace];   
$date = $row[date];  //--------------->회원가입일이 나오는 부분
echo "$passwd, $birthYear, $date, eee"; //--->시험확인용으로 삽입
//--------->yhkim, 255, 1063640684, eee ---------->위의 결과
}
if(!strcmp($calendar,"lunar")) {    $birthMent = "음력";
~~~~~~~~~
~~~~~~~~~
중략
~~~~~
~~~~~~~~~~~~~
?>

위의 화일로 넘어오기전에는 정상적으로 나오는것을 echo 문으로 확인 했습니다.
아시는분 도움 바랍니다.

http://budongsan.md

fliers의 이미지

아직 해결 못하신 것 같네요,

년도의 경우는 왜 그런지 모르겠군요, 혹시 테이블 필드타입이 어떻게 되는지요?

그리고 날짜는 정상인것 같습니다. unix timestamp 값인데, 변환과정을 거쳐야합니다.

date("Y-m-d H:i:s", $date);

라고 해 주어야 제대로 보이게 됩니다. 자세한 표현형식은 레퍼런스를 찾아보시고요.

ps. 아래쪽에서도 답변했지만, $row를 각 변수로 저장할 것 같으면
extract($row); 라고 해줘도 같은 결과일 것 같군요.

kimyh의 이미지

선배님 반갑습니다.
다른건 다되고 생년만 않되길레 요거쯤이야 하고 쉽게 덤벼들었더니 벌써 1시가 넘었습니다.

역시 여기에 답해주시는분들의 그간의 노력을 알고도 남겠습니다.

관련부분의 코드를 올려드릴터이오니 살펴주시면 정말 감사하겠습니다.

입력부분 코드;

<?
~~~~~~~~~~
~~~~~~~~~~~~~~
중략
~~~~~~  
    if(!document.signin.birthYear.selectedIndex) { 
        alert("생년월일중 태어난 연도를 선택해 주세요!");
	document.signin.birthYear.focus();
        return;
    }

~~~~~~~~~~~~
중략
            <td height="40"> <img src="images/icon02.gif" width="8" height="7" align="absmiddle"> 
              생년월일</td>
            <td colspan="3"> 
              <?
				echo("<select name='birthYear' class=form>");
   				echo("<option value='0'>선택");
   				for($i = $birthYearFirst; 
                                    $i <= $birthYearLast; 
                                    $i++) {
      				    echo("<option value='$i'>${i}년");      
   				}
   				echo("</select> - &nbsp;");   

  				echo("<select name='birthMonth' class=form>");
   				echo("<option value='0'>선택");   
   				for($i = 1; $i <= 12; $i++) {
      				echo("<option value='$i'>${i}월");      
   				}
   				echo("</select> - &nbsp;");

   				echo("<select name='birthDay' class=form>");
   				echo("<option value='0'>선택");   
   				for($i = 1; $i <= 31; $i++) {
      				echo("<option value='$i'>${i}일");      
   				}
   				echo("</select>");
				?>
              <font color="#666666">[ 
              <input type="checkbox" name="calendar" value="lunar">
              음력] </font></td>

~~~~~~
중략
?>

회원가입입력이 잘되었는가를 화인하여 최종적인 화면으로 보여주기 전의 화면

<?

~~~~~~~~~~
중략
~~~~~~~~~~~~
// 회원가입 시기를 저장한다. 
$date = time();

//음력 표시가 없으면 양력으로 표시
if(!$calendar) $calendar = "solar";
//aid를 구한다.
$result=mysql("$dbName", "SELECT max(aid) FROM $accountsTable");
$row  =  mysql_fetch_row($result);
if(!$row[0]){
   $newAID = 1;
}else{
   $newAID = $row[0] + 1;
}
// DB에 등록정보 입력
mysql("$dbName", "INSERT INTO $accountsTable (
	aid,
	name,
	ssNum1,
	ssNum2,
	holding,
	id,
	passwd,
	birthYear,
	birthMonth,
	birthDay,

~~~~~~~~~~~
중략
~~~~~~~~~~~~
	address,
	aPlace,
	mileage,
	date
) VALUES (
	'$newAID',
	'$name',
	'$ssNum1',
	'$ssNum2',
	'$holding',
	'$id',
	'$passwd',
	'$birthYear',
	'$birthMonth',
	'$birthDay',
~~~~~~~~~~~~
중략
~~~~~~~~~~~
	'$address',
 	'$aPlace',
	'$mileage',
	'$date')");
// 쿠키 생성 처리 루틴
SetCookie("memberID",$id,$cookieEnduring,"/",$cookieSite);
SetCookie("memberPasswd",$passwd,$cookieEnduring,"/",$cookieSite);
echo ("<meta http-equiv='refresh' content='0; url=./viewAccount.$PHP'>");
?>

최종적으로 등록자에게 방금등록한 내용을 확인해주는 화일

<?
//viewFrom=admin 인 경우의 조회방법을 추가할 것 
@extract($HTTP_GET_VARS);
@extract($HTTP_POST_VARS);
@extract($HTTP_SESSION_VARS);
@extract($HTTP_COOKIE_VARS);

require("./config.php");
require("./errorMessages.inc");

//$id = $_COOKIE['memberID']; 
//$passwd = $_COOKIE['passwd'];
//$memberID = $_COOKIE['memberID'];

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

//--------------

if($viewFrom == 'admin'){    
$result=mysql("$dbName","SELECT * FROM $accountsTable WHERE aid = $aid");
}else{    
$result=mysql("$dbName","SELECT * FROM $accountsTable WHERE id = '$memberID'");
}

//--------------

while($row = mysql_fetch_array($result)){$name = $row[name];

$ssNum1 = $row[ssNum1];   
$ssNum2 = $row[ssNum2];   
$holding = $row[holding];   
$id = $row[id];   
$passwd = $row[passwd]; 
$birthYear = $row[birthYear];  //------------------> 생년이 나오는 부분
echo "$passwd, $birthYear, eee"; //--->시험확인용으로 삽입
$birthMonth = $row[birthMonth]; 
$birthDay = $row[birthDay];   
$calendar = $row[calendar];   
$sex = $row[sex];   
$email = $row[email];   
$mailing = $row[mailing];   
$phone1 = $row[phone1];   
$phone2 = $row[phone2];   
$phone3 = $row[phone3];   
$pPlace = $row[pPlace];   
$cellular1 = $row[cellular1];   
$cellular2 = $row[cellular2];   
$cellular3 = $row[cellular3];   
$zipCode1 = $row[zipCode1];   
$zipCode2 = $row[zipCode2];   
$address = $row[address];   
$aPlace = $row[aPlace];   
$date = $row[date];  //--------------->회원가입일이 나오는 부분

echo "$passwd, $birthYear, $date, eee"; //--->시험확인용으로 삽입

}

if(!strcmp($calendar,"lunar")) {
~~~~~~~
중략
~~~~~~
?>

desc accounts_lite; 화면의 일부

mysql> desc accounts_lite;
+------------+-----------------------+------+-----+---------+----------------+
| Field      | Type                  | Null | Key | Default | Extra          |
+------------+-----------------------+------+-----+---------+----------------+
| aid        | int(10) unsigned      |      | PRI | NULL    | auto_increment |
| name       | varchar(100)          |      |     |         |                |
| ssNum1     | varchar(6)            | YES  |     | NULL    |                |
| ssNum2     | varchar(7)            | YES  |     | NULL    |                |
| holding    | enum('yes','no')      | YES  |     | NULL    |                |
| id         | varchar(50)           |      |     |         |                |
| passwd     | varchar(30)           |      |     |         |                |
| type       | enum('per','ent')     | YES  |     | NULL    |                |
| level      | enum('pre','sta')     | YES  |     | NULL    |                |
| birthYear  | tinyint(4) unsigned   | YES  |     | NULL    |                |
| birthMonth | tinyint(2) unsigned   | YES  |     | NULL    |                |
| birthDay   | tinyint(2) unsigned   | YES  |     | NULL    |                |
| calendar   | enum('solar','lunar') | YES  |     | NULL    |                |
~~~~~~~~~~~
중략
~~~~

너무 길군요
그리고 $date는 화면에서 그렇게 나오느것이아니고 db에 저장된것을 보니까 그렇게 저장되어 있더라구요.
야심한 밤에 죄송합니다.
선배님 한번 살펴주세요.
감사합니다.

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

fliers의 이미지

birthYear 가 tinyint 였군요...

tinyint 는 0~255 까지 값만 저장합니다. 큰값이 들어가면 오버플로우가 되야하는데 tinyint(4) 라고 해서 넘어간것 같은데, 저도 자세힌 모르는 부분이군요.

년도는 255를 넘으니 바로 위의 사이즈인 smallint를 사용하시면 되겠습니다.

kimyh의 이미지

선배님 대단 하십니다.
알려주신대로 테이블 타입을 smallint(4)로 수정하고 해보니
단 한방에 해결 되는군요.
우와~~~
정말 대단하시고요.
참으로 감사드립니다.
거의 6시간을 낑낑대다 이제야 해결 했습니다.
다시한번 감사드립니다.
즐거운 밤 되시기 바랍니다.

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

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.