세션

값을 전달하지 않고 값을 계속 유지시켜주는 방식

*세션에 많은 정보를 저장하면 안된다.

 

세션 VS 쿠키

세션에 저장되는 정보는 서버쪽에 저장

쿠키는 브라우저에 저장 (해킹 쉬움)

 

a.php

<?
  session_start();

  $_SESSION["name"] = '학생';
  $_SESSION["passwd"] = '암호';

  $name=$_SESSION["name"];
  $passwd= $_SESSION["passwd"];

  echo(" name = $name <br>");
  echo(" passwd = $passwd <br>");

  echo("<a href='./b.php'>b.php</a>");
?>

 

b.php

<?
  session_start();

  $_SESSION["name"] = '학생';
  $_SESSION["passwd"] = '암호';

  $name=$_SESSION["name"];
  $passwd= $_SESSION["passwd"];

  echo(" name = $name <br>");
  echo(" passwd = $passwd <br>");

  echo("<a href='./b.php'>b.php</a>");
?>

a.php
b.php

php.ini에 'session.auto_start = 1'로 설정하면 session_start() 함수를 생략 할 수 있다.

$_SESSION["name"] 변수와 $_SESSION["passwd"] 변수에 세션 값을 저장한다. 

이들 변수는 session_destroy() 함수나 session_unset() 함수가 호출되기 전까지 계속 유지된다.

 

▶ 세션 관련 함수

• bool session_start ( void )

  - 세션을 시작한다.
  - 매개 변수 없이 쓰인다.
  - session.auto_start=1로 설정하면 함수를 자동으로 실행한 것과 동일하다.
  - $_SESSION 배열을 이용해서 세션 변수를 등록한다.

 

• bool session_destroy( void )
  - 세션을 종료한다.
  - 매개 변수 없이 쓰인다.
  - 이후 세션을 이용하려면 새로운 세션을 시작해야 한다.

 

• void session_unset ( void )
  - 세션 변수를 모두 초기화 한다.
  - 매개 변수와 반환 값이 모두 없다.
  - 세션자체를 없애는 것은 아니다.

 

• string session_id ( void )
  - 세션 ID를 반환한다.

 

세션을 이용한 인증 처리

실선 : 마우스 클릭 / 점선 : 자동으로

• 테이블 입출력 프로그램
  - st_vi.php : student 테이블 출력 프로그램
  - st_in.html : student 테이블 입력 폼
  - st_in.php : student 테이블 입력 프로그램
• 인증 정보(계정) 등록 프로그램
  - id.html : 계정 등록 폼
  - id.php : 계정 등록 프로그램
• 로긴 프로그램
  - check.html : 로긴 정보 입력 폼
  - check.php : 로긴 프로그램

 

세션을 이용한 인증 처리 실습

인증을 위해 미리 테이블을 생성한다.

오라클에 접속해서 생성한다.

SQL> CREATE TABLE id(
  2  id varchar2(10),
  3  passwd varchar2(32) CONSTRAINT id_nu_passwd NOT NULL,
  4  CONSTRAINT user_pk_id PRIMARY KEY (id)
  5  );

테이블이 생성되었습니다.

 

• 계정 등록 프로그램

 

id.html

<html><head>
<meta http-equiv="content-type" content="text/html; charset=euc-kr">
<title> 계정등록 </title>
</head>
<body bgcolor="white" text="black" link="blue" vlink="purple" alink="red">
<form name="id" action="id.php" method="POST">
<center>
<table border="0" width="250">
  <tr>
    <td width="50"><p align="center">ID</p></td>
    <td>&nbsp;&nbsp;<input type="text" name="id"></td>
  </tr>
  <tr>
    <td width="50"><p align="center">passwd</p></td>
    <td>&nbsp;&nbsp;<input type="password" name="passwd"></td>
  </tr>
  <tr>
    <td colspan="2">
      <p align="center"><input type="submit" name="확인" value="확인"></p>
    </td>
  </tr>
<table>
</form>
</body></html>

 

id.php

<?
  require('conn.php');

  $id = $_POST["id"];
  $passwd = $_POST["passwd"];

  $sql="insert into id (id, passwd)
        values ('$id', DBMS_CRYPTO.Hash(to_clob(to_char('$passwd')),2))";

  $result=oci_parse($conn,$sql);
  $re=@oci_execute($result); // 입력된 값을 테이블에 저장한다.

  oci_free_statement($result);
  oci_close($conn);

  if(!$re){
    echo(" <script>
            window.alert('계정 등록 장애입니다.');
            history.go(-1);
            </script>
          ");
      exit;
    } // st_vi.php를 호출할 때 $id나 $passwd는 세션변수에 등록되었음으로
  else // 전달할 필요가 없다.
      echo(" <meta http-equiv='Refresh' content = '0; URL=st_vi.php'>");
?>

 

• 로긴 프로그램
로긴 프로그램은 st_vi.php로부터 호출된다. st_vi.php의 [login] 버튼을 클릭하면 check.html을 호출하여 id와 패스워드를 입력 받는다. 

입력된 id와 패스워드는 POST방식으로 check.php에 전달된다.

 

check.html

<html><head>
<meta http-equiv="content-type" content="text/html; charset=euc-kr">
<title> login </title>
</head>
<body bgcolor="white" text="black" link="blue" vlink="purple" alink="red">
<form name="login" action="check.php" method="POST">
<center>
<table border="0" width="250">
  <tr>
    <td width="50"><p align="center">ID</p></td>
    <td>&nbsp;&nbsp;<input type="text" name="id"></td>
  </tr>
  <tr>
    <td width="50"><p align="center">passwd</p></td>
    <td>&nbsp;&nbsp;<input type="password" name="passwd"></td>
  </tr>
  <tr>
    <td colspan="2">
      <p align="center"><input type="submit" name="확인" value="확인"></p>
    </td>
  </tr>
<table>
</form>
</body></html>

 

check.php

<?
  session_start();
  require('conn.php');

  $id = $_POST["id"];
  $passwd = $_POST["passwd"];

  $sql="select * from id
        where id = '$id'
        and passwd = DBMS_CRYPTO.Hash(to_clob(to_char('$passwd')),2)";

  $result=oci_parse($conn,$sql);
  $re=oci_execute($result);
  $row_num=oci_fetch_all($result,$row);
  oci_free_statement($result);
  oci_close($conn);

  if($row_num == 1){
    $_SESSION["id"] = $id;
    $_SESSION["passwd"] = $passwd;
    echo(" <meta http-equiv='Refresh' content = '0; URL=st_vi.php'>");
  }
  else{
    echo(" <script>
            window.alert('잘못된 계정 정보입니다.');
            history.go(-1);
            </script>
        ");
    exit;
  }
?>

 

• 로그인이 안된 상태에서 접근 불가능

log.php

<?
session_start();

   if(empty($_GET["logout"]))
   {}
   else session_unset();

   $id = $_SESSION["id"];
   $passwd = $_SESSION["passwd"];

   require('conn.php');

   $sql="select * from id
      where id= '$id'
      and passwd = DBMS_CRYPTO.Hash(to_clob(to_char('$passwd')),2)";

   $result=oci_parse($conn,$sql);
   $re=oci_execute($result);
   $row_num=oci_fetch_all($result,$row);

   if($row_num == 1)
   {
   }
   else
   {
      echo(" <script>
         window.alert('로그인이 필요합니다');
         history.go(-1);
         </script>
         ");
      }
?>

 

st_in.html

<?
  require('log.php')  // login이 안되어 있으면 접근 불가능한 것을 추가
?>

<html><head>
<meta http-equiv="content-type" content="text/html; charset=euc-kr">
<title> student 입력폼 </title>
</head>
<body bgcolor="white" text="black" link="blue" vlink="purple" alink="red">
<form name="insert" action="st_in.php" method="POST">
<center>
<table border="0" width="250">
  <tr>
    <td width="50"><p align="center">학번</p></td>
    <td>&nbsp;&nbsp;<input type="text" name="sno"></td>
  </tr>
  <tr>
    <td width="50"><p align="center">이름</p></td>
    <td>&nbsp;&nbsp;<input type="text" name="sname"></td>
  </tr>
  <tr>
    <td width="50"><p align="center">성별</p></td>
    <td>&nbsp;&nbsp;남<input type="radio" name="sex" value="남">,
                    여<input type="radio" name="sex" value="여"></td>
  </tr>
  <tr>
    <td width="50"><p align="center">학과</p></td>
    <td>&nbsp;&nbsp;<select name="major" size="1">
                      <option value="화학">화학</option>
                      <option value="생물">생물</option>
                      <option value="물리">물리</option>
                      <option value="유공">유공</option>
                      <option value="식영">식영</option></td>
  </tr>
  <tr>
    <td width="50"><p align="center">학년</p></td>
    <td>&nbsp;&nbsp;1<input type="radio" name="syear" value="1">,
                    2<input type="radio" name="syear" value="2">,
                    3<input type="radio" name="syear" value="3">,
                    4<input type="radio" name="syear" value="4"></td>
  </tr>
  <tr>
    <td width="50"><p align="center">학점</p></td>
    <td>&nbsp;&nbsp;<input type="text" name="avr"></td>
    </tr>
  <tr>
    <td colspan="2">
      <p align="center"><input type="submit" name="확인" value="확인"></p>
    </td>
  </tr>
</table>
</form>
</body></html>

 

로그인이 안된 상태에서 자료 입력하기를 바로 들어가려면 접근이 불가능하다.

 

• 테이블 입출력 프로그램
st_vi.php를 제외한 st_in.html과 st_in.php는 이전 소스와 동일해서 생략한다. st_vi.php는 로그인 상태와 로그인되지 않은 상태에 따라 출력 내용이 달라진다.

로그인 상태인 경우 데이터를 입력 버튼을 보여주지만 로그인이 아닌 상태에서는 로그인과 등록 메시지만 보여준다.

 

st_vi.php

<?
  //==========================로그인========================================
  session_start();

  if(empty($_GET["logout"])){}
  else session_unset(); // session_distroy 사용과 비교한다.

  $id = $_SESSION["id"];
  $passwd = $_SESSION["passwd"];

  require('conn.php');

  $sql="select * from id
        where id = '$id'
        and passwd = DBMS_CRYPTO.Hash(to_clob(to_char('$passwd')),2)";

  $result=oci_parse($conn,$sql);

  $re=oci_execute($result);
  $row_num=oci_fetch_all($result,$row);

  if($row_num == 1){ // 로긴 상태
      echo("<a href=./st_in.html>자료 입력하기</a>
            <a href=./st_vi.php?logout=$row_num>logout</a><hr>
      ");
  }
  else{ // 비로긴 상태
      echo(" <a href=./id.html>계정등록</a>
            <a href=./check.html>login</a><hr>");
  }

  //==========================자료입력========================================
  //echo("<a href=./st_in.html>자료 입력하기</a><hr>");

  //require('conn.php');

  //==========================삭제기능========================================
  $del=$_GET[del];        // $del 변수가 null이 아니면 행을 삭제하는 else절이 실행된다.
  if (empty($del)){}
  else {
	  $sql="delete from student where sno='$del'";
	  $result=oci_parse($conn,$sql);
	  oci_execute($result);
	  oci_free_statement($result);
	  }

  //==========================검색기능=========================================

    $search = $_GET[search];
	if (empty($search)) {
	 	$sql="select sno,sname,sex,major,syear,to_char(avr,'0.00') avr
	 	     from student order by sno";
	 	$result=oci_parse($conn,$sql);
	 }
	else {
	 	$sql="select sno,sname,sex,major,syear,to_char(avr,'0.00') avr
	 	       from student
	 	       where sname like '%{$search}%' order by sno";
	 	$result=oci_parse($conn,$sql);
	 }
	 oci_execute($result);

  //==========================================================================


  $row_num=oci_fetch_all($result, $row);  // $row_num : 전제 행의 수
  //echo("Row의 개수는 $row_num 입니다.<br><hr>"); // 행은 컬럼명, 열은 행번호

  oci_free_statement($result);
  oci_close($conn);

   $scale=5;                           // 화면에 출력할 행의 개수
   $start = $_GET[start];
   if (empty($start)){$start=0;}    // 첫 화면은 0에서 시작, 배열의 키값은 0에서 시작

  echo("<table border='1'>");
  for($i=$start; $i<($start+$scale); $i++) {
   if ($i<$row_num){
     echo("
    	<tr>
    		<td width='50'><p align='center'>{$row['SNO'][$i]}</p></td>
    		<td width='80'><p align='center'>{$row['SNAME'][$i]}</p></td>
    		<td width='20'><p align='center'>{$row['SEX'][$i]}</p></td>
    		<td width='20'><p align='center'>{$row['SYEAR'][$i]}</p></td>
    		<td width='50'><p align='center'>{$row['MAJOR'][$i]}</p></td>
    		<td width='30'><p align='center'>{$row['AVR'][$i]}</p></td>
    		<td width='30'><a href=./st_vi.php?del={$row[SNO][$i]}>del</a></td>
    	</tr>
    	");
  	}
	}
  echo("</table><br>");


  $p=$start-$scale;     // 이전 화면의 시작 위치
  $n=$start+$scale;     // 다음 화면의 시작 위치

  if($p>=0)
    echo("<a href=./st_vi.php?start=$p&search=$search>[이전페이지]</a>&nbsp;&nbsp;");
  else
    echo("이전페이지&nbsp;&nbsp;");
  if($n<$row_num)
    echo("<a href=./st_vi.php?start=$n&search=$search>[다음페이지]</a>");
  else
    echo("다음페이지");

  //echo("<br>");
  //echo($search); // 확인하기 위해 search 변수 출력
  echo("<hr>");
  echo("$row_num 열이 검색됨<br><br>");
?>

<form name='search' method='get' action='st_vi.php'>
 검색창 &nbsp;<input type='text' name='search'>
		   <input type='submit' name='확인' value='확인'>
 </form>

실행결과

login 전

계정을 등록한다.

 

계정등록

계정을 등록하고 로그인을 클릭한다.

 

login

로그인이 된다.

 

login 후

로그인하면 자료 입력하기를 할 수 있다.

다양한 기능 추가 (삭제, 검색, 화면단위 출력)

▶ 삭제 및 검색, 화면단위 출력 기능

위와 같이 검색기능을 활성화 할 것이다.

 

st_vi.php

<form name='search' method='post' action='st_vi.php'>
 검색창 &nbsp;<input type='text' name='search'>
		   <input type='submit' name='확인' value='확인'>
 </form>


<?
  echo("<a href=./st_in.html>자료 입력하기</a><hr>");

  require('conn.php');

  //==========================삭제기능========================================
  $del=$_GET[del];        // $del 변수가 null이 아니면 행을 삭제하는 else절이 실행된다.
  if (empty($del)){}
  else {
	  $sql="delete from student where sno='$del'";
	  $result=oci_parse($conn,$sql);
	  oci_execute($result);
	  oci_free_statement($result);
	  }

  //==========================검색기능=========================================

    $search = $_POST[search];
	if (empty($search))
	{
	 	$sql="select sno,sname,sex,major,syear,to_char(avr,'0.00') avr
	 	from student order by sno";
	 	$result=oci_parse($conn,$sql);
	 }
	else
	{
	 	$sql="select sno,sname,sex,major,syear,to_char(avr,'0.00') avr
	 	       from student
	 	       where sname like '%{$search}%' order by sno";
	 	$result=oci_parse($conn,$sql);
	 }
	 oci_execute($result);

  //==========================================================================


  $row_num=oci_fetch_all($result, $row);  // $row_num : 전제 행의 수
  echo("Row의 개수는 $row_num 입니다.<br><hr>"); // 행은 컬럼명, 열은 헹번호

  oci_free_statement($result);
  oci_close($conn);

   $scale=5;                           // 화면에 출력할 행의 개수
   $start = $_GET[start];
   if (empty($start)){$start=0;}    // 첫 화면은 0에서 시작, 배열의 키값은 0에서 시작

  echo("<table border='1'>");
  for($i=$start; $i<($start+$scale); $i++) {
   if ($i<$row_num){
     echo("
    	<tr>
    		<td width='50'><p align='center'>{$row['SNO'][$i]}</p></td>
    		<td width='80'><p align='center'>{$row['SNAME'][$i]}</p></td>
    		<td width='20'><p align='center'>{$row['SEX'][$i]}</p></td>
    		<td width='20'><p align='center'>{$row['SYEAR'][$i]}</p></td>
    		<td width='50'><p align='center'>{$row['MAJOR'][$i]}</p></td>
    		<td width='30'><p align='center'>{$row['AVR'][$i]}</p></td>
    		<td width='30'><a href=./st_vi.php?del={$row[SNO][$i]}>del</a></td>
    	</tr>
    	");
  	}
	}
   echo("</table><hr>");

  $p=$start-$scale;     // 이전 화면의 시작 위치
  $n=$start+$scale;     // 다음 화면의 시작 위치

  if($p>=0)
    echo("<a href=./st_vi.php?start=$p>[이전페이지]</a>&nbsp;&nbsp;");
  else
    echo("이전페이지&nbsp;&nbsp;");
  if($n<$row_num)
    echo("<a href=./st_vi.php?start=$n>[다음페이지]</a>");
  else
    echo("다음페이지");
?>

검색 실행결과
화면단위 실행결과


위 방식으로 프로그램을 구성할 경우 오류가 있다.

다음페이지를 눌렀을 경우 search 변수가 유지가 되지 않아서 다음페이지를 다시 처음부터 받아오는 경우가 생긴다.

search 변수를 출력함으로써 search 변수가 유지되지 않는 것을 확인할 수 있다.

 

수정된 st_vi.php

<form name='search' method='get' action='st_vi.php'>
 검색창 &nbsp;<input type='text' name='search'>
		   <input type='submit' name='확인' value='확인'>
 </form>


<?
  echo("<a href=./st_in.html>자료 입력하기</a><hr>");

  require('conn.php');

  //==========================삭제기능========================================
  $del=$_GET[del];        // $del 변수가 null이 아니면 행을 삭제하는 else절이 실행된다.
  if (empty($del)){}
  else {
	  $sql="delete from student where sno='$del'";
	  $result=oci_parse($conn,$sql);
	  oci_execute($result);
	  oci_free_statement($result);
	  }

  //==========================검색기능=========================================

    $search = $_GET[search];
	if (empty($search)) {
	 	$sql="select sno,sname,sex,major,syear,to_char(avr,'0.00') avr
	 	     from student order by sno";
	 	$result=oci_parse($conn,$sql);
	 }
	else {
	 	$sql="select sno,sname,sex,major,syear,to_char(avr,'0.00') avr
	 	       from student
	 	       where sname like '%{$search}%' order by sno";
	 	$result=oci_parse($conn,$sql);
	 }
	 oci_execute($result);

  //==========================================================================


  $row_num=oci_fetch_all($result, $row);  // $row_num : 전제 행의 수
  echo("Row의 개수는 $row_num 입니다.<br><hr>"); // 행은 컬럼명, 열은 헹번호

  oci_free_statement($result);
  oci_close($conn);

   $scale=5;                           // 화면에 출력할 행의 개수
   $start = $_GET[start];
   if (empty($start)){$start=0;}    // 첫 화면은 0에서 시작, 배열의 키값은 0에서 시작

  echo("<table border='1'>");
  for($i=$start; $i<($start+$scale); $i++) {
   if ($i<$row_num){
     echo("
    	<tr>
    		<td width='50'><p align='center'>{$row['SNO'][$i]}</p></td>
    		<td width='80'><p align='center'>{$row['SNAME'][$i]}</p></td>
    		<td width='20'><p align='center'>{$row['SEX'][$i]}</p></td>
    		<td width='20'><p align='center'>{$row['SYEAR'][$i]}</p></td>
    		<td width='50'><p align='center'>{$row['MAJOR'][$i]}</p></td>
    		<td width='30'><p align='center'>{$row['AVR'][$i]}</p></td>
    		<td width='30'><a href=./st_vi.php?del={$row[SNO][$i]}>del</a></td>
    	</tr>
    	");
  	}
	}
   echo("</table><hr>");

  $p=$start-$scale;     // 이전 화면의 시작 위치
  $n=$start+$scale;     // 다음 화면의 시작 위치

  if($p>=0)
    echo("<a href=./st_vi.php?start=$p&search=$search>[이전페이지]</a>&nbsp;&nbsp;");
  else
    echo("이전페이지&nbsp;&nbsp;");
  if($n<$row_num)
    echo("<a href=./st_vi.php?start=$n&search=$search>[다음페이지]</a>");
  else
    echo("다음페이지");

  echo("<br>");
  echo($search); // 확인하기 위해 search 변수 출력
?>

실행결과

search 변수가 잘 유지되는 것을 확인할 수 있다.


관계(Relationship)을 가진 테이블에 대한 입출력

▶ 유효한 데이터 확인

course(과목) 테이블 입력 폼과 프로그램

co_in.html

<html><head>
<meta http-equiv="content-type" content="text/html; charset=euc-kr">
<title> course 입력폼 </title>
</head>
<body bgcolor="white" text="black" link="blue" vlink="purple" alink="red">
<form name="insert" action="co_in.php" method="POST">
<center>
<table border="0" width="300">
  <tr>
    <td width="70"><p align="center">과목번호</p></td>
    <td>&nbsp;&nbsp;<input type="text" name="cno"></td>
  </tr>
  <tr>
    <td width="50"><p align="center">과목명</p></td>
    <td>&nbsp;&nbsp;<input type="text" name="cname"></td>
  </tr>
  <tr>
    <td width="50"><p align="center">학점수</p></td>
    <td>&nbsp;&nbsp;1<input type="radio" name="st_num" value="1">,
    2<input type="radio" name="st_num" value="2">,
    3<input type="radio" name="st_num" value="3">,
    4<input type="radio" name="st_num" value="4"></td>
  </tr>
  <tr>
    <td width="70"><p align="center">교수번호</p></td>
    <td>&nbsp;&nbsp;<input type="text" name="pno"></td>
  </tr>
  <tr>
    <td colspan="2">
    <p align="center"><input type="submit" name="확인" value="확인"></p>
  </td>
  </tr>
<table>
</form>
</body></html>

이런식으로 과목명을 입력할 경우 교수번호를 알아야하는데 우리는 알 수가 없다. 따라서 아래처럼 교수이름을 출력하도록 수정한다.

 

수정후 co_in.html

<html><head>
<meta http-equiv="content-type" content="text/html; charset=euc-kr">
<title> course 입력폼 </title>
</head>
<body bgcolor="white" text="black" link="blue" vlink="purple" alink="red">
<form name="insert" action="co_in.php" method="POST">
<center>
<table border="0" width="300">
  <tr>
    <td width="70"><p align="center">과목번호</p></td>
    <td>&nbsp;&nbsp;<input type="text" name="cno"></td>
  </tr>
  <tr>
    <td width="70"><p align="center">과목명</p></td>
    <td>&nbsp;&nbsp;<input type="text" name="cname"></td>
  </tr>
  <tr>
    <td width="70"><p align="center">학점수</p></td>
    <td>&nbsp;&nbsp;1<input type="radio" name="st_num" value="1">,
    2<input type="radio" name="st_num" value="2">,
    3<input type="radio" name="st_num" value="3">,
    4<input type="radio" name="st_num" value="4"></td>
  </tr>
  <tr>
  <td width="70"><p align="center">교수</p></td>
    <td><select name="pno">

    <?
      require('conn.php');
      $sql="select pno, pname
            from professor"; // professor 테이블에서 pno와 pname만 검색한다.
      $result=oci_parse($conn,$sql);
      oci_execute($result);
      $row_num=oci_fetch_all($result, $row);
      for ($i=0; $i<$row_num; $i++) {
          echo("<option value='{$row[PNO][$i]}'>{$row[PNAME][$i]}</option>");
        }
      oci_free_statement($result);
      oci_close($conn);
    ?>
        <option value=""></option>
    </td>
  </tr>
  <tr>
    <td colspan="2">
      <p align="center"><input type="submit" name="확인" value="확인"></p>
    </td>
  </tr>
<table>
</form>
</body></html>

 

co_in.php

<?
  $cno = $_POST[cno];
  $cname = $_POST[cname];
  $st_num = $_POST[st_num];
  $pno = $_POST[pno];

  require('conn.php');

  $sql="insert into course (cno, cname, st_num, pno)
        values ('$cno', '$cname', $st_num, '$pno')";

  $result=oci_parse($conn,$sql);
  $re=@oci_execute($result);

  oci_free_statement($result);
  oci_close($conn);

  if(!$re)
    { echo(" <script>
            window.alert('과목 입력 장애 입니다.');
            history.go(-1);
            </script>
          ");
      exit;
    }
  else
    echo(" <meta http-equiv='Refresh' content = '0; URL=co_vi.php'>");
?>

 

sc_in.html

<html><head>
<meta http-equiv="content-type" content="text/html; charset=euc-kr">
<title> score 입력폼 </title>
</head>
<body bgcolor="white" text="black" link="blue" vlink="purple" alink="red">
<form name="insert" action="sc_in.php" method="POST">
<center>
<table border="0" width="300">
  <tr>
    <td width="70"><p align="center">학생</p></td>
    <td><select name="sno">
      <?
      require('conn.php'); // 학생의 명단을 나열한다.
      $sql="select sno, sname
          from student";
      $result=oci_parse($conn,$sql);
      oci_execute($result);
      $row_num=oci_fetch_all($result, $row);
      for ($i=0; $i<$row_num; $i++) {
          echo("<option value='{$row[SNO][$i]}'>{$row[SNAME][$i]}</option>");
        }
      oci_free_statement($result);
      ?>
    </td>
  </tr>
  <tr>
    <td width="50"><p align="center">과목</p></td>
    <td><select name="cno">
      <?
      $sql="select cno, cname
            from course"; // 과목정보를 나열한다.
      $result=oci_parse($conn,$sql);
      oci_execute($result);
      $row_num=oci_fetch_all($result, $row);
      oci_free_statement($result);
      oci_close($conn);
      for ($i=0; $i<$row_num; $i++) {
          echo("<option value='{$row[CNO][$i]}'>{$row[CNAME][$i]}</option>");
        }
      ?>
    </td>
  </tr>
  <tr>
    <td width="50"><p align="center">점수</p></td>
    <td><input type="text" name="res"></td>
  </tr>
  <tr>
    <td colspan="2">
    <p align="center"><input type="submit" name="확인" value="확인"></p>
    </td>
  </tr>
<table>
</form>
</body></html>

 

sc_in.php

<?
  $sno = $_POST[sno];
  $cno = $_POST[cno];
  $sc_result = $_POST[sc_result];

  require('conn.php');

  $sql="insert into score (sno, cno, sc_result)
        values ('$sno', '$cno', '$sc_result')";

  $result=oci_parse($conn,$sql);
  $re=@oci_execute($result);

  oci_free_statement($result);
  oci_close($conn);

  if(!$re)
    { echo(" <script>
            window.alert('기말고사 점수 입력 장애 입니다.');
            history.go(-1);
            </script>
          ");
      exit;
    }
  else
    echo(" <meta http-equiv='Refresh' content = '0; URL=sc_vi.php'>");
?>

추가된 것을 확인할 수 있다.

 

'PHP 공부 기록' 카테고리의 다른 글

PHP 9 - 세션  (0) 2021.12.24
PHP 7 - PHP와 오라클 연동 (입출력 프로그램)  (0) 2021.12.24
PHP 6 - PHP를 이용한 DB 접속  (0) 2021.12.12
(수정중) PHP 5 - 배열  (0) 2021.11.23
PHP 4 - 폼(Form)  (0) 2021.11.19

오라클 연동할 테이블 구조


오라클 입력 프로그램

 

입력 프로그램 실습

student, professor 테이블 입력 프로그램 만들기

 

student table 입력 프로그램

st_in.html

<html><head>
<meta http-equiv="content-type" content="text/html; charset=euc-kr">
<title> student 입력폼 </title>
</head>
<body bgcolor="white" text="black" link="blue" vlink="purple" alink="red">
<form name="insert" action="st_in.php" method="POST">
<center>
<table border="0" width="250">
  <tr>
    <td width="50"><p align="center">학번</p></td>
    <td>&nbsp;&nbsp;<input type="text" name="sno"></td>
  </tr>
  <tr>
    <td width="50"><p align="center">이름</p></td>
    <td>&nbsp;&nbsp;<input type="text" name="sname"></td>
  </tr>
  <tr>
    <td width="50"><p align="center">성별</p></td>
    <td>&nbsp;&nbsp;남<input type="radio" name="sex" value="남">,
                    여<input type="radio" name="sex" value="여"></td>
  </tr>
  <tr>
    <td width="50"><p align="center">학과</p></td>
    <td>&nbsp;&nbsp;<select name="major" size="1">
                      <option value="화학">화학</option>
                      <option value="생물">생물</option>
                      <option value="물리">물리</option>
                      <option value="유공">유공</option>
                      <option value="식영">식영</option></td>
  </tr>
  <tr>
    <td width="50"><p align="center">학년</p></td>
    <td>&nbsp;&nbsp;1<input type="radio" name="syear" value="1">,
                    2<input type="radio" name="syear" value="2">,
                    3<input type="radio" name="syear" value="3">,
                    4<input type="radio" name="syear" value="4"></td>
  </tr>
  <tr>
    <td width="50"><p align="center">학점</p></td>
    <td>&nbsp;&nbsp;<input type="text" name="avr"></td>
    </tr>
  <tr>
    <td colspan="2">
      <p align="center"><input type="submit" name="확인" value="확인"></p>
    </td>
  </tr>
</table>
</form>
</body></html>

 

st_in.php

<?
  $sno = $_POST[sno];
  $sname = $_POST[sname];
  $sex = $_POST[sex];
  $major = $_POST[major];
  $syear = $_POST[syear];
  $avr = $_POST[avr];

  require('conn.php');

  $sql="insert into student (sno, sname, sex, major, syear, avr)
        values ('$sno', '$sname', '$sex', '$major', $syear, $avr)";

  $result=oci_parse($conn,$sql); // SQL문을 파싱해서 실행 계획을 생성한다.
  $re=oci_execute($result); // SQL문을 실행한다.

  oci_free_statement($result);
  oci_close($conn);

  if($re) echo("정상 입력 되었습니다.");
// echo(" <meta http-equiv='Refresh' content = '0; URL=st_vi.php'>");
?>

 

윈도우 cmd 창에서 sqlplus st04/st04@dal로 접속 후 테스트

SQL> SELECT * FROM student WHERE sno=202112;

SNO     SNAME      SEX      SYEAR MAJOR          AVR
------- ---------- --- ---------- ------- ----------
202112  학생임     여           3 화학           4.5

 

professor table 입력 프로그램

pr_in.html

<html><head>
<meta http-equiv="content-type" content="text/html; charset=euc-kr">
<title> professor 입력폼 </title>
</head>
<body bgcolor="white" text="black" link="blue" vlink="purple" alink="red">
<form name="insert" action="pro_in.php" method="POST">
<center>
<table border="0" width="250">
  <tr>
    <td width="50"><p align="center">교수번호</p></td>
    <td>&nbsp;&nbsp;<input type="text" name="pno"></td>
  </tr>
  <tr>
    <td width="50"><p align="center">교수이름</p></td>
    <td>&nbsp;&nbsp;<input type="text" name="pname"></td>
  </tr>
  <tr>
    <td width="50"><p align="center">학과</p></td>
    <td>&nbsp;&nbsp;<select name="section" size="1">
                      <option value="화학">화학</option>
                      <option value="생물">생물</option>
                      <option value="물리">물리</option>
                      <option value="유공">유공</option>
                      <option value="식영">식영</option></td>
  </tr>
  <tr>
    <td width="50"><p align="center">직위</p></td>
    <td>&nbsp;&nbsp;<select name="orders" size="1">
                      <option value="정교수">정교수</option>
                      <option value="부교수">부교수</option>
                      <option value="조교수">조교수</option>
  </tr>
  <tr>
    <td width="50"><p align="center">부임일</p></td>
    <td>&nbsp;&nbsp;<input type="date" name="hiredate"></td>
    </tr>
  <tr>
    <td colspan="2">
      <p align="center"><input type="submit" name="확인" value="확인"></p>
    </td>
  </tr>
</table>
</form>
</body></html>

 

pro_in.php

<?
  $pno = $_POST[pno];
  $pname = $_POST[pname];
  $section = $_POST[section];
  $orders = $_POST[orders];
  $hiredate = $_POST[hiredate];

  require('conn.php');

  $sql="insert into professor (pno, pname, section, orders, hiredate)
        values ('$pno', '$pname', '$section', '$orders', TO_DATE('$hiredate', 'YYYY/MM/DD'))";

  $result=oci_parse($conn,$sql); // SQL문을 파싱해서 실행 계획을 생성한다.
  $re=oci_execute($result); // SQL문을 실행한다.

  oci_free_statement($result);
  oci_close($conn);

  if($re) echo("정상 입력 되었습니다.");
// echo(" <meta http-equiv='Refresh' content = '0; URL=st_vi.php'>");
?>

 

윈도우 cmd 창에서 sqlplus st04/st04@dal로 접속 후 테스트

SQL> SELECT * FROM professor WHERE pno=2021;

PNO     PNAME      SECTION ORDERS  HIREDATE
------- ---------- ------- ------- ----------
2021    교수다     물리    정교수  2021/07/05

 


출력 프로그램

패치 작업을 행의 개수만큼 한다.

OCI_NUM : 배열의 키값을 숫자로 바꾼다.

OCI_ASSOC : 배열의 키값이 컬럼 이름으로 바꿔준다.

$row 라고하는 일차원배열을 생성해 출력한다.

$result는 계속 한 행씩 가져간다.

 

OCI_ASSOC 를 이용한 출력프로그램 생성

st_vi.php

<?
  echo("<a href=./st_in.html>자료 입력하기</a><hr>");

  require('conn.php');

  $sql="select sno, sname, sex, major, syear, to_char(avr,'0.00') avr
        from student order by sno"; //결과값이 resource로 넘어옴.

  $result=oci_parse($conn,$sql); //먼저 파싱한다.
  oci_execute($result); //execute 하면 $result가 테이블 컬럼 첫번째 값을 가리킴

  echo("<table border='0'>");
  while ($row = oci_fetch_array($result, OCI_ASSOC)){
    echo("
          <tr>
              <td width='50'><p align='center'>{$row['SNO']}</p></td>
              <td width='80'><p align='center'>{$row['SNAME']}</p></td>
              <td width='20'><p align='center'>{$row['SEX']}</p></td>
              <td width='20'><p align='center'>{$row['SYEAR']}</p></td>
              <td width='50'><p align='center'>{$row['MAJOR']}</p></td>
              <td width='30'><p align='center'>{$row['AVR']}</p></td>
          </tr>
        ");
      }
  echo("</table>");
  oci_free_statement($result);
  oci_close($conn);
?>

 

pr_vi.php

<?
  echo("<a href=./pro_in.html>자료 입력하기</a><hr>");

  require('conn.php');

  $sql="select pno, pname, section, orders, to_char(hiredate, 'YYYY/MM/DD') hiredate
        from professor order by pno";

  $result=oci_parse($conn,$sql);
  oci_execute($result);

  echo("<table border='0'>");
  while ($row = oci_fetch_array($result, OCI_ASSOC)){
    echo("
          <tr>
              <td width='50'><p align='center'>{$row['PNO']}</p></td>
              <td width='80'><p align='center'>{$row['PNAME']}</p></td>
              <td width='50'><p align='center'>{$row['SECTION']}</p></td>
              <td width='50'><p align='center'>{$row['ORDERS']}</p></td>
              <td width='100'><p align='center'>{$row['HIREDATE']}</p></td>
          </tr>
        ");
      }
  echo("</table>");
  oci_free_statement($result);
  oci_close($conn);
?>

 

오라클 접속 환경과 PHP 접속하기

 

 

인스턴스 : 메모리에 있는 논리적 구조

데이터베이스 : 하드드라이브에 있는 구성요소

 

접속 식별자 tnsnames.ora

oracle =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = tcp)(HOST = 192.168.10.135)(port = 1521))
      (CONNECT_DATA = (SID = DB19))
    )

ora =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = tcp)(HOST = 192.168.10.138)(port = 1521))
      (CONNECT_DATA = (SID = DB19))
    )

dal =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = tcp)(HOST = 192.168.10.11)(port = 1521))
      (CONNECT_DATA = (SID = DB19))
    )

 

Oracle 접속 : oconn.php

<?
  $server = "oracle";
  $user_name = "st04";
  $password = "st04";
  $conn=@oci_connect($user_name, $password, $server) or die('Could not connect:');
  echo("Oracle 19c \$conn : $conn<br>");
  $st=oci_server_version($conn);
  echo("$st<br>");
?>

 

또는 아래와 같이 직접 ip주소를 쳐서 사용할 수도 있다.

 

<?
  $server = "(DESCRIPTION =
    (ADDRESS = (PROTOCOL = tcp)(HOST = 192.168.10.11)(port = 1521))
    (CONNECT_DATA = (SID = DB19))
  )";
  $user_name = "st04";
  $password = "st04";
  $conn=@oci_connect($user_name, $password, $server) or die('Could not connect:');
  echo("Oracle 19c \$conn : $conn<br>");
  $st=oci_server_version($conn);
  echo("$st<br>");
?>

여기 @ 는 클라이언트에게 오류내용을 보여주지 않기 위해서 

 

▶ 배열

: 배열은 간단히 여러 개의 변수를 모아서 정의하는 것을 의미


1. 배열의 구조와 정의


▶ 1차원 배열

1차원 배열은 가장 기본적인 배열 구조로 선형으로 나열된 변수와 동일

$ar[1] = 'abc';

배열은 배열의 이름과 킷(Key)값(첨자) 그리고 값을 갖는다.

예를 들어 $ar[1]='abc' 에서 ar은 배열의 이름이고 대괄호([])안에 숫자 1은 배열의 킷값으로 첨자라고도 한다.

여기에 할당된 'abc'은 배열에 저장된 값이 된다.

$ar[1] = 'abc';
$ar[2] = 'def';
$ar[3] = 'ghi';

$ar과 같이 배열의 키값(첨자)이 정수인 배열을 스칼라 배열이라 한다. (배열의 킷값에 반드시 숫자만 이용X)

키값은 필요하다면 문자를 사용하는 것도 가능하다.

$row[sno] = 'S01009';
$row[sname] = '관우';
$row[syear] = 4;

$row 배열은 킷값이 sno, sname, syear이다. 이렇게 배열의 킷값이 문자인 것을 연관 배열이라고 한다.

 

$ar1 = array(1,2,3);
$ar2 = array(3 => "abc", 4 => "def", "ghi");
$ar3 = array("a" => "ab", "k" => "a2", 0 => 23);

array()는 배열을 생성하는 함수이다. 배열은 킷값을 가지므로 필요하다면 킷값을 지정할 수도 있고 지
정하지 않을 수도 있다. 생성된 $ar1, $ar2, $ar3의 구조는 다음과 같다.

 

<?
  $ar3 = array("a" => "ab", "k" => "a2", 23, "z" => 34, "bb");

  $a3 = count($ar3);

  print_r($ar3); echo("- count : $a3<br>");
?>

print_r 배열 출력하는 함수 (1차원 배열만 출력 가능)

 

$ar = array(1,2,3,4,5);
for($i = 0; $i < 5; $i++){
	$value = $ar[$i];
	echo("value : {$value}<br>");
}

 

배열내에 소수, 소수 개수, 소수의 합 출력

<?
$ar = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);

    $cn = count($ar);
    $sum = 0;
    $cnt = 0;
    for($i=0; $i<$cn; $i++){
        $value = $ar[$i];
        if($value > 1){
            for($j =2 ; $value % $j != 0; $j++){}
            if($value == $j){
            echo("$value &nbsp;&nbsp;");
            $sum = $sum + $value;
            $cnt = $cnt +1;
            }
        }
    }
    echo("<br>");
    echo("소수 개수: $cnt &nbsp;&nbsp;");
    echo("<br>");
    echo("소수 합: $sum &nbsp;&nbsp;");
    echo("<br><hr><br>");
    show_source(__FILE__);
?>

 

▶ 2차원 배열

2차원 배열은 엑셀과 같은 스프레드쉬트 프로그램에서 보는 것처럼 행과 열을 가진 배열을 의미한다. 2차원 배열은 이전에 사용한 1차원 배열과 달리 킷값이 두 개인 배열로 각각의 킷값은 행과 열을 의미한다.

$ar[행][열]

$ar[0][0] = "a"; $ar[0][1] = "b"; $ar[0][2] = "c";
$ar[1][0] = "d"; $ar[1][1] = "e"; $ar[1][2] = "f";
$ar[2][0] = "g"; $ar[2][1] = "h"; $ar[2][2] = "i";

2차원 배열의 킷값을 기술할 때는 [행번호][열번호]순으로 기술한다. 예를 들어 $ar[2][1]은 2행 1열의 데이터로 "h"값을 나타낸다.
2차원 이상인 배열을 다차원 배열이라 하는데 다차원 배열은 킷값의 개수를 늘려 3차원 배열이나 4차원 배열로 확장이 가능하다.

 

다음은 array() 함수를 이용 $ar 배열을 생성한 것이다.

$ar = array(array("a","b","c"), array("d","e","f"),array("g","h","i"))

2차원 배열을 array() 함수를 이용해서 생성할 때 array()를 중첩해서 다차원 배열을 생성한다. 이와 같
은 방법은 가독성이 높아 일반적으로 사용되는 배열 생성 방법이다.

 

$ar = array(array(학번 => "915301",이름 => "공융", 학과 => "화학"),
	array(학번 => "915302",이름 => "사마간", 학과 => "화학"),
	array(학번 => "925303",이름 => "단규", 학과 => "화학"))

 

2차원 배열은 킷값이 두 개로 배열의 요소가 두 개의 킷값에 의해 결정

1차원 배열과 같이 $ar[0]이 스칼라 변수와 같이 값을 저장하는 것이 아니다. $ar[0]는 이제 1차원 배열로 간주
즉, $ar[0]는 (학번 => 915301, 이름 => 공융, 학과 => 화학)인 연관 배열로 인식

 

2차원 배열의 각 행을 1차원 배열로 추출한 다음 추출된 1차원 배열을 출력한다.

$count = count($ar);
for($i = 0; $i < $count; $i++) {
	echo("row = $i : {$ar[$i]['학번']} - {$ar[$i]['이름']} - {$ar[$i]['학과']} <br>");
}

for문을 이용하는 방법은 먼저 2차원 배열의 행의 수를 확인한 다음 행을 순서대로 읽어서 출력하는 방법이다. 

가장 읽기 편리하지만 행 번호에 해당하는 킷값이 정수로 구성돼야 한다는 단점이 있다.
그러나 이 방법은 가장 가독성이 높아서 프로그래밍에서 많이 사용되는 방법이다.
Count( ) 함수는 1차원 배열에서는 배열 요소의 수를 반환하고 2차원 배열에서는 행수를 반환한다.
2차원 배열의 출력

 

테이블 태그에 넣어서 출력하기

 

HTML 1 - 태그 및 Table

HTML (HyperText Markup Language) : 웹페이지를 이루는 가장 기본적인 구성요소 하이퍼텍스트와 마크업으로 이루어진다. 태그 기본 태그 , : html 문서의 시작과 끝을 알림 , : html 문서 외형에는 영향이

lemonandgrapefruit.tistory.com

ar03.php

<?
  $ar = array(array("학번" =>"91501","이름" => "공융", "학과" => "화학"),
        array("학번" =>"91502","이름" => "사마간", "학과" => "화학"),
        array("학번" =>"91503","이름" => "단규", "학과" => "화학"),
        array("학번" =>"91504","이름" => "마초", "학과" => "화학"));

  $count = count($ar);
  echo("<table border=1>");
  for($i = 0; $i <= $count-1; $i++){
    echo("<tr><td>{$ar[$i]["학번"]}</td><td>{$ar[$i]["이름"]}</td><td>{$ar[$i]["학과"]}</td></tr>");
  }

  show_source(__FILE__);
?>

 

행, 열 숫자를 입력받아 테이블을 출력하는 프로그램

table.html

<html>
<head>
<title>TABLE 입력 폼파일</title>
<meta http-equiv="content-type" content="text/html; charset=euc-kr">
</head>
  <form method="post" action="table.php">
	행 : <input type="text" name="row"><br>
	열 : <input type="text" name="col"><br>
		    <input type="submit" name="확인" value="확인">
		    <input type="reset" name="취소" value="취소"><br>
  </form>
<hr>
<? show_source(__FILE__);?>
</html>

table.php

<?
   $row = $_POST["row"];
   $col = $_POST["col"];
   
   echo("<table border= 2>");
    for($i=1; $i<=$row; $i++){
        echo("<tr>");
        for($j=1; $j<=$col; $j++){
            echo("<td> $j </td>");
        }
        echo("</tr>");
    }
    echo("</table>");
    echo("<hr>");
    show_source(__FILE__);
?>

 

▶ 다음과 같이 채워진 2차원 배열을 생성하고 출력하는 프로그램을 작성

<?
  $k = 0;

  for($i = 0; $i < 5; $i++){
      for($j = 0; $j < 5; $j++){
        $k = $k+1;
        $ar[$i][$j] = $k;
      }
    }

    echo("<table border='1'>");
    for($i = 0; $i < 5; $i++){
      echo("<tr>");
      for($j = 0; $j < 5; $j++){
        echo("<td width='84' align='center'> {$ar[$i][$j]} </td>");
      }
      echo("</tr>");
    }
    echo("</table>");
?>

 

대각선으로 채워진 2차원 배열 출력한다. 

ar02

ar02

ar02.html

<html>
<head>
<title>ar02 입력 폼파일</title>
<meta http-equiv="content-type" content="text/html; charset=euc-kr">
</head>
  <form method="post" action="ar02.php">
	홀수만 입력 : <input type="text" name="num"><br>
		    <input type="submit" name="확인" value="확인">
		    <input type="reset" name="취소" value="취소"><br>
  </form>
<hr>
<? show_source(__FILE__);?>
</html>

ar02.php

<?
  $num = $_POST["num"];
  if($num%2 == 0) {
        echo("
             <script>
             window.alert('홀수만 입력하세요');
             history.go(-1);
             </script>
            ");
        exit;
     }

  $k = 0;
  for($i = 0; $i < $num; $i++){
      for($j = 0; $j < $num; $j++){
          $k = $k+1;
          $ar[$j][$i] = $k;
      }
    }

    echo("<table border='1'>");
    for($i = 0; $i < $num; $i++){
      echo("<tr>");
      for($j = 0; $j < $num; $j++){
        echo("<td width='84' align='center'> {$ar[$i][$j]} </td>");
      }
      echo("</tr>");
    }
    echo("</table>");
?>

 

ar03

ar03

ar03.html

<html>
<head>
<title>ar03 입력 폼파일</title>
<meta http-equiv="content-type" content="text/html; charset=euc-kr">
</head>
  <form method="post" action="ar03.php">
	홀수만 입력 : <input type="text" name="num"><br>
		    <input type="submit" name="확인" value="확인">
		    <input type="reset" name="취소" value="취소"><br>
  </form>
<hr>
<? show_source(__FILE__);?>
</html>
더보기

ar03.php -------------------수정하기-------------

<?
$num = $_POST["num"];
if($num%2 == 0) {
      echo("
           <script>
           window.alert('홀수만 입력하세요');
           history.go(-1);
           </script>
          ");
      exit;
   }

$k = 0;
 for($i = 0; $i < $num; $i++){
   for($j = 0; $j < $num; $j++){
      if($i>=$num-$j){
         $k = $k+1;
          $ar[$i][$j] = $k;
      }else{
         $ar[$i][$j] = "";
      }
    }
 }

echo("<table border='1'>");
for($i = 0; $i < $num; $i++){
   echo("<tr>");
   for($j = 0; $j < $num; $j++){
      echo("<td width='84' align='center'> {$ar[$i][$j]} </td>");
    }
   echo("</tr>");
}
echo("</table>");
?>
<?
  $num = $_POST["num"];
  if($num%2 == 0) {
        echo("
             <script>
             window.alert('홀수만 입력하세요');
             history.go(-1);
             </script>
            ");
        exit;
     }

  $k = 0;
  $t = 0;
  for($i = 0; $i <= $num; $i++){
      for($j = 0; $j <= $num; $j++){
          //$k = $k+1;
          if($i>=num-$j){
            $k = $k+1;
            $ar[$i][$j+$t] = $k;
          }
          else{
            $ar[$i][$j] = "";
          }
          //$ar[$i][$j+$t] = $k;
      }
    }

    echo("<table border='1'>");
    for($i = 0; $i < $num; $i++){
      echo("<tr>");
      for($j = 0; $j <= $num; $j++){
        echo("<td width='84' align='center'> {$ar[$i][$j]} </td>");
      }
      echo("</tr>");
    }
    echo("</table>");
?>

▶ 폼 태그 구조

<form name="폼 이름" action="프로그램명" method="전달 방식"
[target="대상 윈도우"] [enctype="인코딩 형식"]>
입력 양식
......
</form>

 

▶ 데이터 전달 방식과 변수

GET 방식

: GET방식은 입력 값을 action에 지정한 URL에 첨가하여 전달하는 방식을 의미

(처리를 요청하기보다는 정보를 요청하는 용도)

 

예제 1. GET 예제 폼 파일

4-1.html

<html><head><title>GET 예제</title></head>

<form name="get_ex" action="4-1.php" method="get">
<p><input type="text" name="text"><input type="submit" name="확인" value="확인"></p>
</form>

</body></html>

4-1.php

<?
  $text = $_GET['text'];
  echo("전달된 값은 {$text}입니다.");
?>

 

GET 예제 파일

//a.php

<?
  $a = 1;
  echo("\$a = {$a}<br>
  <a href=./b.php?a=$a>b.php</a>");
?>


//b.php
<?
  $a = $_GET["a"];
  echo("\$a = {$a}");
?>

왼쪽 a.php / 오른쪽 b.php

 

POST 방식

예제 2. POST 예제 폼 파일

4-2.html

<html><head><title>POST 예제</title></head>
<form name="get_ex" action="4-2.php" method="post">
<p>텍스트 입력: <input type="text" name="text"><input type="submit" name="확인" value="확인"></p>
</form>
</body></html>

4-2.php

<?
  $text = $_POST['text'];
  echo("전달된 값은 {$text}입니다.");
?>

 

* register_globals
php.ini파일에 register_globals의 역할은 EGPCS(Environment, GET, POST, Cookie, Server)의 값들을
자동으로 PHP에 전역변수로 저장해주는 옵션이다. EGPCS에 의해서 전달된 값들은 각각 연관 배열인
$_ENV, $_GET, $_POST, $_COOKIE, $_SERVER에 저장된다. 이때 전달 킷값과 동일한 변수를 전역변
수로 만들어줄려면 register_globals를 On으로 지정하면 된다.


/usr/local/lib/php.ini 파일의 설정을 다음과 같이 수정하고 수행해 보자

 

register_globals = On

 

예제 3. GET, POST 변수를 전역변수로 전달하기위한 폼 파일

4-3.html

<html><head><title>전역변수로 전달</title></head>
<form name="get_ex" action="4-3.php?get=get" method="post">
<p><input type="text" name="post"><input type="submit" name="확인" value="확인"></p>
</form>
</body></html>

4-3.php

<?
  echo("get에 전달된 값은 {$get}입니다.<br>
  post에 전달된 값은 {$post}입니다.<br>
  \$_GET[get]에 전달된 값은 {$_GET['get']}입니다.<br>
  \$_POST[post]에 전달된 값은 {$_POST['post']}입니다.
  ");
?>

 

▶ 다양한 input type 폼 태그

* text와 password

<input type="text" || "password" name="전달 변수명" maxlength="입력크기"
size="창크기" value="미리 입력된 값">

예제 4. input type text와 password

4-4.html

<html><head><title>Input type text와 password</title></head>
<form name="tx_pw" action="4-4.php" method="post">
  이름 : <input type="text" name="id" size="8"><br>
  암호 : <input type="password" name="pw" size="8"><br>
  <input type="submit" name="확인" value="확인">
</form>
</body></html>

 

4-4.php

<?
  echo(" 이름은 {$_POST['id']}입니다.<br>
  암호는 {$_POST['pw']}입니다.");
?>

 

▶ input type radio

<input type="radio" name="전달 변수명" value="전달될 값" [checked]>

 

예제 5. input type radio

4-5.html

<html><head><title>Input type radio</title></head>

<form name="radio" action="4-5.php" method="post">
 1<input type="radio" name="rd" value="1" checked>,
 2<input type="radio" name="rd" value="2">,
 3<input type="radio" name="rd" value="3">,
 4<input type="radio" name="rd" value="4">,
 <input type="submit" name="확인" value="확인">
</form>
</body></html>

4-5.php

<?
  echo(" 선택한 값은 {$_POST['rd']}입니다.");
?>

 

▶ input type checkbox

<input type="checkbox" name="전달 변수명" value="전달될 값" [checked]>

 

예제 6. input type chechbox

4-6.html

<html><head><title>Input type chechbox</title></head>

<form name="chechbox" action="4-6.php" method="post">
  1<input type="checkbox" name="cb1" value="1" checked>,
  2<input type="checkbox" name="cb2" value="1">,
  3<input type="checkbox" name="cb3" value="1">,
  4<input type="checkbox" name="cb4" value="1">,
  <input type="submit" name="확인" value="확인">
</form>

</body></html>

4-6.php

<?
  echo(" cb1은 {$_POST['cb1']}입니다.<br>
        cb2은 {$_POST['cb2']}입니다.<br>
        cb3은 {$_POST['cb3']}입니다.<br>
        cb4은 {$_POST['cb4']}입니다.");
?>

 

 

▶ input type file

<form ... enctype="multipart/form-data">
 <input type="file" name="전달 변수명" enctype="multipart/form-data">

 

▶ TEXTAREA

<textarea name="전달 변수명" rows="행수" cols="너비">초기값</textarea>

 

예제 9. Input type file

4-9.html

<html><head><title>Textarea</title></head>

<form name="textarea" action="4-9.php" method="post">
  <textarea name="tarea" rows="2" cols="30"></textarea><br>
  <input type="submit" name="확인" value="확인">
</form>
</body></html>

4-9.php

<?
  $tarea = $_POST["tarea"];
  $tarea = nl2br($tarea);
  echo("$tarea");
?>

 

▶ SELECT

<select name="전달 변수명" size="행수" [mutiple]>
<option value="전달될 값">출력값</option>
......
</select)

 

 

예제 10. select 태그 폼 파일

4-10.html

<html><head><title>Select</title></head>

<form name="select" action="4-10.php" method="post">
  <select name="select" size="1">
    <option value="1">1번</option>
    <option value="2">2번</option>
    <option value="3">3번</option>
  </select>
  <input type="submit" name="확인" value="확인">
</form>

</body></html>

4-10.php

<?
  $select = $_POST["select"];
  echo("선택된 값은 {$select}입니다.");
?>

 

1. While문과 Do..While문

while (조건) {
	실행문;
}

- 조건이 참인 동안 실행문이 반복되어 실행된다.
- 반복을 벗어나기 위해서는 실행 문내에 조건을 변경하거나 break문이 필요하다.
- 조건에 변화가 없으면 무한 반복된다.
- 조건은 실행문이 반복될 때마다 반복해서 실행된다.

 

$a = 1; 		// 초기식
while ($a <= 10) { 	// 조건
echo(" {$a}<br> "); 	// 명령문
$a++; 			// 증감식
}

While뿐 아니라 do..while문이나 for문에서도 반복문의 네 가지 요소(초기식, 조건, 증감식, 명령문)는 항상 동
일하다.

 

2. For문 

for (초기식; 조건; 증감식) {
	실행문;
}

- 일반적으로 사용

- 조건이 참인 동안 실행문을 반복 실행한다.
- 초기식은 맨 처음 한 번만 실행된다.
- for문은 반복 횟수를 구체적으로 확인 가능함으로 반복문 중에 가장 가독성이 좋다.

 

잘못된 값 입력 시 사용하는 코드

if($num < 1 ) {
      echo("
           <script>
           window.alert('1보다 큰값을 입력하세요');
           history.go(-1);
           </script>
          ");
      exit;
   }

 

3. Continue 문

- Continue문은 반복문 내에서 쓰이는 제어문

- 이런 제어문으로는 앞에서 살펴본 break문이 있는데, break문은 반복문을 완전히 빠져나오는 기능을 수행하는 반면   continue문은 현재 수행중인 반복을 종료하고 다음 반복으로 건너뛰는 기능을 담당

<?
for($a = 1; $a <= 10; $a++) {
if($a%2==0) continue;
echo(" {$a}<br> ");
}
?>

<?
  $a = 1;
  while ($a <=10) {
	if($a%2==0){
	$a++;
	continue;
	}
	echo(" {$a}<br> ");
	$a++;
  }
  show_source(__FILE__);
?>

 

while, for문 실습

예제 3-1. 0 보다 큰 값을 입력받아 1에서 입력 값까지의 합을 출력한다.

3-1.html

<html>
<head>
<title>3-1.html 입력 폼파일</title>
<meta http-equiv="content-type" content="text/html; charset=euc-kr">
</head>
<form method="post" action="3-1.php">
	1보다 큰 값을 입력하세요 : <input type="text" name="num"><br>
		<input type="submit" name="확인" value="확인">
		<input type="reset" name="취소" value="취소"><br>
</form>
<hr>
<? show_source(__FILE__); ?>
</html>

 

while 문 3-1.php

<?
   $num = $_POST["num"];

   $sum = 0; // 누적 변수, 1..$num 까지 값을 누적한다.
   $a = 1 ; // 초기식
   if($num > 1) {
       while($a <= $num) { // 조건, $a가 $num보다 커지면 반복을 종료한다.
           $sum = $sum + $a;
           echo("\$a: {$a}, \$sum: {$sum}<br>");
           $a++; // 증감식
        }
        echo("<hr>");
        echo("1에서 {$num}까지의 합은 {$sum}입니다.");
     }
     else echo("입력 값이 올바르지 않습니다.");
     echo("<hr>");
     show_source(__FILE__);
?>

실행결과

 

예제 3-1 for문

3-1f.php 

<?
   $num = $_POST["num"];

   if($num < 1 ) {
      echo("
           <script>
           window.alert('1보다 큰값을 입력하세요');
           history.go(-1);
           </script>
          ");
      exit;
   }
   $sum = 0;
   for($a = 1; $a <= $num; $a++){
   $sum = $sum + $a;
   echo("\$a: {$a}, \$sum: {$sum}<br>");
   }
   echo("<hr>");
   echo("1에서 {$num}까지의 합은 {$sum}입니다.");
   echo("<hr>");
   show_source(__FILE__);
?>

실행결과

 

예제 3-2. 2~9 까지의 숫자를 입력받아 구구단을 출력하는 프로그램을 작성한다.

3-2f.html

<html>
<head>
<title>3-2f.html 구구단 폼파일</title>
<meta http-equiv="content-type" content="text/html; charset=euc-kr">
</head>
<form method="post" action="3-2f.php">
	출력하고자 하는 단을 입력 하세요 : <input type="text" name="gu"><br>
	<input type="submit" name="확인" value="확인">
	<input type="reset" name="취소" value="취소"><br>
</form>
</html>

 

3-2f.php

<?
	$gu = $_POST["gu"];
	if(!($gu >= 2 && $gu <= 9)) {
		echo("
		  <script>
		  window.alert('2에서 9사이에 값을 입력하세요');
		  history.go(-1);
		  </script>
		  ");
		  exit;
	}
	for($i = 1;$i <= 9;$i++){
		$s = $i * $gu;
		echo("{$gu}x{$i}={$s}<br>");
	}
?>

 

실습

실습 1. 0보다 큰 정수를 입력받아 입력받은 정수까지 홀수의 합과 짝수의 합을 각각 출력하는 프로그램을 작성한다.

* while문과 for문을 둘 다 사용해 작성 (두 번 출력하기)

3-ex01.html

<html>
<head>
<title>3-ex01.html 입력 폼파일</title>
<meta http-equiv="content-type" content="text/html; charset=euc-kr">
</head>
<form method="post" action="3-ex01.php">
	0보다 큰 값을 입력하세요 : <input type="text" name="num"><br>
		<input type="submit" name="확인" value="확인">
		<input type="reset" name="취소" value="취소"><br>
</form>
<hr>
<? show_source(__FILE__); ?>
</html>

 

3-ex01.php

<?
   $num = $_POST["num"];

   if($num < 0 ) {
      echo("
           <script>
           window.alert('0보다 큰값을 입력하세요');
           history.go(-1);
           </script>
          ");
      exit;
   }
   $sum_odd = 0;
   $sum_even = 0;
   $i=1;
   while($i <= $num) {
         if($i % 2 == 0){
            $sum_even += $i;
         }
         else {
            $sum_odd += $i;
         }
         echo("\$i: {$i}, \$sum_odd: {$sum_odd}, \$sum_even: {$sum_even}<br>");
         $i++;
   }
   echo("<hr>");
   echo("while문<br>");
   echo("0에서 {$num}까지 홀수합: {$sum_odd}, 짝수합: {$sum_even}");
   echo("<hr>");

   $sum_odd = 0;
   $sum_even = 0;
   for($a = 1; $a <= $num; $a++){
    if($a % 2 == 0){
      $sum_even += $a;
    }
    else{
      $sum_odd += $a;
    }
    echo("\$i: {$i}, \$sum_odd: {$sum_odd}, \$sum_even: {$sum_even}<br>");
   }
   echo("<hr>");
   echo("for문<br>");
   echo("0에서 {$num}까지 홀수합: {$sum_odd}, 짝수합: {$sum_even}");
   echo("<hr>");
   show_source(__FILE__);
?>

실행결과
실행결과 show_source(__FILE__)

 

실습2. 값을 입력받아 입력된 값이 소수인지 확인하는 프로그램을 작성한다.
* 소수란 : 약수가 1과 자신밖에 없는 수
* 소수 판별 방법
- 제수의 값을 2부터 시작해서 1씩 증가 하면서 피제수를 나눠서 나머지가 0이 될 때까지 수행한다.
- 나눠서 떨어졌을 때 제수와 피제수가 같으면 피제수는 소수이다.

 

pri.html

<html>
<head>
<title>pri.html 입력 폼파일</title>
<meta http-equiv="content-type" content="text/html; charset=euc-kr">
</head>
<form method="post" action="pri.php">
	3이상인 값을 입력하세요  <br>
  <input type="text" name="num">
	<input type="submit" name="확인" value="확인"><br>
</form>
<hr>
<? show_source(__FILE__); ?>
</html>

pri.php

<?
  $num = $_POST["num"];

  if($num < 3 ) {
        echo("
             <script>
             window.alert('3이상인 값을 입력하세요');
             history.go(-1);
             </script>
            ");
        exit;
     }

  for($i = 2; $num % $i != 0; $i++){
  }

  if($num == $i)
    echo("{$num}: 소수");
  else
    echo("{$num}: 합성수");
?>
<hr><p>
<? show_source(__FILE__); ?>

 

'PHP 공부 기록' 카테고리의 다른 글

(수정중) PHP 5 - 배열  (0) 2021.11.23
PHP 4 - 폼(Form)  (0) 2021.11.19
PHP 2 - 조건문 (IF, SWITCH)  (0) 2021.10.29
PHP 1 - 변수와 연산자  (0) 2021.10.22
PHP 0 - 프로그램 사용해보기  (0) 2021.10.22

if 문

if 문

if (조건) {
        문장1;
        문장2;
        ....
}

 

if~else 문

if (조건) {
        문장1;
        문장2;
        ....
}
else {
        문장1;
        문장2;
        ....
}

if~else if 문

if (조건) {
        문장1;
        문장2;
        ....
}
else if (조건2) {
        문장1;
        문장2;
        ....
}
else if (조건3) {
        문장1;
        문장2;
        ....
}
else {
        문장1;
        문장2;
        ....
}

 

$a = "";
if (!isset($a)) echo(" \$a의 값이 없습니다.2<br>"); // FALSE
if (is_null($a)) echo(" \$a의 값이 없습니다.1<br>"); // FALSE
if (empty($a)) echo(" \$a의 값이 없습니다.3<br>"); // TRUE

빈 값("")

empty() : TRUE

is_null() ,  !isset() : FALSE

(PHP가 빈 값과 널 값을 서로 다르게 봄)

 

switch문

switch (변수 또는 수식) {
   case 값1 :
             문장1;
             문장2;
             ...
             break;
   case 값2 :
             문장1;
             문장2;
             ...
             break;
...
   default :
             문장1;
             문장2;
             ...
}

 

 

 

 

 

if문 예제

예제 2-1. 입력된 값 중에 큰 값을 출력한다.

2-1.html

<html>
<head>
<title>2-1.html 입력 폼파일</title>
<meta http-equiv="content-type" content="text/html; charset=euc-kr">
</head>
  <form method="post" action="2-1.php">
	A : <input type="text" name="a"><br>
	B : <input type="text" name="b"><br>
		<input type="submit" name="확인" value="확인">
		<input type="reset" name="취소" value="취소"><br>
  </form>
</html>

2-1.php

<?
   $a = $_POST["a"];
   $b = $_POST["b"];
   if ($a>$b) {
       echo(" 입력 값중 큰 값은 \$a($a)입니다. ");
   }
   if ($b>$a) { 
       echo(" 입력 값중 큰 값은 \$b($b)입니다. ");
   }
   if ($a==$b) {
   echo(" 두 입력 값이 동일합니다.. ");
   }
?>

실행결과

 

예제 2-2. 다음 표를 보고 입력된 급여에 따라 각 사원의 내년도 지급 받을 급여를 출력한다.
* 입력은 만원 단위로 입력한다.
ex) 1,230,000원 → 123만원

2-2.html

<html>
<head>
<title>2-2.html 급여 입력 폼파일</title>
<meta http-equiv="content-type" content="text/html; charset=euc-kr">
</head>
  <form method="post" action="2-1.php">
	현재 급여 입력: <input type="text" name="sal">만원<br>
		<input type="submit" name="확인" value="확인">
		<input type="reset" name="취소" value="취소"><br>
  </form>
</html>

2-2.php

<?
   $sal = $_POST["sal"];
   if ($sal <= 100) { // sal이 100만원 이하인 경우
      $sal = round($sal*1.15);
      echo(" 당신의 내년 급여는 15% 인상된 {$sal}만원입니다.");
   }
   else if ($sal <= 200) { // 101만원≦sal≦200만원
      $sal = round($sal*1.1);
      echo(" 당신의 내년 급여는 10% 인상된 {$sal}만원입니다.");
   }
   else if ($sal <= 300) { // 201만원≦sal≦300만원
   $sal = round($sal*1.05);
   echo(" 당신의 내년 급여는 5% 인상된 {$sal}만원입니다.");
   }
   else if ($sal <= 400) { // 301만원≦sal≦400만원
   $sal = round($sal*1.02);
   echo(" 당신의 내년 급여는 2% 인상된 {$sal}만원입니다.");
   }
   else { // sal이 400만원을 초과하는 경우
   echo(" 당신의 내년 급여는 올해와 같은 {$sal}만원입니다.");
   }
?>

실행결과

 

switch 실습

예제 2-3. 다음 [표]를 보고 입력된 급여에 따라 각 사원의 내년도 지급 받을 급여를 출력한다.
* 프로그램은 switch 문을 이용한다.
* 입력은 만원 단위로 입력한다.
ex) 1,230,000원 → 123만원

2-3.html

<html>
<head>
<title>2-3.html 급여 입력 폼파일</title>
<meta http-equiv="content-type" content="text/html; charset=euc-kr">
</head>
  <form method="post" action="2-2.php">
	현재 급여 입력: <input type="text" name="sal">만원<br>
		<input type="submit" name="확인" value="확인">
		<input type="reset" name="취소" value="취소"><br>
  </form>
</html>

2-3.php

<?
   $sal = $_POST["sal"];
   $con = ceil($sal/100);
   switch ($con) {
     case 1: // sal이 100만원 이하인 경우
            $sal = round($sal*1.15);
            echo(" 당신의 내년 급여는 15% 인상된 {$sal}만원입니다.");
            break;
     case 2: // 101만원≦sal≦200만원
            $sal = round($sal*1.1);
            echo(" 당신의 내년 급여는 10% 인상된 {$sal}만원입니다.");
            break;
     case 3: // 201만원≦sal≦300만원
            $sal = round($sal*1.05);
            echo(" 당신의 내년 급여는 5% 인상된 {$sal}만원입니다.");
            break;
     case 4: // 301만원≦sal≦400만원
            $sal = round($sal*1.02);
            echo(" 당신의 내년 급여는 2% 인상된 {$sal}만원입니다.");
            break;
     default : // sal이 400만원을 초과하는 경우
            echo("당신의 내년 급여는 올해와 같은 {$sal}입니다.");
   }
?>

실행결과

 

예제 2-4. 다음에 제시하는 문제점과 해결책을 이용, 이전 [프로그램]를 수정한 프로그램을 완성하세요

- 문제점
인상폭이 각 등급별로 정의되면 급여가 역전되는 현상이 나타난다. 예를 들어 급여가 99만원이었던 5등급 사
원은 15% 인상으로 114만원이 되지만 101만원인 4등급 사원은 10% 인상으로 111만원이 되어 인상 후, 자
신의 급여 등급보다 낮은 사원보다 적은 급여를 받게 된다.
- 해결책
역전 현상이 나타나는 경우 한 단계 낮은 등급의 최대 급여와 동일하게 급여를 조정해주기로 결정했다. 예를
들어 5등급의 최대 급여는 100만원으로 인상된 급여는 115만원인데 만일 4등급 사원 중에 인상 급여가 115
만원에 미치지 못하는 사원이 있다면 해당 사원의 인상된 급여는 115만원으로 조정해 주는 것이다.

2-4.html

<html>
<head>
<title>2-4.html 급여 입력 폼파일</title>
<meta http-equiv="content-type" content="text/html; charset=euc-kr">
</head>
  <form method="post" action="2-4.php">
	현재 급여 입력: <input type="text" name="sal">만원<br>
		<input type="submit" name="확인" value="확인">
		<input type="reset" name="취소" value="취소"><br>
  </form>
</html>

2-4.php

<?
   $sal = $_POST["sal"];
   $con = ceil($sal/100);
   switch ($con) {
   case 1: // sal이 100만원 이하인 경우(5 등급)
          $sal = round($sal*1.15);
          echo(" 당신의 내년 급여는 15% 인상된 {$sal}만원입니다.");
          break;
   case 2: // 101만원≦sal≦200만원(4 등급)
          $sal = round($sal*1.1);
          if ($sal >= 115) // 5 등급 인상 후 최대 급여 115만원
            echo(" 당신의 내년 급여는 10% 인상된 {$sal}만원입니다.");
          else
            echo(" 당신의 내년 급여는 115만원입니다.");
          break;
   case 3: // 201만원≦sal≦300만원(3 등급)
          $sal = round($sal*1.05);
          if ($sal >= 220) // 4 등급 인상 후 최대 급여 220만원
            echo(" 당신의 내년 급여는 10% 인상된 {$sal}만원입니다.");
          else
            echo(" 당신의 내년 급여는 220만원입니다.");
          break;
    case 4: // 301만원≦sal≦400만원(2 등급)
          $sal = round($sal*1.02);
          if ($sal >= 315) // 3 등급 인상 후 최대 급여 315만원
             echo(" 당신의 내년 급여는 10% 인상된 {$sal}만원입니다.");
          else
            echo(" 당신의 내년 급여는 315만원입니다.");
          break;
   default : // sal이 400만원을 초과하는 경우(1 등급)
          if ($sal >= 408) // 2 등급 인상 후 최대 급여 408만원
            echo(" 당신의 내년 급여는 동결된 {$sal}만원입니다.");
          else echo(" 당신의 내년 급여는 408만원입니다.");
}
?>

 

실행결과

변수

$a = 1;
대소문자 구별
변수명에 숫자 먼저 사용 X

데이터 타입

변수에 저장 값에 따라 형변환이 된다.
필요시 형변환을 할 수 있다.
settype() 함수를 이용해 형변환 할 수 있다. > $int = settype($a, integer)

<? $bo = TRUE; $int = (integer)$bo; $str = (string)$bo; echo("\$int = $int<br> \$str = $str"); ?>

인용부호와 문자열

<? $a = "\t AA"; $b = '\t AA'; echo("\$a = $a<br> \$b = $b"); ?>

산술 연산자 및 대입 연산자

왼쪽. 산술 연산자 / 오른쪽. 대입 연산자

증감 연산자

관계 연산자

논리 연산자

$d = $a 먼저 연산 후 and 연산

문자열 연산자



예제 1. 형변환

<? $var1 = "1"; $var1++; //ASCII 49>50 $var2 = "a"; $var2++; //ASCII 97>98 $var3 = 10+"11"; //10+11 $var4 = 10+1.2; //10+1.2 $var5 = 10+"1.1e2"; //10+1.1*(10**2)=10+110 $var6 = 10+"A11"; //A 해석x $var7 = 10+"11A"; //10+11 echo("\$var1 = {$var1}<br>"); echo("\$var2 = {$var2}<br>"); echo("\$var3 = {$var3}<br>"); echo("\$var4 = {$var4}<br>"); echo("\$var5 = {$var5}<br>"); echo("\$var6 = {$var6}<br>"); echo("\$var7 = {$var7}<br>"); ?>


예제 2. boolean 형변환

<? $boo = TRUE; $int = (integer)$boo; $str = (string)$boo; $bt = gettype($boo); $it = gettype($int); $st = gettype($str); echo("\$boo = {$boo}_{$bt}<br>"); echo("\$int = {$int}_{$it}<br>"); echo("\$str = {$str}_{$st}<br><hr>"); $boo = FALSE; $int = (integer)$boo; $str = (string)$boo; $bt = gettype($boo); $it = gettype($int); $st = gettype($str); echo("\$boo = {$boo}_{$bt}<br>"); echo("\$int = {$int}_{$it}<br>"); echo("\$str = {$str}_{$st}"); ?>


예제 3. 산술 연산자

<? $a = 10; $b = 4; $add = $a + $b; $sub = $a - $b; $mul = $a * $b; $div = $a / $b; $mod = $a % $b; echo("\$a + \$b는 {$add}입니다.<br>"); echo("\$a - \$b는 {$sub}입니다.<br>"); echo("\$a * \$b는 {$mul}입니다.<br>"); echo("\$a / \$b는 {$div}입니다.<br>"); echo("\$a % \$b는 {$mod}입니다.<br>"); ?>


예제 4. 대입 연산자

<? $a = 10; $b = 4; $a += $b; echo("\$a += \$b의 결과는 {$a}입니다.<br>"); $a = 10; $a -= $b; echo("\$a -= \$b의 결과는 {$a}입니다.<br>"); $a = 10; $a *= $b; echo("\$a *= \$b의 결과는 {$a}입니다.<br>"); $a = 10; $a /= $b; echo("\$a /= \$b의 결과는 {$a}입니다.<br>"); $a = 10; $a %= $b; echo("\$a %= \$b의 결과는 {$a}입니다.<br>"); ?>


예제 5. 몫과 나머지 구하기
.html

<html> <head> <title>1-5.html 입력 폼파일</title> <meta http-equiv="content-type" content="text/html; charset=euc-kr"> </head> <form method="post" action="1-5.php"> 피제수 : <input type="text" name="a"><br> 제수 : <input type="text" name="b"><br> <input type="submit" name="확인" value="확인"> <input type="reset" name="취소" value="취소"><br> </form> </html>

.php

<? $a = $_POST["a"]; $b = $_POST["b"]; $mod = $a % $b; $div = ($a - $mod) / $b; echo("{$a}를 {$b}로 나눈 몫은 {$div}이고<br> 나머지는 {$mod}이다."); ?>

HTML 먼저 공부하고 진행하기

HTML 파일 내에서 PHP 실행

 

예제 1

<html> 
<head> 
<title>0-1.html</title> 
<meta http-equiv="content-type" content="text/html; charset=euc-kr"> 
</head> 
<body>
<hr> 
<?
   $a = 1;
   $b = 2;
   $c = $a + $b;
   echo("두 수의 합은 {$c}입니다.");
?>
<hr> 
</body> 
</html>

페이지 소스코드

페이지 소스코드는 위와 같이 PHP 파서에서 변경된 것을 확인할 수 있다.

 

예제 2

<html> 
<head> 
<title>0-1.html</title> 
<meta http-equiv="content-type" content="text/html; charset=euc-kr"> 
</head> 
<body>
<?
   $a=1;
   $b=2;
   $c=$a+$b;
?>
<table border="1">
  <tr>
     <td align="center" width="140" height="10" colspan="2">
     <? echo("\$a=$a, \$b=$b"); ?> </td>
  </tr>
  <tr>
     <td width="120" height="10">두 수의 합은 </td>       
     <td width="20" height="10"><? echo("{$c}"); ?></td> 
  </tr>
</table> 
</body> 
</html>

예제 3

.html

<html> 
<head> 
<title>0-3.html 폼파일</title> 
<meta http-equiv="content-type" content="text/html; charset=euc-kr"> 
</head>

  <form method="post" action="0-3.php">
     입력 값 : <input type="text" name="in"><br>
        <input type="submit" name="확인" value="확인"> 
        <input type="reset" name="취소" value="취소"><br> 
  </form> 
</html>

.php

<?  
  $in = $_POST["in"];  
  echo(" 입력된 값은 {$in} 입니다. "); 
?>

+ Recent posts