본문 바로가기
강의

PHP

by IT새내기IM 2023. 6. 12.

■ PHP 의미 , 장점

PHP ?

1. 서버 측에서 실행되는 프로그래밍 언어로 HTML을 프로그래밍적으로 생성해주고, 데이터베이스와 상호작용 하면서 데이터를 저장하고, 표현

2. 웹을 위해서 만들어졌고, 지금도 웹을 위해서 발전하고 있는 웹을 위한 언어

3. Personal Home Page Tools 의 약자에서 PHP:Hypertext Preprocessor 로 의미가 변경

 

PHP 장점

1. 웹에 최적화된 언어

2. 웹 개발에 필요한 수많은 로직들이 함수의 형태로 미리 제공됨

3. 거의 모든 데이터베이스를 지원

4. 가장 많은 공개 소프트웨어가 PHP로 만들어짐

◆ 문자열 (String)

문자들을 표현할때 사용하며, 메모리 공간의 제약이 없다.

즉, 문자열의 길이에 상관없이 제한 없는 문자열을 지원한다.

 

문자열은 큰따옴표("), 작은따옴표(')를 이용하여 할당할 수 있다.

 

 

1. 큰따옴표

 

"Hello $str" 와 같이 큰따옴표 사이에 문자열을 써넣으면 PHP는 문자열을 해석하는 절차를 거친다.

큰따옴표 내부에 변수가 있다는 이는 변수의 값을 출력한다.

 

<?php

$str = 'World';

 

echo "Hello <br>"; //Hello

echo "Hello $str"; //Hello World

?>

== 출력 내용 ==

Hello 

Hello World 

 

 

2. 작은따옴표

 

작은따옴표 안에서는 변수가 허용되지 않는다.

작은따옴표는 문자열 해석절차를 거치지 않기때문에 큰따옴표보다 성능의 우위를 점하나 큰 차이가 있는 것은 아니다.

 

<?php

$str = 'World';

 

echo 'Hello <br>'; //Hello

echo 'Hello $str'; //Hello World

?>

== 출력 내용 ==

Hello 

Hello $str

 

 

3. 문자열 합치기 

 

<?php

$str = 'World';

 

echo 'Hello '.$str.'<br>';

echo "Hello ".$str."<br>";

?>

== 출력 내용 ==

Hello World 

Hello World

 

 

4. 변수의 해석

 

큰따옴표와 Heredoc 문법에서는 문자열 내부의 변수를 해석하여 처리하는데 이는 이어지는 문자열에 따라 예상밖의 결과를 초래하기도 한다.

이를 안전하게 처리하기 위해 변수를 {}를 이용해 감싸는 방식이 추천된다. 

 

<!-- 한글이 깨질 경우 -->

<meta charset="utf-8"> 

<?php

$money = "1000";

 

echo "수입이 $money 발생하였다.<br>"; //수입이 1000 발생하였다. 

echo "수입이 $money원 발생하였다.<br>"; //$money원 이라는 변수를 찾기에 올바르지 않다. 

echo "수입이 $money 원 발생하였다.<br>"; //수입이 1000 원 발생하였다. 

echo "수입이 {$money}원 발생하였다.<br>"; //수입이 1000원 발생하였다. 

?>

== 출력 내용 == 

수입이 1000 발생하였다.

수입이 발생하였다.

수입이 1000 원 발생하였다.

수입이 1000원 발생하였다.

 

 

5. 기타

 

<?php echo "XHTML나 XML 문서와 호환시키거나 구분할 때 이렇게 쓰세요"; ?> 

 

<? echo "이런 형태가 기본 처리명령입니다"; ?>

 

<script language="php">

echo '어떤 에디터는 이러한 방법을 좋아하지 않습니다';

</script>

 

<? $str = "변수 값을 출력을 해 봅시다."; ?>

 

<? echo $str ?>

<? echo $str; ?>

<?= $str ?>

<?= $str; ?>

◆ 변수명 규칙

PHP에서 변수명은 아래에서 제시하는 변수명 규칙을 따르며, 이를 어긴다면 오류가 발생한다.

 

1) 변수명은 반드시 $(달러표시)로 시작해야 한다.

2) 변수명은 적어도 하나 이상의 문자를 가져야 한다.

3) $ 표시 다음에 오는 첫 번째 문자는 알파벳이거나 _(언더바)여야 한다.

4) $와 _를 제외한 모든 특수문자와 빈칸은 변수명에 포함되면 안된다.

 

<?

$name //유효한 변수선언 

$_name //유효한 변수선언 

$nick_name //유효한 변수선언

 

nick_name //달러표시로 시작하지 않아 유효하지 않음

$1_name //첫문자 숫자사용으로 유효하지 않음 

$nick-name //특수문자사용으로 유효하지 않음

$nick_name more //빈칸이 포함되어 유효하지 않음

$this //$this는 특수 변수로, 할당할 수 없어 유효하지 않음

?>]

※ editplus , alftp 다운로드 ( 구버전 )

01. editplus - 4버전

https://editplus.com/kr/latest4.html

 

02. alftp - 5.33버전

https://gbworld.tistory.com/767#google_vignette

※ apmsetup ( Apache + PHP + Mysql ) 설치

01 [ apmsetup7.zip 다운로드 ] 

 

02 Apache + PHP + MySQL : 설치 프로그램

 Apache 2.0 

 PHP Version 5.2.12 

 MySQL server version 5.1.41 

 

03 제어판 > 시스템 및 보안 > 관리 도구 > 서비스 [더블 클릭]

04 이클립스를 통해 [웹 서버 및 디비] 구동 시 충돌이 발생한다면 위의 두 서비스를 종료 후 실행

※ PHP 참고 사이트

https://phpschool.com/ 

 

https://sir.kr/ 

 

◆ 변수의 범위

<?

$a = 1; //전역변수
function test() {
	echo $a; //지역변수
}
test(); //출력할 값이 없음
?> 

== 설명 ==
전역 변수는 스크립트 내에서 정의된 변수로 스크립트 내에서 사용할 수 있지만 함수 안에서는 사용할 수 없다. 


<?
function test1() { 
	$a = 2; //지역변수 초기화 선언
	echo $a;
}
test1(); //2 출력
?> 


<?
function test2() { 
	global $a; // 함수 내에서 사용할 전역 변수를 명시함
	echo $a;
}
test2(); //1 출력 
?>


<?
function test3() {
	$b = 0;
	echo $b;
	$b++;
}
test3(); //0 출력
test3(); //0 출력
test3(); //0 출력
?>
== 설명 ==
함수 안에서 사용된 변수는 함수가 끝나면 삭제된다. 


<?
function test4() {
	static $c = 0;
	echo $c;
	$c++;
}
test4(); //0 출력
test4(); //1 출력
test4(); //2 출력
?>

== static 설명 ==
함수 안에서 사용된 변수의 값을 유지하기 위해서 static 키워드를 사용한 정적 변수로 선언할 수 있다.

◆ 주석 처리

<?
// 주석

////////////////////
//      주석      //
////////////////////

/*
주석
주석
주석
*/

# 주석

##################
##     주석     ##
##################
?>

◆ 참조, 비교, 논리, 형 연산자

1. 참조 연산자

 

<?

$a = 5;

$b = $a;

$a = 7; // $a=7, $b=5

 

$a = 5;

$b = &$a; // 참조연산자

$a = 7; // $a, $b 모두 7

 

// $a와 $b는 같은 메모리 위치를 가리키고 있다.

 

unset($a); // $a값이 없어진다. $b=7은 유지된다.

?>

 

2. 비교 연산자

 

<?

// >, <, >=, <= 는 생략

// == : 등위

// === : 동일

// != : 같지 않다

// !== : 동일하지 않다

// <> : 같디 않다 ( != 동일 )

 

$c = 1; //int

$d = true; //boolean >> true=1, false=0

 

if($c == $d){

echo "value 같다";

}else{

echo "value 다르다";

}

 

if($c === $d){

echo "type 과 value 둘다 동일하다";

}else{

echo "동일하지 않다";

}

?>

 

3. 논리 연산자

 

NOT : !

AND : && , and

OR : || , or

 

4. 형 연산자

 

<?

$number = 1234567.888;

$a = number_format($number); //정수처리, 3자리 마다 쉼표처리

$b = number_format($number,1); //소수점 1자리 표시 (2자리에서 반올림처리)

?>

 

static = 메모리에 할당된 값 날리지 않고 저장
global = 전역처리된 값을 메서드에서 초기화 안시켜도 쓸 수 있께해줌
& = $a의 메모리주소에 저장된 마지막값을 가져오게함

DB도 charset 처리해줘야한다.

 

◆ if 조건문

<?

$num = 15;

// if
if($num > 10){
	echo "참";
}

echo "<br>";

// if, else 방법1
if($num > 10){ //num변수가 10보다 크다면
	echo "숫자 {$num}는 10보다 크다";
}else{ //위 조건의 나머지 (num변수가 10보다 작거나 같다면)
	echo "10보다 작거나 같다";
}

echo "<br>";

// if, else 방법2
if($num > 10): echo "숫자 ".$num."는 10보다 크다";
else: echo "10보다 작거나 같다";
endif;

echo "<br>";

// if, else if, else
$number = 0;

if($number > 0){
	echo "양수";
}else if($number == 0){
	echo "0";
}else{
	echo "음수";
}
?>

◆ switch 조건문

 

<?

$str = "남"; //남,여

 

switch($str){

case "남" :

echo "남자다.";

break;

case "여" :

echo "여자다.";

break;

default :

echo "성별이 없다.";

}

?>

 

 

== 설명 ==

switch문은 case문의 조건이 참인 경우 그 이하 case문과 default문까지 실행을 하도록 되어 있다.

이하 case문과 default문이 실행되지 않도록 하기 위해서는 break문을 사용하여 다음 소스를 실행하지 않도록 명시하여야 한다.

 

◆ for 반복문

 

<?

//기본

for($count=1; $count<=9 ; $count++){ // $count 를 1로 초기화 하고

echo $count;

echo "<br>";

}

 

//변수 2개 처리

for($i=1,$j=1; $i+$j<=10; $i++,$j++){

echo $i." + ".$j." = ".($i + $j);

echo "<br>";

}

 

// 구구단 2단

$gugudan = 2;

 

for($count=1; $count<=9 ; $count++){

echo $gugudan." * ".$count." = ".$gugudan * $count;

echo "$gugudan * $count = ".$gugudan * $count; //문자열에 변수 적용 ( 변수와 문자열이 떨어져 있을 경우 )

echo "<br>";

}

 

// 중첩

for($dan=2; $dan<=9; $dan++){

for($i=1; $i<=9; $i++){

echo "{$dan}*{$i} = ".$dan*$i."<br>"; //문자열에 변수 적용 ( {변수}와 문자열이 붙어 있을 경우 )

}

}

?>

 

◆ while 반복문

<? 

//for 기본

for($count=1; $count<=9 ; $count++){ // $count 를 1로 초기화 하고

echo $count;

echo "<br>";

}

 

echo "=============<br>"; 

//while

$count = 0;

while(++$count <= 9){ // $count 값을 1증가시키고 9보다 작거나 같은지 확인한다.

echo $count."<br>";

}

echo "=============<br>";

$count = 0;

while($count++ < 9){ // $count 값이 9보다 작은지 확인 후 1증가 시킨다.

echo $count."<br>";

}

echo "=============<br>";

$count = 1;

while($count <= 9){ // $count 값이 9보다 작거나 같은지 확인한다.

echo $count."<br>";

$count++; // $count 값을 1증가

}

echo "=============<br>";

 

//for 변수 2개 처리

for($i=1,$j=1; $i+$j<=10; $i++,$j++){

echo $i." + ".$j." = ".($i + $j);

echo "<br>";

}

 

echo "=============<br>";

//while 

$i = 1;

$j = 1;

while($i+$j<=10){

echo $i." + ".$j." = ".($i + $j);

echo "<br>";

$i++;

$j++;

}

echo "=============<br>";

 

//for 구구단 2단

$gugudan = 2;

for($count=1; $count<=9 ; $count++){

echo $gugudan." * ".$count." = ".$gugudan * $count;

echo " ($gugudan * $count = ".$gugudan * $count.")"; //문자열에 변수 적용 ( 변수와 문자열이 떨어져 있을 경우 )

echo "<br>";

}

 

echo "=============<br>";

//while

$count=1;

while($count<=9){

echo $gugudan." * ".$count." = ".$gugudan * $count;

echo "<br>";

$count++;

}

echo "=============<br>";

 

//for 중첩

for($dan=2; $dan<=9; $dan++){

for($i=1; $i<=9; $i++){

echo "{$dan}*{$i} = ".$dan*$i."<br>"; //문자열에 변수 적용 ( {변수}와 문자열이 붙어 있을 경우 )

}

}

 

echo "=============<br>";

//while

$dan=2;

while($dan<=9){

$i=1;

while($i<=9){

echo "{$dan}*{$i} = ".$dan*$i."<br>";

$i++;

}

$dan++;

}

?>

 

<?

//for 기본

for($count=1; $count<=9 ; $count++){ // $count 를 1로 초기화 하고

echo $count;

echo "<br>";

}

 

echo "=============<br>"; 

//do while

$count = 1;

do{

echo $count."<br>";

}while(++$count <= 9);

echo "=============<br>";

 

//for 변수 2개 처리

for($i=1,$j=1; $i+$j<=10; $i++,$j++){

echo $i." + ".$j." = ".($i + $j);

echo "<br>";

}

 

echo "=============<br>";

//do while 

$i = 1;

$j = 1;

do{

echo $i." + ".$j." = ".($i + $j);

echo "<br>";

$i++;

$j++;

}while($i+$j<=10);

echo "=============<br>";

 

//for 구구단 2단

$gugudan = 2;

for($count=1; $count<=9 ; $count++){

echo $gugudan." * ".$count." = ".$gugudan * $count;

echo " ($gugudan * $count = ".$gugudan * $count.")"; //문자열에 변수 적용 ( 변수와 문자열이 떨어져 있을 경우 )

echo "<br>";

}

 

echo "=============<br>";

//do while

$count=1;

do{

echo $gugudan." * ".$count." = ".$gugudan * $count;

echo "<br>";

$count++;

}while($count<=9);

echo "=============<br>";

 

//for 중첩

for($dan=2; $dan<=9; $dan++){

for($i=1; $i<=9; $i++){

echo "{$dan}*{$i} = ".$dan*$i."<br>";

}

}

 

echo "=============<br>";

//do while

$dan=2;

do{

$i=1;

do{

echo "{$dan}*{$i} = ".$dan*$i."<br>";

$i++;

}while($i<=9);

$dan++;

}while($dan<=9);

?>

 

◆배열

1. 배열

 

<?

// 인덱스(index)는 자동적으로 할당 (0 부터 시작)

$cars = array("현대","기아","삼성");

 

echo "I like ".$cars[0].", ".$cars[1]." and ".$cars[2];

echo "<br>";

 

// for문 이용해서 출력

$arrlength = count($cars); // $cars 배열의 길이값

 

for($i=0;$i<$arrlength;$i++) {

echo $cars[$i];

echo "<br>";

}

?>

 

2. 연계 배열(Associative Arrays)

 

<?

// 연계 배열은 값을 할당하는데 이름 키(named keys)를 사용하는 배열이다.

$age = array("Park"=>"35","Lee"=>"37","Kim"=>"43");

//or

$age['Park']="35";

$age['Lee']="37";

$age['Kim']="43";

 

// 연계 배열의 모든 값들을 반복하여 출력하려면,  다음과 같이 foreach 루프를 사용할 수 있다.

foreach($age as $x=>$y_value) {

echo "key = ".$x.", value = ".$y_value;

echo "<br>";

}

?>

 

3. 2차원 배열

 

<?

$cars = array(

array("현대",2019,2),

array("기아",2018,3),

array("BMW",2017,4)

);

 

echo $cars[0][0]." - ".$cars[0][1]." - ".$cars[0][2]."<br>";

echo $cars[1][0]." - ".$cars[1][1]." - ".$cars[1][2]."<br>";

echo $cars[2][0]." - ".$cars[2][1]." - ".$cars[2][2]."<br>";

 

for ($i = 0; $i < 3; $i++) {

echo "<p><b>Index : $i</b></p>";

echo "<ul>";

for ($j = 0; $j < 3; $j++) {

echo "<li>".$cars[$i][$j]."</li>";

}

echo "</ul>";

}

?>

 

 

● 페이지 호출 시간 측정

<?

echo microtime();

?>

0.07563600 1199169216 <- 이러한 숫자 형태로 출력 된다.

1970년 1월 1일 0시 0분 0초 기준으로 몇초가 흘렀는지를 나타낸다. 

 

이는 한 자리의 공백을 띄우고 두개의 수가 출력되는 것을 볼 수 있다. 

각각 마이크로 seconds와 Unix timestamp (sec 단위)가 나오는 것이라고 한다. 

 

 

<?

// 페이지 호출 시작 시간

$start = microtime();

$str = explode(" ",$start);

$start = $str[0] + $str[1];

?>

내용 부분

<?

// 페이지 호출 종료 시간

$end = microtime();

$estr = explode(" ",$end);

$end = $estr[0] + $estr[1];

?>

 

<?

// 호출 시간 계산

$enc_time = number_format(($end-$start),8);

?>

 

<?=$enc_time?>

◆ $_SERVER 함수

$_SERVER['DOCUMENT_ROOT'] : 현재 사이트가 위치한 서버상의 위치 = /dancepkt/www

$_SERVER['REMOTE_ADDR'] = 사이트 접속한 사용자 IP = xxx.xxx.xxx.xxx

$_SERVER['SCRIPT_FILENAME'] = 실행되고 있는 위치와 파일명 = /dancepkt/www/index.php

$_SERVER['SERVER_NAME'] = 사이트 도메인 = dancepkt.cafe24.com

$_SERVER['REQUEST_URI'] = 현재페이지의 주소에서 도메인 제외 =  /index.php

$_SERVER['PHP_SELF'] = 현재페이지의 주소에서 도메인과 넘겨지는 값 제외 = /index.php

 

$_SERVER['HTTP_ACCEPT_ENCODING'] = 인코딩 방식

$_SERVER['HTTP_ACCEPT_LANGUAGE'] = 언어 = ko

$_SERVER['HTTP_USER_AGENT'] = 사이트 접속한 사용자 환경

$_SERVER['SERVER_PORT'] = 사이트가 사용하는 포트 = 80

$_SERVER['SERVER_SOFTWARE'] = 서버의 소프트웨어 환경 = Apache

$_SERVER['GATEWAY_INTERFACE'] = cGI 정보 = CGI1.1

$_SERVER['SERVER_PROTOCOL'] = 사용된 서버 프로토콜 = HTTP1.1

 

 

<?

echo '$_SERVER["DOCUMENT_ROOT"] : '.$_SERVER['DOCUMENT_ROOT']."<br>";

echo '$_SERVER["REMOTE_ADDR"] : '.$_SERVER['REMOTE_ADDR']."<br>";

echo '$_SERVER["SCRIPT_FILENAME"] : '.$_SERVER['SCRIPT_FILENAME']."<br>";

echo '$_SERVER["SERVER_NAME"] : '.$_SERVER['SERVER_NAME']."<br>";

echo '$_SERVER["REQUEST_URI"] : '.$_SERVER['REQUEST_URI']."<br>";

echo '$_SERVER["PHP_SELF"] : '.$_SERVER['PHP_SELF']."<br>";

?>

 

◆ include(), include_once(), require(), require_once() 함수

1. include()
같은 파일 여러 번 포함 가능 / 포함할 파일이 없어도 다음 코드 실행

2. include_once()
같은 파일 한 번만 포함 / 포함할 파일이 없어도 다음 코드 실행

3. require()
같은 파일 여러 번 포함 가능 / 포함할 파일이 없으면 다음 코드 실행하지 않음

4. require_once()
같은 파일 한 번만 포함 / 포함할 파일이 없으면 다음 코드 실행하지 않음


== a.php 파일 생성후 내용 추가 ==
<h1>a.php 내용 입니다.</h1> 

== test.php 파일 생성후 내용 추가 후 실행 == 
<h3>include 시작</h3>

<? include_once "a.php"; //실행 ?>

<? include "a.php"; //실행 ?>
<? include "a.php"; //실행 ?>
<? include "b.php"; //포함할 파일이 없어도 다음 코드 실행 ?>

<? include_once "a.php"; //위에서 이미 실행 되었기에 실행 안됨 ?>

<h3>require 시작</h3>

<? require "a.php"; //실행 ?>
<? require "a.php"; //실행, 같은 파일 여러 번 포함 가능?>

<? require_once "a.php"; //위에서 이미 실행 되었기에 실행 안됨 ?>

<? require_once "b.php"; //포함할 파일이 없으면 다음 코드 실행하지 않음 ?>

<h3>끝</h3>

◆ include $DOCUMENT_ROOT.() 함수

<?=$_SERVER['DOCUMENT_ROOT']; //서버상의 위치 ?>

<? include $DOCUMENT_ROOT.("/dancepkt/www/a.php"); //cafe24.com 절대경로 처리 ?>

<? include $DOCUMENT_ROOT.("/dancepkt/www/a.php"); //절대경로 처리 ?>

 

<?

// 경로상 변수 처리

$addr = $_SERVER['DOCUMENT_ROOT'];

include $DOCUMENT_ROOT.("{$addr}/a.php");

?>

◆ 상수 정의/선언/사용 방법

상수는 변수와 비슷하지만, 한번 값을 대입하면 변경할 수 없습니다.

읽기 전용 변수라고도 할 수 있습니다.

값이 변경되면 위험한 경우나, 기억하기 힘든 값에 간단한 이름을 붙이고 싶을 때 유용합니다.

 

상수를 정의하려면, define 함수를 사용합니다. 

ex) define("상수명", "값");

 

상수명은 대문자 알파벳으로 만드는 것이 관례이고, 띄어쓰기는 밑줄(언더스코어)문자인 "_"를 사용합니다. 

 

<?

define("NUMBER_ONE", 1);

define("NUMBER_TWO", 2);

define("PI", 3.14);

define("HI", "안녕하세요", true);

 

//define() 함수의 3번째 인수에 true 를 지정하면, 상수명의 대소문자를 구분하지 않습니다.

//기본적으로는 상수명의 대소문자를 구분합니다.

 

echo NUMBER_ONE."<br>"; // 출력 결과: 1

echo NUMBER_ONe."<br>"; // 출력 결과: NUMBER_ONe

echo NUMBER_ONE + NUMBER_TWO."<br>"; // 출력 결과: 3

echo PI * NUMBER_TWO."<br>"; // 출력 결과: 6.28

 

echo HI . "<br>"; // 출력 결과: 안녕하세요

echo Hi . "<br>"; // 출력 결과: 안녕하세요

echo hI . "<br>"; // 출력 결과: 안녕하세요

echo hi . "<br>"; // 출력 결과: 안녕하세요

?>

● 데이터베이스 연결설정

<?

##### 데이터베이스 연결설정 인자 (서버명, 사용자명, 비밀번호, 데이터베이스명)

$host= "localhost";

$user= "1111"; 

$password= "1111";

$db= "test"; 

 

##### 데이터베이스에 연결한다.

$conn = @mysql_connect($host,$user,$password);

if(!$conn) {

   echo "데이터베이스 연결실패";

   exit;

}

 

##### 작업대상 데이터베이스를 선택한다.

$dbnum = mysql_select_db($db);

if(!$dbnum) {

   echo "데이터베이스 선택실패";

   exit;

}

?>

https://nittaku.tistory.com/375

◆ 세션 (session)

세션을 등록하기 위해서는 가장먼저 세션을 초기화 하여 세션을 생성하고,

현재의 세션 아이디를 활성화시키기 위해 session_start()함수를 사용한다. 

 

<?

session_start(); // 세션을 초기화 합니다. (세션을 쓰겠다라고 알려주는 역활)

session_id(); // 랜덤 26자리 제공 

 

$_SESSION['변수명'] // 세션을 등록 합니다.

?>

 

<?

//모든 변수의 세션 삭제 처리

session_unset();

 

//변수 하나 세션 삭제 처리

unset($_SESSION['변수명']);

 

//session_id() 새로 생성해서 갱신

session_regenerate_id(); 

echo session_id(); // 값이 갱신 되는것을 볼 수 있다. 

?>

◆ 파일 첨부

<form action="upload.php" method="post" enctype="multipart/form-data">

<input type="file" name="file1">

<input type="submit" value="파일 업로드">

</form>

 

== upload.php ==

<?

$upload_dir = "upload"; // 파일 저장 상대경로

 

$file1name = $_FILES['file1']['name'];

$tmp_file = $_FILES['file1']['tmp_name'];

 

move_uploaded_file($tmp_file, "$upload_dir/$file1name"); //저장 경로에 파일 업로드 실행 함수

?>

 

== 설명 ==

form 태그를 이용해서 전송된 파일은 $_FILES 를 통해 접근 가능합니다. 

서버가 업로드받은 파일은 $_FILES['file1']['tmp_name']에 들어있습니다

이게 저장될 위치를 $upload_dir로 설정하고, move_uploaded_file()함수를 위의 예처럼 실행시키면, 지정 위치에 업로드한 파일이 저장됩니다.

● test_member 테이블 작성

CREATE TABLE test_member (

  id varchar(50) NOT NULL,

  pass varchar(50) NOT NULL,

  regdate timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,

  PRIMARY KEY (`id`)

);

 

 

== 설명 ==

CURRENT_TIMESTAMP () 함수는 현재 날짜와 시간을 리턴합니다.

"YYYY-MM-DD HH:MM:SS" = "년-월-일 시:분:초"

 

mysql> SELECT CURRENT_TIMESTAMP();

mysql> select now();

ㄴ/a_aaa/db.con.php

<?

##### 데이터베이스 연결설정 인자 (서버명, 사용자명, 비밀번호, 작업대상 데이터베이스명)

$host= "localhost";

$user= "root";

$pass= "apmsetup";

$db= "test";

 

##### 데이터베이스(mysql)에 연결한다.

$conn = mysql_connect($host,$user,$pass);

if(!$conn) {

error("데이터베이스 연결실패");

exit;

}

 

##### 작업대상 데이터베이스를 선택한다.

$dbnum = mysql_select_db($db);

if(!$dbnum) {

error("데이터베이스 선택실패");

exit;

}

?>

/a_aaa/test.php (쿼리 테스트)

<!doctype html>

<html>

<head>

<meta charset="utf-8">

<title>mysql - php - query</title>

</head>

<body>

 

<?

include $DOCUMENT_ROOT.("/dancepkt/www/a_aaa/db.con.php");

 

// 등록

$id = "1111";

$pass = "1111";

 

$query = "insert into test_member (id,pass) values ('$id','$pass')";

//mysql_query($query);

 

// 수정

$id = "1111";

$pass = "2222";

 

$query = "update test_member set pass = '$pass' where id = '$id'";

//mysql_query($query);

 

// 삭제

$id = "2222";

 

$query = "delete from test_member where id = '$id'";

//mysql_query($query);

 

/*

mysql_result() 함수 역시 결과 레코드 세트에서 필드값을 가져오는 역할을 한다. mysql_fetch_row(), mysql_fetch_object(), mysql_fetch_array() 함수가 결과 레코드 세트에서 배열이나 객체의 형태로 하나의 레코드가 가진 모든 필드값을 한꺼번에 가져오는데 반해 mysql_result() 함수는 한번 호출할 때 레코드가 가진 여러 필드 중에서 하나의 필드값만을 반환한다.

 

따라서 쿼리 결과 검색되어진 레코드 세트의 크기가 큰 경우에는 mysql_result() 함수보다는 mysql_fetch_row(), _array(), _object() 함수를 사용하는 것이 휠씬 빠른 결과를 보여준다.

MYSQL 5.5 이상 버전에서는 mysql_result() 함수를 사용할 수 없다.

*/

 

//총 게시물

$query = "select count(*) as cnt from test_member";

$result = mysql_query($query);

$rows = mysql_fetch_array($result);

$total_record = $rows[cnt];

 

echo "총 게시물 : ".$total_record; 

 

// 리스트

$query = "select * from test_member";

$result = mysql_query($query);

 

while($row = mysql_fetch_array($result)){

echo $row[id]." / ";

echo $row[pass]." / ";

echo $row[regdate];

echo "<br>";

}

 

// 뷰1(_row)

$query = "select * from test_member where id='$id'";

$result = mysql_query($query);

 

$row = mysql_fetch_row($result);

echo $row[0]." / ";

echo $row[1]." / ";

echo $row[2];

echo "<br>";

 

// 뷰2(_array)

$query = "select * from test_member where id='$id'";

$result = mysql_query($query);

 

$row = mysql_fetch_array($result);

echo $row[id]." / ";

echo $row[pass]." / ";

echo $row[regdate];

echo "<br>";

 

// 뷰3(_object)

$query = "select * from test_member where id='$id'";

$result = mysql_query($query);

 

$row = mysql_fetch_object($result);

echo $db_id = $row->id." / ";

echo $db_pass = $row->pass." / ";

echo $db_regdate = $row->regdate;

echo "<br>";

?>

 

</body>

</html>

◆ addslashes(), stripslashes(), htmlspecialchars(), nl2br() 함수

DB 작업을 하기 위해서 쿼리를 작성하게 되는데, 이때 DB 시스템은 작은따옴표 ' 와 큰따옴표 " 그리고 백슬래시 / 그리고, NULL byte 를 문자열을 구분하는 등의 기준으로 이용하게 됩니다.

 

그런데, 하나의 문자열 안에 따옴표가 들어가 있게되면, 예상치 못하게 오류가 발생하게 됩니다.

그래서, 문자열을 데이터베이스에 저장할 수 있는 포맷으로 변화시켜줄 필요가 있습니다. 

 

 

예를 들면,

<?

//$title 변수를 게시판 제목에 해당하는 칼럼에 넣을 경우로 가정

$title = "i'm a boy";

$query = '$title';

mysql_query($query);

 

//이렇게 쿼리로 전송되게 되면, 'i'm a boy' (작은 따옴표가 3개) 오류가 발생하게 됩니다.

?>

 

그래서, 내부에 위치하게 될 따옴표들을 기준을 가지고 다르게 표현을 해 줘야합니다. 흔히들 이스케이프(escape) 시킨다...라고 표현하는데요.

 

I'm a boy 로 바꾸어 주는 작업을 말합니다. 그 작업을 해주는 함수가 아래의 addslashes() 함수입니다.

<?

$title = "i'm a boy";

$title = addslashes($title); //escape 처리 

$query = "insert into bbs (title) values ('$title')";

mysql_query($query);

?>

 

그럼, DB에서 다시 꺼내왔을 때는 추가됐던 백슬래쉬를 제거를 해줘야 원래의 문자열이 되겠지요?

추가됐던 백슬래쉬를 제거해주는 함수가 stripslashes() 입니다. 

<?

$query = "select title from bbs;

$result = mysql_query($query);

$row = mysql_fetch_array($result);

 

$title = stripslashes($row[title]); 

 

//태그 사용 불가 처리

$title = htmlspecialchars($title); 

 

//개행처리 : \n을 <br> 대체

$comment = "첫번째 줄 내용\n 두번째 줄 내용";

$comment = nl2br($comment); 

echo $comment;

?>

== 출력내용 =

첫번째 줄 내용

두번째 줄 내용

◆ rand() , range() , shuffle() , count() 함수

1. rand(최소 숫자,최대 숫자) 

 

* 정수로 된 랜덤 숫자를 가져온다는 의미 

* 최소 숫자, 최대 숫자를 인수로 입력하지 않으면 , 0부터 getrandmax() 사이의 임의의 난수를 반환한다.

 

<?

echo "인수 : " . rand(0,10); //0에서 10사이의 숫자 1개를 반환한다.

?>

 

 

2. range(최소 숫자,최대 숫자)

 

* 배열명 = range(범위시작값, 범위종료값); 

 

<?

$num = range(1,5); //1 ~ 5

 

/* 위의 예제 배열 출력구문

$num[0] = 1;

$num[1] = 2; 

$num[2] = 3; 

$num[3] = 4; 

$num[4] = 5; 

*/

 

shuffle($num); //배열 변수를 랜덤하게 뒤섞는다

 

//$num 배열 변수를 출력해 보자

count($num); //$num 변수의 길이 값 

 

for($j=1; $j<=count($num); $j++) {

echo $num[$j]."<br>";

}

?>

◆ strlen() , mb_strlen() - 문자열 길이 , substr() , mb_substr() - 문자열 자르기

1. strlen( 문자열 )

2. mb_strlen( 문자열 , 인코딩 = mb_internal_encoding() )

 

strlen은 문자열 하나만을 인수로 사용하지만,

mb_strlen은 문자열과 현재 파일의 인코딩(= 문자셋 혹은 charset )을 인수로 사용합니다.

mb_strlen 함수를 이용하면 한글 문자열 길이도 문제없이 가져올 수 있습니다.

 

<?

$str_eng = "abcdef";

$str_kor = "가나다";

 

echo "영어 : ".strlen( $str_eng ).'<br/>'; //6

echo "한글 : ".strlen( $str_kor ).'<br/>'; //9

 

// 파일 인코딩이 UTF-8인 경우에 대한 예제입니다.

echo "영어 : ".mb_strlen( $str_eng , "UTF-8" ).'<br/>'; //6

echo "한글 : ".mb_strlen( $str_kor , "UTF-8" ).'<br/>'; //3

?>

 

 

3. substr( $string, $start, [ $length ] )

4. mb_substr( $string, $start, [ $length ], [$encoding] )

 

<?

$str = "abcdefg 123 hijk 4567 lmn";

$str2 = "abcdefg 가나다 hijk 라마바사 lmn";

 

//영문,숫자 자를 때

echo substr( $str , 0, 10 ); //abcdefg 12

echo substr( $str , 4 ); //efg 123 hijk 4567 lmn 

 

//한글 포함 자를 때

echo mb_substr( $str2 , 0, 10 , "utf-8"); //abcdefg 가나

?>

◆ strcmp() - 문자열 비교

두개의 문자열을 비교했을 때 문자열이 일치하면 0 (false) , 일치하지 않으면 0 아닌 정수 값 (true) 반환

대소문자를 구분

문자열 위치에는 문자열 대신 변수가 올 수도 있다. 

 

● strcmp( 1번문자열 , 2번문자열 )

 

 

<?

$str1 = "hello";

$str2 = "hello";

 

// 1번째 방법

if(strcmp( $str1 , $str2 ) == 0){

echo "두 변수의 값이 같다.";

}else{

echo "두 변수의 값이 같지 않다.";

}

 

// 2번째 방법 

if( !strcmp( $str1 , $str2 ) ){ //두 변수의 값이 같다면 false , ! 선언하면 true

echo "두 변수의 값이 같다.";

}else{

echo "두 변수의 값이 같지 않다.";

}

 

// 3번째 방법 

if($str1 == $str2){

echo "두 변수의 값이 같다.";

}else{

echo "두 변수의 값이 같지 않다.";

}

 

//결과 : 두 변수의 값이 같다.

?>

◆ explode() - 문자열 분할

● explode() : 문자열을 분할하여 배열로 저장하는 함수

 

1. explode( delimiter, string );

2. explode( delimiter, string, [ limit ] );

 

delimiter : 문자열을 분할할 기준을 정합니다.

string : 분할할 문자열입니다.

limit : 옵션으로, 분할할 개수를 정합니다. 정수를 입력합니다.

 

<?

$str = 'one two three four';

 

$str1 = explode( ' ', $str );

 

count($str1); //4

for($i=0; $i<count($str1); $i++){

echo $str1[$i];

}

 

/* 결과 값

$str1[0]은 one

$str1[1]은 two

$str1[2]는 three

$str1[3]는 four

*/

 

 

$str2 = explode( ' ', $str, 3 );

 

/* 결과 값

$str2[0]은 one

$str2[1]은 two

$str2[2]는 three four

*/

?>

◆ ceil() , floor() , round() - 소수점 처리

● 소수점 처리

 

ceil() : 올림

floor() : 버림

round() : 반올림

 

<?

$num = 36.5;

 

ceil($num); //37

floor($num); //36

round($num) //37

 

 

$num2 = 36.2;

 

ceil($num2); //37

floor($num2); //36

round($num2) //36

 

 

$num3 = 36.277;

round($num3, 1) //소수점 한자리 표현 : 36.3

?>

'강의' 카테고리의 다른 글

PHP3  (0) 2023.06.12
PHP2  (0) 2023.06.12
Spring Lec08  (0) 2023.05.04
Spring Lec07  (0) 2023.05.03
Spring Lec06  (0) 2023.05.03

댓글