PHP는 서버측에서 실행되는 스크립트 언어입니다.

PHP 서버사이드 스크립트 언어입니다. 자바스크립트는 웹 브라우저에서 내장된 인터프린터에 의해 해석되는 언어입니다. 즉 웹 브라우저에서 이용할 수 있는 프로그램입니다. 반면에 PHP는 서버에 설치된 PHP에 의해 해석됩니다. 이러한 처리를 가능하게 해주는 프로그램은 PHP , JSP, ASP 등 있으며, 워드프레스, 줌라, XE, CAFE24, 티스토리 등의 프랫폼 역시 PHP을 기반으로 하고 잇습니다.

PHP는 서버측에서 실행되는 스크립트 언어입니다.

PHP 출력

<?php
     //실행코드
?>

PHP 주석

//한줄
/* 여러줄 */

PHP 기초
VIEW
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	hello php</body>
</html>

변수는 여러가지 값으로 변할 수 있는 수를 의미합니다.

$변수명 = 값;

PHP 변수
VIEW
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>php</title>
    
    <script>
     //변수명에  javascript를 저장하고 출력하세요!
        var java = "javascript";
        
        document.write(java);
        document.write("<br>");
        document.write("나는 " + java + "를 배우고 있습니다.");
        document.write("<br><br>");
    </script>
</head>
<body>

   <?php
        $php = "php";
        echo $php;
        echo "<br>";
        echo "나는 " . $php . "를 배우고 있습니다.";
        echo "<br>";
        echo "나는  {$php}를 배우고 있습니다.";
        echo "<br>";
        echo "나는  \"php\"를 배우고 있습니다.";
        echo "<br>";
        echo "나는 \$15를 사용했습니다."        
            //만약 $를 변수로 인식할시 \(역슬래시)를 사용하면 문자로 인식합니다.
            
    ?>
    
</body>
</html>

배열은 여러개의 값을 변수에 저장할 수 있습니다.

$변수명 = array();

PHP 기초
VIEW
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script>
        var korea = new Array();
        
        korea[0] = "seoul";
        korea[1] = "busan";
        
        document.write(korea[0]);
        document.write("<br>");
        document.write(korea[1]);
        document.write("<br><br>");
    </script>
</head>
<body>
   
   <?php
        $korea = array();
    
        $korea[0] = "seoul";
        $korea[1] = "busan";
    
        echo $korea[0];
        echo "<br>";
        echo $korea[1];
        echo "<br>";
    
        $korea['city'] = 'gangnam';
        echo $korea['city'];
    ?>
    
</body>
</html>

array_push()

array_push(변수명, 배열에 들어갈 값, 배열에 들어갈 값,....)

array_push
VIEW
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
   <?php
    $fruit = array();
    
    array_push($fruit, 'apple','banana','grape','coconut', 'melon');
    
    echo $fruit[0]."<br>";
    echo $fruit[1]."<br>";
    echo $fruit[2]."<br>";
    echo $fruit[3]."<br>";
    echo $fruit[4]."<br>";
    ?>
    
</body>
</html>

2차 배열

$변수명[인텍스1][인텍스2] = 값;

2차 배열
VIEW
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
   <?php
        $earth = array();
    
        $earth['nation'][0] = 'korea';
        $earth['nation'][1] = 'america';
        $earth['nation'][2] = 'canada';
        $earth['nation'][3] = 'japen';
        $earth['nation'][4] = 'china';
        $earth['nation'][5] = 'france';
        
    //배열의 내용을 보여줍니다.
        var_dump($earth);
        
        echo "<br><br>";
        echo $earth['nation'][4];
    ?>
    
</body>
</html>

변수는 여러가지 값으로 변할 수 있는 수를 의미합니다.

산술연산자

연산자 예시 설명
+ $x + $y 더하기
- $x - $y 뻴셈
* $x * $y 곱하기
/ $x / $y 나누기
% $x % $y 나머지

증감연산자

연산자 설명 표현
++ ++ $x / $x ++ 선 증가 연산자 / 후 증가 연산자
-- -- $x / $x -- 선 감소 연산자 / 후 감소 연산자

비교연산자

연산자 예시 설명
== $x == $y 좌변과 우변이 값이 같을 경우 true
=== $x === $y 좌변과 우변이 값이 같거나 데이터형도 같을 경우 true
!= $x != $y 좌변과 우변의 값이 같지 않을 경우 true
!== $x !== $y 좌변과 우변의 값이 같지 않을 경우, 또는 데이터형이 다른 경우 true
> $x > $y 좌변이 우변보다 클 경우 ture
< $x < $y 좌변이 우변보다 작을 경우 true
>= $x >= $y 좌변이 우변보다 크거나 같을 경우 ture
<= $x <= $y 좌변이 우변보다 작거나 같을 경우 true

논리연산자

연산자 예시 설명
&& $X && $Y (AND)둘다 true인 경우 true
|| $X || $Y (OR)둘 중의 하나 이상이 true이면 true
! !$X (NOT)식이 false인 경우 true

변수에 사용되는 값이 숫자인지, 문자열인지, 논리값인지를 구분하는 것을 데이터 형이라고 합니다.

데이터형
int or interger 숫자 - 정수
double 숫자 - 소수
string 문자열
boolen 논리값(true, false)
Null 없는 값
array 배열
PHP 데이터형
VIEW
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>데이터 형</title>
</head>
<body>
   <?php
        $num = 12;
        echo "변수 \$num 데이터형(값: {$num})은 " . gettype($num). "입니다.<br>";
    
        $greeting = "안녕";
        echo "변수 \$greeting 데이터형(값: {$greeting})은 " . gettype($greeting). "입니다.<br>";
    
        $numStr = "121212";
        echo "변수 \$numStr 데이터형(값: {$numStr})은 " . gettype($numStr). "입니다.<br>";
        
        $fruit = array();
        echo "변수 \$fruit 데이터형(값: {$fruit})은 " . gettype($fruit). "입니다.<br>";
    
        $nu = null;
        echo "변수 \$nu 데이터형(값: {$nu})은 " . gettype($nu). "입니다.<br>";
    
        $bloolean = true;
        echo "변수 \$bloolean 데이터형(값: {$bloolean})은 " . gettype($bloolean). "입니다.<br>";
    ?>
    
</body>
</html>
PHP 데이터형 변경하기
VIEW
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>데이터형 변경하기</title>
</head>
<body>
   
   <?php
        $str = "문자열";
        echo "데이터형 변경 전의 데이터형 ".gettype($str)." 값은 : {$str} <br>";
    
        $str = (int) $str;
        echo "데이터형 변경 후의 데이터형 ".gettype($str)." 값은 : {$str} <br>";
        echo "<br><br>";
    
        $str2 = "555 문자열";
        echo "데이터형 변경 전의 데이터형 ".gettype($str2)." 값은 : {$str2} <br>";
    
        $str2 = (int) $str2;
        echo "데이터형 변경 후의 데이터형 ".gettype($str2)." 값은 : {$str2} <br>";
        echo "<br><br>";
    
        $str3 = "12.23454";
        echo "데이터형 변경 전의 데이터형 ".gettype($str3)." 값은 : {$str3} <br>";
        
        $str3 = (int) $str3;
        echo "데이터형 변경 전의 데이터형 ".gettype($str3)." 값은 : {$str3} <br>";
    
    
    ?>
    
</body>
</html>
if문 View
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>php 조건문</title>
</head>
<body>
   <?php
        //변수의 값이 짝수인지 홀수인지 판단하는 조건문을 완설하세요.
        $num = 100;
    
        if( $num % 2 == 0){
            echo  "짝수입니다.<br><br>";
        } else {
            echo  "홀수입니다.<br><br>";
        }
        
        $date = "문자";
    
        if( gettype($date) == 'string'){
            echo "데이터형은 문자열 입니다.";
        } else if ( gettype($date) == 'integer'){
            echo "데이터형은 정수형 입니다.";
        } else {
            echo "데이터형은 문쟈열도 정수형도 아닙니다.";
        }  
        
    ?>
    
</body>
</html>
for문 View
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
   <select name="birthMonth" id="birthMonth">
      
      
       <?php
       
       // 4월에 기본 선택되도록 변수 선언
       $selectMonth = 4;
       
        //$i = 1~12
       for($i=1; $i<=12; $i++){ 
           $selected = '';
                if( $i == $selectMonth){
                    $selected = "selected";
                }
            ?>
           <option value="<?=$i?>" <?=$selected?><?=$i?></option>
       <?php } ?>
             
   </select>
   <label for="birthMonth">월</label>
   
   
    
</body>
</html>

foreach문

foreach(대상변수 as 변수의 대체 이름){ //코드 입력 }

foreach문 View
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>조건문 (for each문)</title>
</head>
<body>
    <?php
        $member = array();
        
        //member 배열에 0 인덱스를 생성하고 0 인덱스도 배열로 선언
        $member[0] = array();
        
        $member[0]['name'] = '하지헌';
        $member[0]['useID'] = 'qwlgjs';
        $member[0]['email'] = 'qwlgjs@naver.com';
        
        $member[1] = array();
        
        $member[1]['name'] = '이정아';
        $member[1]['useID'] = 'jeongahstory';
        $member[1]['email'] = 'jeongahstory@naver.com';
    
        $member[2] = array();
        
        $member[2]['name'] = '강인영';
        $member[2]['useID'] = 'industry';
        $member[2]['email'] = 'industry@naver.com';
    
//        for($i=0; $i<count($member); $i++){
//            echo $member[$i]['name']."<br>";
//        }
    
        foreach($member as $data){
            echo $data['name']."<br>";
        }
        
        
    ?>
</body>
</html>

function 함수명(){
    //실행 함수
}
함수명(); //함수 호출

function 함수명(파라미터){
    //실행 함수
}
함수명(아규먼트); //함수 호출

시간 함수는 리눅스 시간을 출력해주는 함수입니다. 여기서 리눅스 시간이란? 1970년 1월 1일 00시 00분 00초부터 세기 시작하는 시간입니다. 시간 함수는 1970년 1월 1일 00시 00분 00초부터 몇 초가 지났는지를 반환합니다. 이 리눅스 시간을 "타임스탬프"라고 합니다.

종류 설명
checkdate 주어진 날짜가 실제 존재하는 날짜인지 판단합니다.
date 날짜와 시간을 지정한 형식에 맞추어 반환합니다.
getdate 날짜와 시간을 배열로 반환합니다.
microtime 유닉스 형식의 시간으로 반환합니다.
mktime 주어진 시간을 유닉스 형식의 시간으로 반환합니다.
time 현재의 시간을 유닉스 형식의 시간으로 반환합니다.
인자 자료형 설명
format string 시간과 날짜의 반환 형식을 지정합니다.
timestamp int 특정 시간을 지정합니다.
date 함수에서 사용되는 형식 문자
분류 문자 설명
d 일자를 두 자리로 반환합니다. 01~31
D 요일을 3글자로 반환합니다. Mon~Sun
j 일자를 0이 붙지 않는 형식으로 반환합니다. 1~31
I 요일을 영문 단어로 반환합니다. Sunday~Saturday
S 영문 서수 접미사를 반환합니다. st, nd, rd, th
w 요일을 순자로 반환합니다. 0(일)~6(토)
Z 해당 연도의 몇 번째 날인지 반환합니다. 0~364
W 해당 연도의 몇 번째 주인지 반환합니다. 12(연도의 12번째 주)
F 월을 영문 단어로 반환합니다. January~December
m 월을 두자리 숫자로 반환합니다. 01~12
M 월을 영문 3글자로 반환합니다. Jan~Dec
n 월을 0이 붙지 않는 숫자로 반환합니다. 1~12
t 해당 월의 날짜 수를 반환합니다. 28~31
년도 L 윤년인지 여부를 반환합니다. 윤년이면1, 아니면0
Y 연도를 4자리 수로 반환합니다. 2018
y 연도를 2자리 수로 반환합니다. 18
년도 a 오전과 오후를 영문 소문자로 반환합니다. am, pm
A 오전과 오후를 영문 대문자로 반환합니다. AM, PM
g 시간을 12시간 형식으로 반환하며, 0이 붙지 않습니다. 1~12
G 시간을 24시간 형식으로 반환하며, 0이 붙지 않습니다. 0~24
h 시간을 12시간 두 자리 형식으로 반환합니다. 01~12
H 시간을 24시간 두 자리 형식으로 반환합니다. 00~23
i 분을 두자리 형식으로 반환합니다. 00~59
s 초를 두자리 형식으로 반환합니다. 00~59
날짜/시간 c ISO 8601 형식의 날짜로 반환합니다. 2017-01-01T12:00:00+09:00
r RFC 2822 형식의 날짜로 반환합니다. Sun, 09, Jan 2019 12:00:00+09:00
U 유닉스 형식 시간을 반환합니다. 1136041200

time()

time()View
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
   <?php
        ini_set('date.timezone','Asia/Seoul');
        echo '1970년 1월 1일 0시 0분 0초로부터 '.time().' 초가 지났습니다.';
        echo '<br>';
        echo "현재 시간은 " .date("Y년 m월 d일 H시 i분 s초", time());
    ?>
    
</body>
</html>

mktime()

mktime(시, 분, 초, 월, 일, 년);

mktime()View
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>mktime()</title>
</head>
<body>
    <?php
    
        ini_set('date.timezone','Asia/Seoul');
//        echo "2019년 4월 4일 10시 25분 10초의 타임스탬프는? <br>";
//        echo mktime(20, 25, 10, 4, 4, 2019);
    
        //시작 시간 설정
        $startTime = mktime(10, 25, 10, 4, 4, 2019);
    
        //종료 시간 설정
        $endTime = mktime(10, 35, 10, 4, 4, 2019);
    
        if( $startTime <= time() && $endTime > time() ){
            echo "이벤트를 참여하세요";
        } else {
            echo "이벤트가 시작 전이거나 종료되었습니다.";
        }
    ?>
</body>
</html>
함수 기능
basename 경로에서 파일 이름만을 반환합니다.
chmod 파일의 모드를 변겨합니다.
copy 파일을 복사합니다.
dirnmae 경로에서 디렉토리 이름만 반환합니다.
dirnmae 경로에서 디렉토리 이름만 반환합니다.
fclose 열려 있는 파일 포인터를 종료합니다.
feof 파일 포인터가 파일의 끝에 있는지 검사합니다.
fgetc 파일로부터 하나의 문자를 가져옵니다.
fgets 파일로부터 한줄의 문자를 가져옵니다.
file_exists 파일이 존재하는지 여부를 확인합니다.
file 파일 전체를 배열로 읽어들입니다.
filesize 파일의 크기를 반환합니다.
filetype 파일의 형식을 반환합니다.
fopen 파일의 URL을 엽니다.
fpassthru 파일 포인터로부터 파일의 끝까지의 모든 데이터를 출력합니다.
fputs, fwrite 파일 포인터에 지정한 크기의 문자열을 씁니다.
함수 기능
crypt 단방향으로 문자열을 암호합니다.
echo 문자열을 출력합니다.
explode 문자열을 특정 문자열을 기준으로 분리합니다.
htmlentities 해당하는 모든 문자를 HTML 엔티티로 변환합니다.
implode/join 배열의 원소를 문자열로 연결합니다.
ltrim 문자열 왼쪽의 공백을 제거합니다.
md5 문자열의 MD5 해시값을 반환합니다.
nl2br 문자열의 모든 줄 바꿈 앞에 <br/>태그를 삽입합니다.
print 문자열을 출력합니다.
printf 형식화된 문자열을 출력합니다.
rtrim/chop 문자열 오른쪽의 공백을 제거합니다.
sprintf 형식화된 문자열로 반환합니다.
sscanf 문자열을 형식에 따라 처리합니다.
str_replace 문자열을 찾아서 치환합니다.
strip_tags 문자열에서 HTML과 PHP 태그를 제거합니다.
strlen 문자열의 길이를 반환합니다.
strpos 문자열이 처음 나타나는 위치를 반환합니다.
strstr/strchr 문자열이 처음으로 나타나는 위치를 반환합니다.
substr 문자열의 일부를 반환합니다.
trim 문자열의 처음과 끝에 있는 공백을 제거합니다.
trim()View
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
   
   <?php
        $str = " 안녕하세요. ";
    
        //trim 사용하지 않고 출력
    echo "trim 사용하지 않고 출력<br>";
    echo "|".$str."|";
    
    echo "<br><br>";
    
    //trim 사용
    echo "trim 사용 <br>";
    echo "|".trim($str)."|";
    
    ?>
    
</body>
</html>
strtolower() strtoupper()View
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>strtolower() strtoupper()</title>
</head>
<body>
   <?php
        $str = "Hello World";
    
        echo "원문<br>";
        echo $str;
        echo "<br><br>";
        echo "대문자로 출력<br>";
        echo strtoupper($str);
        echo "<br><br>";
        echo "소문자로 출력<br>";
        echo strtolower($str);
    ?>
    
</body>
</html>
strlen()View
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>strlen() 문자열 길이</title>
</head>
<body>
    <?php
        $str = "php수업입니다. php를 배우고 있습니다.";
            
        echo $str."의 문자열 길이는 ".strlen($str)."입니다.";
    ?>
</body>
</html>
set_replace()

set_replace('치환할 문자', '대처할 문자', '대상 문자열');

set_replace()View
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>set_replace()</title>
</head>
<body>
   <?php
        $str = "hello world";
        $changeStr = str_replace("world", "php", $str);
        
        echo $changeStr;
    ?>
    
</body>
</html>
substr()

substr('대상 문자열', '자르길 시작할 위치', '자를 문자열 수');

substr()View
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>substr()</title>
</head>
<body>
   
   <?php
        $fileName = "img.jpg";
    
        $execute = substr($fileName, -4, 4);
        
        if($execute == '.jpg' || $execute == '.png' || $execute == '.gif') {
            echo "업로드한 파일은 이미지 파일입니다.";
            
        } else {
            echo "업로한 파일은 이미지 파일이 아닙니다.";
        }
    ?>
    
</body>
</html>
explode()

explode('나눔 문자', '대상 문자열');

explode()View
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>explode()</title>
</head>
<body>
   <?php
        $email = "jeongah@naver.com";
        $emailArray = explode("@",$email);
    
        echo "<pre>";
        var_dump($emailArray);
        
        echo "이메일의 호스트 출력<br>";
        echo $emailArray[1];
    ?>
    
</body>
</html>
함수 기능
mail 메일을 보냅니다.
abs 절대값을 나타냅니다.
ceil 소수점 이하를 올림합니다.
floor 소수점 이하를 내림합니다.
pow 수를 거듭제곱합니다.
rand 정수형 난수를 생성합니다.
mt_rand 향상된 정수형 난수를 생성합니다.
round 실수를 반올림합니다.
base64_encode MIME 규약에 따라 데이터를 base64로 인코딩합니다.
base64_decode MIME 규약에 따라 인코딩된 데이터를 디코딩합니다.
urlencode 문자열을 URL 인코딩합니다.
urldecode 문자열을 URL 디코딩합니다.
empty 변수가 비어 있는지 확인합니다.
isset 변수가 설정되 있는지 확인합니다.
unset 주어진 변수를 제거합니다.
is_array 주어진 변수가 배열인지 확인합니다.

post는 HTTP 프로토콜 통신 시에 전될되는 방식이고, get은 데이터를 URL에 붙여 전달하는 방식입니다.

Get의 데이터 전달 방식

https://jeongahstory.co.kr?type=first&mobile=ok

get View
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>get</title>
</head>
<body>
   <?php
        //http://jeongah2651.dothome.co.kr/php/php19.php?type=first&mobile=ok
        echo "GET['type']는 " .$_GET['type']."<br>";
        echo "GET['mobile']는 " .$_GET['mobile']."<br>";
    ?>
    
</body>
</html>
post View
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>post</title>
</head>
<body>
   <h1>로그인</h1>
   <form action="php20_post.php" method="post">
       <label for="email">Email</label>
       <input type="email" name="email" id="email" placeholder="이메일 주소 입력">
       
       <label for="password">password</label>
       <input type="password" name="password" id="password" placeholder="비밀번호 입력">
       
       <input type="submit" value="전달">
   </form>
    
</body>
</html>
post View

class 클래스 명 {
    기능 구현
}

class View
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>class</title>
</head>
<body>
   <?php
        class people {
            
            //생성자
            function __construct(){
                echo "사람들은 돈을 좋아합니다.<br>";
            }
            //말하기
            function speak($word){
                echo $word." 라고 말했다.<br>";
            }
            
            //달리기
            function run($km){
                echo $km."을 달린다.<br>";
            }
            
            //걷기
            function walk($km){
                echo $km."을 걷다.<br>";
            }    
            
            //소멸자
            function __destruct(){
                echo "힘들다.<br>";
            }
        
        }
    
        //인스턴스 생성
        $people = new people;
    
        //메소드 사용
        $people ->speak('나는 인간이다');
        $people ->walk('산');
        $people ->run('바다');
    ?>
    
</body>
</html>

MYSQL 접속하기 View
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
   
   <?php
    $host = "localhost";
    $user = "jeongah2651";
    $pw = "foever0!";
    $dbNamme = "jeongah2651";
    $dbConnect = new mysqli($host, $user, $pw, $dbNamme );
    $dbConnect->set_charset("utf8");

    if(mysqli_connect_errno()){
        echo "데이터베이스 접속 실패";
        echo mysqli_connect_errno();
    } else {
//        echo "데이터베이스 접속 성공";
    }
    ?>
    
</body>
</html>
데이터 입력하기 1View
<?php

    //mysql 접속 소스를 include
    include_once "../connectDB.php";
    
    //데이터 입력
//    아이디 : webstoryboy
//    이름 : 웹스
//    패스워드 : forever
//    휴대전화 번호 : 010-7112-2049
//    이메일 : webstoryboy@naver.com
//    생일 : 1972-04-03
//    성별 : 남성
    $useID = "webstoryboy";
    $uname = "웹스";
    $upassword = "forever";
    $phone = "010-7112-2049";
    $email = "webstoryboy@naver.com";
    $birthDay = "1972-04-03";
    $gender = "m";

    //쿼리문 작성
    $sql = "INSERT INTO myMember(useID, uname, upassword, phone, email, birthDay, gender, regTime) VALUES";
    $sql .= "('{$useID}','{$uname}','{$upassword}','{$phone}','{$email}','{$birthDay}','{$gender}',now())";

    //쿼리문 전송 및 전송값을 result 변수에 대입
    $result = $dbConnect->query($sql);
    
    if($result){
        echo "yes";
    } else {
        echo "no";
    }

    
?>
데이터 입력하기 2 - formView
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
   <h1>회원가입</h1>
    <form action="php23_insert.php" method="post" name="signUp">
        <label for="useName">이름</label>
        <input type="input" id="useName" name="useName" placeholder="이름"><br>
        
        <label for="useID">ID</label>
        <input type="input" id="useID" name="useID" placeholder="ID"><br>
        
        <label for="usePW">비밀번호</label>
        <input type="input" id="usePW" name="usePW" placeholder="비밀번호"><br>
        
        <label for="useGender">성별</label>
        <select id="useGender" name="useGender">
            <option value="m">남성</option>
            <option value="w">여성</option>
        </select><br>
        
        <label for="useEmail">이메일</label>
        <input type="email" id="useEmail" name="useEmail" placeholder="이메일 입력">
        <br>
        <input type="submit" value="가입하기">
    </form>
</body>
</html>
데이터 불러오기View
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <?php
    
    //mysql 접속 소스를 include
    include_once "../connectDB.php";
    
    $myMemberID = 1;
    $sql = "SELECT * FROM myMember WHERE myMemberID = {$myMemberID}";
    
    //쿼리문 전송 및 전송값을 result 변수에 대입
    $result = $dbConnect->query($sql);
    
    //가져온 결과를 어떻게 분류할 것인지를 설정
    $memberInfor = $result->fetch_array(MYSQLI_ASSOC);
    echo "<pre>";
    var_dump($memberInfor);
    
    echo "회원번호가 {$myMemberID}번인 회원의 이름은 " .$memberInfor['uname'];
    
    ?>
</body>
</html>
전체 데이터 불러오기View
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
  
  <?php
   
   //mysql 접속 소스를 include
    include_once "../connectDB.php";
    
    $sql = "SELECT uname, useID FROM myMember";
    
    //쿼리문 전송 및 전송값을 result 변수에 대입
    $result = $dbConnect->query($sql);
    
    //레코드 수를 가져오는 명령어
    $numResult = $result->num_rows;
    
    if($numResult != 0){
        for($i=0; $i<$numResult; $i++){
             $memberInfo = $result->fetch_array(MYSQLI_ASSOC);
            echo "회원이름 : ".$memberInfo['uname']." 회원 ID : ".$memberInfo['useID']."<br>";
        }
    } else {
        echo "회원이 없습니다.";
    }
    
    ?>
    
</body>
</html>
데이터 순서대로 불러오기View
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>데이터 이름순서대로 불러오기</title>
</head>
<body>
  
  <?php
   
   //mysql 접속 소스를 include
    include_once "../connectDB.php";
    
    $sql = "SELECT uname, useID FROM myMember ORDER BY uname ASC;";
    $result = $dbConnect->query($sql);
    
    $numResult = $result->num_rows;
    
    if($numResult != 0){
        for($i=0; $i<$numResult; $i++){
             $memberInfo = $result->fetch_array(MYSQLI_ASSOC);
            echo "회원이름 : ".$memberInfo['uname']." 회원 ID : ".$memberInfo['useID']."<br>";
        }
    } else {
        echo "회원이 없습니다.";
    }
   
    
    ?>
    
</body>
</html>
500명 회원 가입 하기View
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>회원 가입 시키기</title>
</head>
<body>
  
  <?php
   
   //mysql 접속 소스를 include
    include_once "../connectDB.php";
    //성 배열
    $familyName = array();
    $familyName = ['김','이','박','전','황','강','손','하','최','조','노','주','윤','임'];
    //이름 배열
    $lastName = array();
    $lastName = ['상연','상현','상순','순삼','상돌','상미','상수','상금','상심','상소','상상','상민','상장','상자','상술','상속'];
    
    //성별 배열
    $usegender = array();
    $usegender = ['m','w'];
    
    //테이블에 회원 정보 입력 성공 카운트
    $successCount = 0;
    $failCount = 0;
    
    //insert문을 사용하여 500회 작동 시키기
    for($i=1; $i<=500; $i++){
        //랜덤으로 받아오기
        $numRandomFN = rand(0,count($familyName) - 1);
        $numRandomLN = rand(0,count($lastName) - 1);
        $gender = $usegender[rand(0,1)];
        $upassword = sha1("web".rand(1,1000));
        $uname = $familyName[$numRandomFN].$lastName[$numRandomLN];
        $useID = "jastory".rand(1,9999999);
        $email = "je".rand(1,9999)."@naver.com";
    
        //쿼리문 작성
        $sql = "INSERT INTO myMember(useID, uname, upassword,  email, gender, regTime) VALUES";
        $sql .= "('{$useID}','{$uname}','{$upassword}','{$email}','{$gender}',now())";
        
        //쿼리문 전송 및 전송값을 result 변수에 대입
        $result = $dbConnect->query($sql);

        if($result){
           $successCount ++;
        } else {
           $failCount++;
        }
    }
    
    echo "입력 성공 수 : {$successCount}";
    echo "<br>";
    echo "입력 실패 수 : {$failCount}";
    

    ?>
</body>
전체데이터 50개씩 불러오기View
<?php
    include_once "../connectDB.php";
    
    //페이지값을 수함
    if(isset($_GET['page'])){
        $page = (int) $_GET['page'];
    } else {
        $page = 1;
    }
    
    //페이지에 출력할 레코드 수
    $numView = 50;
    
    //변수 page 값에 따른 LIMIT의 첫 번째 값 계산
    $firstLimitValue = ($numView * $page) - $numView;
    
    $sql = "SELECT * FROM myMember LIMIT {$firstLimitValue}, {$numView}";
    $result = $dbConnect->query($sql);
?>


<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>불러오기</title>
    <style>
      table {width: 100%; border-collapse: collapse; border-spacing: 0;}
      table th {border: 1px solid #999; background: #f1f1f1; padding: 10px;}
      table td {border: 1px solid #999; padding: 5px;}
   </style>
</head>
<body>
    <h1>고객리스트</h1>
    <table>
      <tr>
         <th>번호</th>
         <th>ID</th>
         <th>이름</th>
         <th>이메일</th>
         <th>성별</th>
         <th>가입일</th>
      </tr>
      
<?php
    for($i=0; $i < $result->num_rows; $i++){
        $member = $result->fetch_array(MYSQLI_ASSOC);
         
?>
      <tr>
         <td><?=$member['myMemberID']?></td>
         <td><?=$member['useID']?></td>
         <td><?=$member['uname']?></td>
         <td><?=$member['email']?></td>
         <td><?=(($member['gender'] == 'w') ? '여성':'남성') ?></td>
         <td><?=$member['regTime']?></td>
      </tr>
<?php
        } 
?>
   </table>
</body>
</html>
페이지 버튼생성View
<?php

 include_once "../connectDB.php";
    
    $sql = "SELECT * FROM myMember ";
    $res= $dbConnect->query($sql);

    $numView = 50;
    $totalRecord = $res->num_rows;

    $numPage= ceil($totalRecord / $numView);

    for($i=1; $i<$numPage; $i++){?>
    <a href="http://jeongah2651.dothome.co.kr/php/php28.php?page=<?=$i?>">
        <?=$i?>
    </a>
    <?php } ?>
데이터 수정하기View
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>데이터 수정하기(이름 변경)</title>
</head>
<body>
    <form action="php30_update.php" method="post" name="update">
        <label for="memberID">회원번호</label>
        <input type="number" name="memberID" id="memberID">
        
        <label for="changeName">변경할 이름</label>
        <input type="text" name="changeName" id="changeName">
        
        <input type="submit" value="변경하기">
    </form>
</body>
</html>
데이터 삭제하기View
<?php

include_once "../connectDB.php";

$sql = "DELETE FROM myMember WHERE myMemberID = 14";
$res = $dbConnect->query($sql);


if($res){
    echo "14번 회원의 정보가 삭제되었습니다.";
} else {
    echo "삭제 실패 ";
}

?>
서로 다른 테이블의 데이터불러와서 조인하기View
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
   <?php
    include_once "../connectDB.php";
    
    
    $sql = "SELECT m.uname, m.gender, s.class, s.english, s.math, s.science, s.japanese, s.coding ";
    $sql .= "FROM myMember m JOIN schoolRecord s ON(m.myMemberID = s.studentID) ";
    $sql .= "WHERE m.myMemberID = 3";
    $res = $dbConnect->query($sql);
    
    if($res){
        $data = $res->fetch_array(MYSQLI_ASSOC);
        echo "회원번호 3번의 이름은 {$data['uname']} 이며 <br> ";
        $gender = "여성";
        if($date['gender'] == 'm'){
            $gender = '남자';
        }
        
        echo "성별은 {$gender}이며 <br>";
        echo "{$data['class']}반 소속이며 <br>";
        echo "영어 점수는 {$data['english']} <br>";
        echo "수학 점수는 {$data['math']} <br>";
        echo "과학 점수는 {$data['science']} <br>";
        echo "일본어 점수는 {$data['japanese']} <br>";
        echo "코딩 점수는 {$data['coding']} <br>";
    } else {
        echo "정보를 불러오는데 실패했습니다.";
    }
    
    ?>
    
</body>
</html>

데이터를 입력햇을 때 이 값이 한글로만 구성되어 있는지 영어로만 구성되어 있는지 또는 어떤 패턴으로 입력이 되었는지를 체크하는 방법을 정규표현식이라고 합니다.

preg_match()

preg_match(패턴, 검사할 텍스트, 반환할 패턴 일치 결과를 받을 변수)
$pattern = '/패턴 입력할 곳';

패턴 작성 방법

  • 시작이 어떠한 문자로 시작해야 한다는 것을 나타낼 때는 '^'
  • 어떠한 문자로 끝나야 한다는 것을 나타낼 때는 '$'
  • 문자의 간격을 지정하고자 할 때는 '[]'
  • 시작할 문자와 끝날 문자의 간격의 사이에는 '-'을 사용합니다.
  • '[]'사이에 들어갈 값으로는 한글, 영어소문자, 영어대문자를 넣어 확인할 수 있습니다.
  • OR 조건을 의미하는 기호는 '|'입니다.

한글의 간격
가-힣 정규 표현식 [가-힣]

영어 소문자
a-z 정규 표현식 [a-z]

영어 대문자
A-Z 정규 표현식 [A-Z]

한글, 영어소문자, 영어 대문자 모두를 간격으로 지정하려면
가-힣a-zA-Z 정규 표현힉 [가-힣a-zA-Z]

처음부터 끝까지 한글로만 이루어진 값을 찾는다고 가정하면

^[가-힣]$

이름 정규식 표현

1회만 검사할 경우
^[가-힣]$ 또는 ^[가-힣]${1}$

1회이상 검사할 경우
^[가-힣]+$ 또는 ^[가-힣]${1,}$

3회에서 5회까지 검사할 경우
^[가-힣]${3,5}+$

정규식 표현View
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
   <?php
    
    $pattern = '/^[가-힣]+$/';
    $myName = '하지헌';
    
    if(preg_match($pattern, $myName, $matches)){
        echo "값 {$myName}은 정규식 표현에 적합합니다.";
        echo "<br>";
        var_dump($matches);
        
    } else {
        echo "이름에 특수문자, 영문, 숫자를 사용할 수 없습니다.";
    }
    

    ?>
    
</body>
</html>

아이디 정규식 표현

$pattern '/^(a-zA-Z0-9_)+$/';

  • 영어 소문자, 영어 대문자, 숫자, 특수 문자(_)로 시작하거나 끝나는 패턴입니다.
  • +가 있으므로 1회 이상 패턴을 검사합니다.

$pattern = '/^[^_]/';

  • ^가 '[]'의 밖에서 사용되면 처음에 오는 글자를 의미합니다.
  • ^가 '[]'의 안에서 사용되면 어떤 문자가 와서는 안된다는 것을 의미합니다.

$pattern = '/^[^_][a-zA-Z0-9]+$/';

  • 처음에 오는 글자가 _이 아니면서 그 다음 글자가 영문 대소문자, 숫자, 그리고 _을 1회 이상 검사 하면서 마지막으로 와야 하는 글자를 표현한 패턴식입니다.
정규식 아이디 표현View
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
   <?php
    
        $pattern = '/^[a-zA-Z0-9_]+$/';
    
        $myID = "jeongah_9";
        
        if(preg_match($pattern, $myID, $matches)){
            echo "값 {$myID}은 정규식 표현에 적합한 값입니다.";
            echo "<pre>";
            var_dump($matches);
        } else {
            echo "사용할 수 없는 아이디입니다.";
        }

    ?>
    
</body>
</html>

휴대폰 번호 검사

휴대폰 번호가 010-으로 시작하는 규칙을 체크하는 패턴

$pattern '/^(010|011|016|017|018|019)-/';

  • ^는 처음 오는 패턴을 의미합니다.
  • (010|011|016|017|018|019)는 010~019인 패턴을 의미합니다.
  • -은 휴대폰 번호가 010-에서 -을 의미합니다.

휴대폰 번호의 가운데에 위치하는 숫자가 3자리 또는 4자리인 숫자를 체크하는 패턴

$pattern '/^(010|011|016|017|018|019)-[0-9]{3,4}-/';

  • 패턴식 [0-9]{3,4}-는 0에서부터 9까지의 숫자를 3회에서 4회 검사한다는 의미입니다.

마지막 패턴

$pattern '/^(010|011|016|017|018|019)-[0-9]{3,4}-[0-9]{4}$/';

  • 패턴식 {0-9}{4}$ 0에서부터 9까지의 숫자가 있는지 4회 검사한다는 의미입니다.
정규식 번호 표현View
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
   <?php
    
        $pattern =  '/^(010|011|016|017|018|019)-[0-9]{3,4}-[0-9]{4}/';
    
        $myPhone = "010-2651-5129";
        
        if(preg_match($pattern, $myPhone, $matches)){
            echo "휴대폰 번호로 입력한 값 {$myPhone}은 사용할 수 있습니다.";
            echo "<pre>";
            var_dump($matches);
        } else {
            echo "사용할 수 없는 번호입니다.";
        }

    ?>
    
</body>
</html>

이메일 검사

$pattern = '/^[a-zA-Z0-9_\-\.]+/';

\-처럼 앞에 역슬래시를 사용하는 이유는 -가ㅏ 정규표현식에서 간격을 조정하는 기능을 담고 있습니다. 이것을 기능으로 사용하는 것이 아니라 문자로 사용하기 위해서는 \를 앞에 붙입니다. \를 앞에 붙이면 문자로 사용하겠다는 것을 의미합니다.

\..도 맡고 잇는 기능이 있기 때문에 앞에 역슬래시를 붙여 사용합니다. .는 모든 문자를 의미합니다.

$pattern = '/^[a-zA-Z0-9_\-\.]+@/';

@를 기준으로 앞에는 아이디 정규식 뒤에는 호스트 정규식을 작성합니다.

$pattern = '/^[a-zA-Z0-9_\-\.]+@[a-zA-Z0-9\-]+\.[\.a-zA-Z]+$/';

정규식 이메일 표현View
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
   <?php
    
        $pattern = '/^[a-zA-Z0-9_\-\.]+@[a-zA-Z0-9\-\.]+$/';
    
        $myEmail = "jeongah2651@gmail.com";
        
        if(preg_match($pattern, $myEmail, $matches)){
            echo "입력한 이메일 주소 {$myEmail}는 사용가능한 이메일 주소 입니다.";
            echo "<pre>";
            var_dump($matches);
        } else {
            echo "사용 불가한 이메일 주소입니다.";
        }

    ?>
    
</body>
</html>
파일 업로드
VIEW
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
  <h1>파일 업로드</h1>
  <form action="php37_file.php" name="fileUpload" method="post" enctype="multipart/form-data">
      <input type="file" name="myImage">
      <input type="submit" value="파일 등록">
  </form>
 
    
</body>
</html>

is_dir(), opendir(), closedir()

$dirCheck = is_dir("./images/");
해당 위치에 images 폴더가 있다면 true를 반환
해당 위치에 images 폴더가 없다면 false를 반환

$opendir = opendir("./images/");
해당 위치에서 images폴더를 여는데 성공했다면 true를 반환
해당 위치에서 images폴더를 여는데 실패했다면 false를 반환

//폴더 안에 파일을 읽을 때 사용합니다.
$readFile = readdir($opendir) 또는 readdir(opendir("./images"));

//열었던 디렉터리를 닫을 때 사용합니다.
close($opendir);

디렉터리 함수
VIEW

이미지 업로드
VIEW
<!DOCTYPE html>
<html lang="ko">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>

<body>
    <?php 
    //임시 저장된 정보
    $myTempFile = $_FILES['myImage']['tmp_name'];

    //파일 타입 및 확장자 구하기
    $fileTypeExtension = explode("/", $_FILES['myImage']['type']);

    //파일 유형
    $fileType = $fileTypeExtension[0];

    //파일 확장자 
    $extension = $fileTypeExtension[1];

    //1. 이미지 파일 확인 -> 이미지 확장자 확인 -> 이미지 파일명 생성 -> 경로를 통한 이미지 저장
    //2. 폴더 여부 확인 -> 폴더 열기 -> 파일 읽기 -> 파일 위치 이동 -> 파일 업로드 확인

    //이미지 파일이 맞는지 확인
    if($fileType == 'image'){
        //이미지 확장자 파일이 맞는지 확인
        if($extension == "jpeg" || $extension == "bmp" || $extension == "gif" || $extension == "png" || $extension == "jpg"){
            
            //저장할 파일명 설정
            $makingFileName = "myImage".time().rand(1,99999)."."."{$extension}";
            
            //이미지 경로 설정
            $myFile = "./images/{$makingFileName}";
            
            $dir = "./images/";
            
            //폴더 존재 여부 확인
            if(is_dir($dir)){
                
                //폴더 열기 
                $opendir = opendir($dir);
                if($opendir == true){
                    $checkFile = true;
                    
                    //파일 열기
                    while(($readFile = readdir($opendir)) != false){
                        //해당 파일이 있다면 변수 $checkFile에 false를 대입
                        if($makingFileName == $readFile){
                            $checkFile = true;
                            echo "해당 파일명은 이미 사용되고 있습니다.";
                            break;
                        }
                    }
                    if($checkFile == true){
                        //임시 저장된 파일을 우리가 저장할 위치 및 파일명으로 옮김
                        $imageUpload = move_uploaded_file($myTempFile, $myFile);
                        
                        //업로드 성공 여부 확인
                        if($imageUpload == true){
                            echo "중복된 파일명이 없어 정상적으로 업로드 되었습니다.";
                            echo "<img src='{$myFile}' width='200'/>";
                        } else {
                            echo "파일 업로드에 실패하였습니다.";
                        }
                    }
                } else {
                    
                    //폴더를 열지 못했을때
                    echo "해당 폴더를 열지 못했습니다.";
                }
                
            }
            
        } else {
            //확장자가 맞지 않는 경우 
            echo "이미지 확장자 파일이 아닙니다";
            exit;
        }
    } else {
        //유형이 이미지가 아닌경우
        echo "이미지 파일이 아닙니다.";
        exit;
    }
        
?>

</body>

</html>

파일 함수를 사요하면 파일을 생성한 후 텍스트 파일에 내용을 입력할 수 있으며 파일 내용을 읽어들일 수 있스니다.

fopen()

fopen("파일 경로 및 파일명", 파일을 여는 옵션);

fwrite()()

$fp = fopen("파일 경로 및 파일명");
$fw = fwrites($fp, "파일 쓸 내용");

fclose()

fclose("열린 파일");

옵션 설명
f 파일을 읽기 전용으로 열기( 이 옵션으로 파일을 열면 쓰기 불가)
w 파일을 쓰기 전용으로 열기(기본 파일이 있을 경우 내용이 삭제되고 처음부터 다시 씀)
a 파일을 쓰기 전용으로 열기(기본 파일이 있을 경우 내용 뒤에 덧붙임)
r+ 파일을 읽고 쓸 수 있게 열기(기본에 파일이 있을 경우, 내용이 삭제되고 처음부터 다시 씀)
a+ 파일을 읽고 쓸 수 있게 열기( 기본 파일이 있을 경우, 내용 뒤에 덧붙임)
파일 쓰기
VIEW
<?php
    //파일에 쓸 내용
    $content = "Hello PHP";
    //저장할 파일명
    $fileName = "HelloWorld.txt";

    //파일 열기
    $fp = fopen('./myFiles/'.$fileName,'w');

    //파일 쓰기
    $fw = fwrite($fp, $content);

    //파일 쓰기 성공 여부
    if($fw == false){
        echo "파일 쓰기가 실패했습니다. Yes";
    } else {
        echo "파일 쓰기 완료 No";
    }

    //파일 닫기
    fclose($fp);
?>

flead()

$fq = fopen("파일 경로 및 파일명", 'r+'); $fr = fread($fq, "불러올 용량");

filesize()

filesize("파일 경로 및 파일명");

file_exists()

file_exists("파일 경로 및 파일명");

파일 쓰기
VIEW
<?php
    $filePathName = "./myFiles/HelloWorld.txt";

    //1. 파일 존재 여부 확인
    if(file_exists($filePathName)){
        //2. 파일 열기
        $fp = fopen($filePathName, 'r');
        if($fp){
            //3. 파일 읽기
            $fr = fread($fp, filesize($filePathName));
            if($fr){
                //4.내용 출력
                echo $fr;
                fclose($fp);
            } else {
                echo "파일 읽기에 실패했습니다.";
            }
        } else {
            echo "파일 열기에 실패했습니다.";
        }
    } else {
        echo "파일이 존지하지 않습니다.";
    }
?>
파일 쓰고 읽기
VIEW
<?php
$filePathName = "./myFiles/largeRow.php";
    $content = $_POST['myInputText'];

    $fp = fopen($filePathName, 'w');
    if($fp){
        $fw = fwrite($fp, $content);
        if($fw){
            echo "파일 쓰기 완료 yes";
        }
    }
?>

fgets()

$fp = fopen("파일 경로 및 파일명", "r+");
$fr = fgets($fp, "불러올 용량");

fgets() 한줄씩 불러오기
VIEW
<?php
$filePathName = "./myFiles/largeRow.php";
    if(file_exists($filePathName)){
        $fq = fopen($filePathName, 'r');
        $readByte = 512;
        if($fq){
            while(($fr = fgets($fq, $readByte)) != false ){
                echo $fr."
"; } } } ?>

<a href="주소" ping="통계자료를 수직할 주소"> 이름 </a>

ping
VIEW
<?php
include_once "../connectDB.php";
//
//     //테이블 생성 위한 쿼리문
//  $sql = "CREATE TABLE linkClickCount(";
//  $sql .= "linkClickCountID INT UNSIGNED NOT NULL AUTO_INCREMENT,";
//  $sql .= "linkNum INT UNSIGNED NOT NULL COMMENT '링크 고유 번호',";
//  $sql .= "regTime DATETIME NOT NULL COMMENT '클릭한 시간',";
//  $sql .= "PRIMARY KEY (linkClickCountID))";
//  $sql .= "CHARSET=utf8 comment='링크 클릭 수 집계'";
//
//  $res = $dbConnect->query($sql);
//  if($res){
//    echo "테이블 생성 완료";
//  }else{
//    echo "테이블 생성 실패";
//  }
    

    $linkNum = (int) $_GET['linkNum'];

    if($linkNum == 0){
        exit;
    } 
    
    $sql = "INSERT INTO linkClickCount(linkNum, regTime)";
    $sql .= "VALUES({$linkNum},NOW())";
    $dbConnect->query($sql);
?>

Ajax(Asynchronous JavaScript and XML, 에이잭스)는 비동기적인 웹 애플리케이션의 제작을 위해 사용하는 웹 개발 기법이다.

AJAX - 아이디 중복 확인
VIEW
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>화면 전환없이 아이디 중복 체크</title>
	<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
	<script>
		$(document).ready(function(){
			$("#idCheckBtn").click(function(){
				//AJAX 통신 시작
				$.ajax({
					type: 'post',						//post 방식으로 전달
					dataType: 'json',					//json 언어로 전달
					url: './php44_idCheck.php',
					data: {userId: $('#userId').val()},	//전달할 데이터
					async: false,						//값을 전달 받은 후 실행

					success: function(data){
						var word = "이미지 존재하는 아이디입니다.";
						if(data.result == 'good'){
							word = "아이디를 사용해도 좋습니다.";
						}
						$("#idCheckComment").text(word);
					},
					error : function(request, status, error){
						console.log('request'+request);
						console.log('status'+status);
						console.log('error'+error);
					}
				});
			});
		});
	</script>
</head>
<body>
	<input type="text" name="userId" id="userId" placeholder="아이디 입력">
	<input type="button" id="idCheckBtn" value="중복 확인">
	<div id="idCheckComment"></div>
</body>
</html>
<?php
	//echo json_encode(array('result'=>'good'));

	include_once "../connectDB.php";

	//중복 확인 요청 받은 아이디
	$userId = $dbConnect->real_escape_string(trim($_POST['userId']));

	//쿼리문 생성
	$sql = "SELECT useID From myMember WHERE useID = '{$userId}'";
	//쿼리문 질의
	$res = $dbConnect->query($sql);

	//전달할 데이터
	$jsonResult = "bad";

	//해당하는 레코드 수가 0이라면 중복되는 아이디가 없다는 뜻
	if($res->num_rows == 0){
		$jsonResult = "good";
	}

	echo json_encode(array('result'=>$jsonResult));
?>

쿠키와 세션은 어떠한 상태를 유지하는 기술입니다. 쿠키는 사용자의 컴퓨터에 상태를 저장하며 세션은 서버에 상태를 저장합니다.

쿠키를 사용할 때 주의할 점은 용량이(4kb)이기 때문에 그 이상의 데이터를 담으려면 다른 방법을 사용해야 하고 쿠기를 생성하기 전에 어떠한 문구가 있어서는 안됩니다. 쿠키 생성문은 가정 위에 위치해야 합니다. 세션도 동일

setcookie("쿠기이름", "쿠키값", 유지시간, "쿠키 적용 경로");

1분 동안 유지 : 1분 1초 60개 : time()+60
1시간 동안 유지 : 1시간 1분 60개 : time()+(60*60)
24시간 동안 유지 : 1시간 24개 : time()+(60*60*24)

쿠키 생성
VIEW
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>쿠키와 세션</title>
</head>
<body>
    <?php
        setcookie('myCookie', 'itIsMyCookie', time()+10000, '/');
        
        if(isset($_COOKIE['myCookie'])){
            echo "cooking creation completed";
        } else {
            echo "cooking creation failed";
        }
    ?>
</body>
</html>
쿠키 소멸
VIEW

                       <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>쿠키와 세션</title>
</head>
<body>
    <?php
        setcookie('myCookie', null, time()-10000, '/');
        
        if(isset($_COOKIE['myCookie'])){
            echo "cooking Existence";
        } else {
            echo "cooking creation Delete";
        }
    ?>
</body>
</html>

세션

$_SESSION['세션 이름'] = 세션 값;

섹션 생성View
<?php
	session_start();

	//세션 생성
	$_SESSION['useId'] = 'webstoryboy';

	if(isset($_SESSION['useId'])){
		echo "Session Creation complete : {$_SESSION['useId']}";
	} else {
		echo "Session Creation false";
	}
?>

ini_get(), ini_set()

ini_get("값을 확인할 php 설정 항목");
ini_set("값을 변경할 php 설정 항목", 변경할 값);

섹션 삭제

unset(세션명);

섹션 삭제View
<?php
session_start();
    $_SESSION['mySession6'] = 'jihune';
    $_SESSION['mySession7'] = 'Jongsung';

    //섹션 확인
    echo "<pre>";
    var_dump($_SESSION);

    //섹션 삭제
    if(session_destroy()){
        echo "Confirm session delete";
    }
?>

세션 배열 선언 방법

$_SESSION['섹션 이름'] = array();
$_SESSION['섹션 이름']['섹션 시간'] = time();
$_SESSION['섹션 이름']['유지 시간'] = 초 단위;
$_SESSION['섹션 이름']['유지 값'] = 값;

세션 배열 선언 방법View
<?php
session_start();
    
    //섹션을 배열형으로 선언
    $_SESSION['mySession10'] = array();
    //값을 대입하기 위해 2차원 배열 선언
    $_SESSION['mySession10']['value'] = 'jeongahStory';
    //섹션 생성 시간 대입
     $_SESSION['mySession10']['generation'] = time();
    //식션 지속 시간 대입
    $_SESSION['mySession10']['duration'] = 10;

    echo "<pre>";
    var_dump($_SESSION['mySession10']);
?>
<?php
    session_start();
    
    //현재 시간에서 세션 생성 시간을 빼서 차이를 구함
    $time = time() - (int) $_SESSION['mySession10']['generation'];

    //차이의 값이 세션 유지 시간보다 크면 섹션 삭제
    echo "{$time} Has passed since the session was created.<br>";
    if( $time > $_SESSION['mySession10']['duration'] ){
        unset($_SESSION['mySession10']);
    }
    //세션 존재 여부 확인
    if( isset($_SESSION['mySession10'])){
        echo "Session exists : {$_SESSION['mySession10']['value']} ";
    } else {
        echo "Session does not exist";
    }
?>

extend

class 클래스명 extends 상속 받을 클래스명

클래스 상속
VIEW
<?php
class operation{
         function plus($num1, $num2){
             $result = $num1 + $num2;
             return "{$num1} + {$num2} = ".$result;
         }
     }

     class load extends operation{}

    //load 클래스의 인스턴스 생성
    $load = new load;
    echo $load->plus(1,2);
?>

접근 제한자 종류

public : 클래스 안에서든 밖에서든 접근 가능, 상속 가능
protected : 클래스 내부에서 접근 가능, 상속 가능
private : 클래스 내부에서만 접근 가능, 상속 불가능

접근 제한자
VIEW
<?php
class hello {
        protected function say($word){
            echo $word;
        }
        
        public function say2($word){
            $this->say($word);
        }
    }
    
    $hello = new hello;
    $hello->say2("hello class");
?>
클래스 접근 제한자
VIEW
<?php
class hello {
        protected function say($word){
            echo $word;
        }
        
    }
    class hello2 extends hello{
        public function say2($word){
            $this->say($word);
        }
    }
    
    $hello2 = new hello2;
    $hello2->say2("hello class");
?>

static

static function 메소드명(){};

접근 제한자 static function 메소드명(){};

//인스턴스를 생성하지 않고 메소드를 호출하는 방법 클래스명::메소드명();

static
VIEW
<?php
class hello {
        //static을 사용하여 메소드 생성
        static function output($word){
            echo "The method that prints the message 
"; echo $word; } } //인스턴스 생성하지 않고 클래스 메소드를 호출 hello::output("hello world"); ?>