gettype($test) : 변수 타입 확인
사용자의 요청이 들어왔을때 사용자의 요청에 맞는 파일을 찾을 수 있는 최상위 디렉토리. default 값이 설정되어 있어서 경로를 수정할 수 있다.
아파치 서버에서 document root 를 설정한다.
echo 'hello world' //문자열 출력 함수
print 값을 그대로 출력
print_r 배열, 객체 모양을 그대로 출력
var_dump print_r 보다 상세하게 출력
#한줄 주석
/*
여러줄
주석
*/
'$name' 이렇게 사용하면 변수값이 아니라 문자열 그대로 출력된다.
"" 를 사용하면 값이 출력되지만 주로 ''를 많이 사용한다.
echo "{$name}"; 와 같은 형태로도 사용한다.
$name = "seongwon";
echo '반갑습니다'.$name;
echo "hello $name";
echo "{$name}";
조건문의 결과가 참이면 1을 리턴하고 거짓일 경우 아무것도 리턴하지 않는다.
$result = 1 < 3;
echo $result == true;
if($fname == 'delay'){
echo '조건은 참이다';
}else{
echo '조건은 거짓이다.';
}
if($fname == 'delay' && $lname == 'kim')
if($fname == 'delay' and $lname == 'kim') //and/or 사용가능하다.
if($fname == 'delay' xor $lname == 'kim') //xor 서로 다르면 true 리턴
array() 함수로 빈배열을 생성한후 $fruit[0] = 'apple' 와 같이 값을 대입한다.
isset(변수이름) 함수는 변수가 존재하는지 알려주는 함수이다 있을경우 1을 리턴한다.
//$배열이름 = array();
$fruit = array(); //빈 배열이야
$fruit[0] = 'apple';
$fruit[1] = 'banana';
$fruit[2] = 'orange';
if(isset($fruit[3])){
echo $fruit[3];
}else{
echo 'there is no third item';
}
print_r($fruit); // 배열의 인덱스와 값이 모두 출력됨
for($i = 0; $i < count($fruits); $i++){
echo $fruits[$i].'<br/>';
}
foreach($fruits as $item){
echo $item.'<br/>';
}
숫자를 배열의 인덱스로 사용 하는 것이 아니라 문자열을 배열의 인덱스로 사용할 수 있다.
$prices = array();
$prices['apple'] = 1000; 또는 아래와 같이 생성가능 하다.
$prices = array('apple'=>1000,'banana'=>2000,'orange'=>1500);
$prices = array();
$prices['apple'] = 1000;
$prices['banana'] = 2000;
$prices['orange'] = 1500;
foreach($prices as $key => $price){
echo $key." - ".$price.'<br/>';
}
함수 내에서 생성된 변수는 함수 내에서만 사용가능한 지역변수
function sum($x, $y){
$result = $x + $y;
return $result;
}
$result = sum(10, 20);
echo $result;
$fruits = [
'apple',
'mango',
'banana',
'orange'
];
function output($value){
echo '<pre>';
echo print_r($value);
echo '</pre>';
}
output($fruits);
"{$var2}" 이런 식으로 사용도 가능한가 보다
function func(){
$var = 10;
echo "{$var}";
}
func();
$var2 = 20;
function func2(){
global $var2;
echo "{$var2}";
echo "{$GLOBALS['var2']}";
}
func2();
해당 함수 내부에서만 사용되는 지역변수 이지만 함수가 종료되도 값은 남아있다. 그래서
다시 호출해도 전에 호출했을 때 사용한 값을 연속하여 사용할 수 있다.
function increment(){
static $count = 0;
echo "{$count}<br/>";
$count++;
}
increment();
increment();
include 는 PHP 파일을 불러온다. 그파일이 오류가 나도 오류를 출력하고 다른코드들은 그대로 실행된다. 하지만 require는 그 파일이 오류가 나면 오류를 출력하고 다른코드들도 실행이 안된다. 그러므로 중요한 함수같은 파일들은 require 로 불러오는 것이 좋다. 간단한 footer, header는 include 를 사용하면 좋다. 같은 파일을 여러번 include 하면 여러번 출력된다. 하지만 require는 같은 파일을 여러번 호출하면 오류를 낸다. 여러번 호출되어도 한번만 호출될 수있도록 include, require 모두 _once 를 붙여 주면 된다. e.g) include_once, require_once
<?php
include('inc/headers.php');
require('inc/functions.php');
?>
<?php
include('inc/footer.php');
?>
// while
$i = 0;
while($i < 5){
echo ($i++).'<br/>';
}
echo '<hr/>';
//do-while
$i = 0;
do{
echo ($i++).'<br/>';
}while($i < 5);
echo '<hr/>';
//for
$i = 0;
for($i = 0; $i < 5; $i++){
echo "{$i} <br/>";
}
echo '<hr/>';
//foreach 숫자 index
$arr = array(0,1,2,3,4);
foreach($arr as $item){
echo "변수 \$item 의 값은 {$item} 입니다. <br/>";
}
echo '<hr/>';
//foreach 문자열 index
$scores = array(
'국어' => 80,
'영어' => 90,
'수학' => 100,
'과학' => 95
);
foreach($scores as $key => $score){
echo "배열 \$scores에서 과목명 {$key} 의 점수는 {$score} 입니다. <br/>";
}
아래 와 같은 form 태그가 있을 때 input 태그의 name 속성을 인덱스로 사용해 php 에서 $GET['input_name문자열']로 가져올 수 있다.
<form action="request.php" method="get">
<p>
<label for="userName">Name</label>
<input type="text" name="username" id="userName">
</p>
<p>
<label for="userEmail">Email</label>
<input type="email" name="useremail" id="userEmail">
</p>
<p>
<input type="submit" value="로그인">
</p>
</form>
e.g. filter_input(INPUT_GET, 'limit', FILTER_VALIDATE_INT)
이런 코드가 있으면 사용자가 get 방식으로 입력한 limit 이라는 파라미터가 정수형인지 유효성 검사를 하고 싶다. 입력값이 정수이면 입력값이 린턴되고 아니면 0(false)를 리턴한다.
$product_id = filter_input(INPUT_GET, 'productid', FILTER_VALIDATE_INT);
$limit = filter_input(INPUT_GET, 'limit', FILTER_VALIDATE_INT);
if($product_id == false or $limit == false){
die();
}
이 사이트 어디에서든 사용할 수 있는 변수이다.
$_GET[name]
$_POST[name]
$_COOKIE[$cookieName]
$_SESSION[name]
setcookie 는 쿠키 이름, 쿠키 값, 만기일, 경로를 입력 받는다. 경로는 기본적으로 '/'를 지정하지만 '/test/'로 지정하면 test폴더와 그 하위폴더에서만 작동된다.
또한 옵션으로 도메인도 입력이 가능한데 'www.test.com' 으로 지정하면 무조건 그 도메인 에서만 작동되지만, '.test.com'으로 지정하면 서브 도메인인 'test1.test.com', 'test2.test.com'등에서도 사용된다.
$cookieName = 'city';
$cookieValue = 'Seoul';
setcookie($cookieName, $cookieValue, time()+60, '/');
if(isset($_COOKIE[$cookieName])) echo '쿠키 생성됨';
setcookie() 함수를 그대로 사용하여 지운다. time을 +에서 -로 바꾸거나 그냥 지금 시간 이전으로 만들면 만기시간이 지나서 없어진다.
setcookie($cookieName, $cookieValue, time()+60, '/');
setcookie($cookieName, $cookieValue, time()-60, '/');
setcookie($cookieName, $cookieValue, time()-1, '/');
// 세션 생성
session_start();
$_SESSION['city'] = 'Seoul';
$_SESSION['gu'] = 'Jongro';
print_r($_SESSION); //세션 확인
//세션 삭제
session_unset(); // 모든 세션 삭제
session_destroy(); // 모든 세션 삭제
$conn = mysqli_connect($servername, $username, $password, $tbname);
if(!$conn){
echo 'db에 연결하지 못했습니다.' . mysqli_connect_error();
} else{
echo 'db에 접속했습니다.';
}
$sql = "INSERT INTO msg_board (name, message) VALUES ('$user_name', '$user_msg')";
//
$result = mysqli_query($conn, $sql);
if($result === false){
echo '저장하지 못했습니다.';
error_log(mysqli_error($conn)); //에러 로그 기록
} else{
echo '저장 성공';
}
아래와 같있을때 $result 에 담겨있는 값은 Object 인데 mysqli_fetch_array() 는 $result 에서 레코드를 1개씩 배열로 리턴해주는 함수이다.
$sql = "SELECT * from msg_board";
$result = mysqli_query($conn, $sql);
while($row = mysqli_fetch_array($result)){}
아래 코드 에서 a 태그의 주소가 절대주소로 되어있지만 view.php 로 적어주어도 해당 폴더 안에서 veiw.php 를 찾아주나 보다.
while($row = mysqli_fetch_array($result)){
$list = $list."<li>{$row['number']}: <a href=\"/board/view.php?number={$row['number']}\">{$row['name']}</a></li>";
}
echo "<ul>{$list}</ul>";
<?php
if($row = mysqli_fetch_array($result)) {
?>
<h3>글번호: <?= $row['number'] ?>/ 글쓴이: <?= $row['name'] ?></h3>
<div>
<?= $row['message'] ?>
</div>
<?php } ?>
sql 에 문자열이라면 '' 작은 따옴표를 꼭 붙여주어야 한다.
$sql = "SELECT * from msg_board WHERE message LIKE '%$user_key%'";
$user_delnum = $_POST['delnum'];
$sqlDel = "DELETE FROM msg_board WHERE number = $user_delnum";
mysqli_query($conn, $sqlDel);
아래와같은 코드 사용 가능
사용자 요청이 POST 라면
if($_SERVER['REQUEST_METHOD'] == 'POST')
$_POST 를 pre태그 안에서 출력해보면 html name 속성을 키로 vlaue 가 들어있는 배열이 있다. 어떤 버튼이 클릭되었는지도 나타낼수 있는데 input 태그에도 name 속성을 주면된다. 그러면 $_POST 배열에 [longin'] => Login 이 추가된다.
<input type="submit" name="login" vlaue="Login"/>
아래 코드중 'email'은 input name 속성에서 받아온 값임
$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
header('location: www.abc.com') 함수를 사용하면 된다.
function redirect($url){
header("Location:$url");
}
종료 함수를 사용하는 이유는 redirect 함수같이 이동시키는 함수가 호출된 이후에도 뒤에있는 코드가 실행되는 것을 방지하기 위함 인 것 같다.
exit(); //종료. 에러 메시지 출력x
die(); //종료. 에러 메시지 출력o
세션들은 배열형태로 저장이 되어 있다. 그래서 값을 비우거나 배열을 삭제하는 함수가 존재한다.
unset($_SESSION['name']);
$_SESSION['name'] = '';
session_unset(); //배열의 모든값 비우기 - not 삭제
session_destroy() //세션 배열까지 삭제