해리의 데브로그

생활 코딩 PHP 04 - 조건문, 반복문

|

1. 조건문

1-1 기본 문법

  • if // else // else if
<?php
if (false){
    echo 1;
} else if (true){
    echo 2;
} else if (true){
    echo 3;
} else {
    echo 4;
}
?>

1-2. 조건문 응용

  • HTML 폼 태그 & 비교 연산자 & 조건문등을 응용한 유사 로그인 어플리케이션 구현
<html>
<body>
    <form method="get" action="2.php">
        <input type="text" name="id" />
        <input type="submit" />
    </form>
</body>
</html>
<?php
if ($_GET['id'] == 'harry'){
    echo 'right';
} else {
    echo 'wrong';
}
?>
  • POST방식으로 변경 & 비밀번호 INPUT 태그 추가
<html>
<body>
    <form method="post" action="3.php">
        id :  <input type="text" name="id" />
        password : <input type="text" name="password" />
        <input type="submit" />
    </form>
</body>
</html>
<?php
if ($_POST['id'] == 'harry') {
    if ($_POST['password'] == '111111') {
        echo 'correct';
    } else {
        echo 'password wrong';
    }
} else {
    echo 'id wrong';
}
?>

1-3 논리연산자

  • and(&&) // or // !
  • boolean 값은 ! 을 앞에 입력함으로써 값을 역전 시킬 수 있음. ex) !true
  • 1 : true // 0 : false
<?php
if ($_POST['id'] == 'harry' && $_POST['password'] === '111111') {
    echo 'welcome harry';
} else {
    echo 'login failed';
}
?>

2. 반복문

2-1. 기본 문법

  • while
<?php
while (true) {
    echo 'coding everybody';
}
?>
<?php
$i = 0;
while($i < 5) {
    echo '<br />';
    echo 'coding everybody';
    $i += 1;
    echo '현재 변수 i 값 '.$i;
}
?>
  • for
for(초기화; 반복 지속 여부; 반복 실행){
    코드;
}
<html> 
<body> 
<?php
for ($i = 0; $i < 10; $i++){
    echo 'coding everybody'.$i.'<br />';
}
?>
</body>
</html>

2-2. 반복문의 제어

  • break : 반복 작업 중 중단을 시킬 때 사용
  • continue : 실행은 중단 시키면서 반복이 지속돼게 할 때 사용
<?php
for ($i = 0; $i < 10; $i++){
    if ($i == 5){
        break;
    }
    echo "coding everybody{$i}<br />";
}
?>
<?php
for ($i = 1; $i < 10; $i++){
    if ($i == 5){
        continue;
    }
    echo "coding everybody{$i}<br />";
}
?>

2-3. 반복문의 중첩

<?php
for ($i = 0; $i < 4; $i++){
    for ($j = 0; $j < 4; $j++){
        echo "coding everybody {$i}{$j} <br />";
    }
}
?>

생활 코딩 PHP 03 - 입/출력 그리고 form과 http

|

입/출력 그리고 form과 http

1-1. 입력과 출력

  • PHP 어플리케이션은 URL을 통해 데이터를 입력 받을 수 있음.
  • http://localhost/IO_form/25.php?id=harry 로 입력할 경우, id의 값이 출력됨.
  • http://localhost/IO_form/25.php : 주소
  • id=harry : 입력 데이터 영역
<?php
echo $_GET['id']."님 안녕하세요."; #사용자가 입력된 정보를 치환하여 줌.
?>
    
#출력값: harry 님 안녕하세요. 가 출력됨.
<?php
echo $_GET['id'].','.$_GET['name'];
?>

#입력값: http://localhost/IO_form/25.php?id=harry&name=potter
#출력값: harry,potter

1-2. HTML FORM

  • HTML FORM 태그를 활용하여 데이터를 전달 시킬 수 있음.
<!-- 1.html -->
<html>
<body>
    <form method="get" action="25.php">
        id :  <input type="text" name="id" />
        password :  <input type="text" name="password" />
        <input type="submit" />
    </form>
</body>
</html>
# 25.php
<?php
echo $_GET['id'].','.$_GET['password'];
?>

1-3. GET vs POST

  • GET 방식으로 데이터 전송 시, URL에 데이터를 포함 시킴
  • POST 방식은 데이터를 URL에 포함시키지 않고 전송 가능
<!-- 2.html -->
<html>
<body>
    <form method="POST" action="21.php">
        id :  <input type="text" name="id" />
        password :  <input type="text" name="password" />
        <input type="submit" />
    </form>
</body>
</html>
# 21.php
<?php
echo $_POST['id'].', '.$_POST['password'];
?>

생활 코딩 PHP 02 - 문법 - 숫자/문자/변수/상수/비교

|

1. 숫자와 문자

1-1. 숫자

<?php
echo 4/2; # echo: 출력
?>

<?php
var_dump(6.1); # var_dump: 데이터 타입 확인 => float(6.1)
?>

1-2. 문자

  • 따옴표로 묶어줄 것. 따옴표를 사용하지 않을 경우 php에서 상수라는 다른 데이터 타입으로 인식하며 에러가 발생함

Parse error: syntax error, unexpected ‘world’ (T_STRING), expecting ‘,’ or ‘;’ in C:\Bitnami\wampstack-7.3.11-0\apache2\htdocs\number_string\string.php on line 2

  • 문자 결합 시에는 . 사용
<?php
echo 'hello world';
?>

<?php
echo var_dump(1234);
echo var_dump("1234");
?>

<!-- 문자 결합 연산자 . -->
<?php
echo "hello"." "."world";
?>

<!-- 따옴표 안에서 따옴표(인용부호) 사용 -->
<!-- 1. 작은 따옴표 사용 -->
<?php
echo '그는 "안녕하세요" 라고 말했다';
?>
<!-- 2. escaping - 역슬래쉬(\) 사용 -->
<?php
echo "그는 \"안녕하세요?\"라고 말했다";
?>

2. 변수와 상수

2-1. 변수

  • 변수(variable): 변하지 않는 값.
  • 변수 선언 시 $ 를 사용
  • echo 대신 print 사용 가능
<html>
<body>
<?php
$a=1;
echo $a+1; #2
echo "<br />";
$a=2;
print $a+1; #3  print == echo
?>
</body>
</html>
<html>
<body>
<?php
$first = "coding";
echo $first." everybody";
?>
</body>
</html>

2-2. 변수 사용 이유?

변수를 통해 코드의 재활용성 향상시킬 수 있음. 따라서 코드를 효율적으로 작성할 수 있음.

<html>
<body>
<?php
echo 100+10;
echo '<br />';
echo (100+10)/10;
echo '<br />';
echo ((100+10)/10)-10;
echo '<br />';
echo (((100+10)/10)-10)*10;
echo '<br />';
?>
</body>
</html>
<html>
<body>
<?php
$a = 100;
$a = $a + 10;
print $a.'<br />';
$a = $a / 10;
print $a.'<br />';
$a = $a - 10;
print $a.'<br />';
$a = $a * 10 ;
print $a.'<br />';
?>
</body>
</html>

2-3. 상수

  • 상수(constant): 변하지 않는 값
  • 상수 선언시 define 사용. 첫번째 인자로 상수, 두번째 인자로 상수값 입력
  • 선언된 상수를 재선언할 경우 에러 발생

Notice: Constant TITLE already defined in C:\Bitnami\wampstack-7.3.11-0\apache2\htdocs\variable\variable8.php on line 6

<html>
<body>
<?php
define('TITLE', 'PHP Tutorial');
echo TITLE;
// define('TITLE', 'JAVA Tutorial');
?>
</body>
</html>

2-4. 변수의 데이터 타입 검사 및 변경

  • gettype : 데이터 타입 검사
  • settype: 데이터 타입 변경
  • var_dump는 데이터 타입 검사 및 출력을 강제하므로 활용도가 낮음
<html>
<body>
<?php
$a = 100;
echo var_dump($a); #int(100)
echo gettype($a);  #integer
settype($a, 'double'); #double: 실수를 의미
echo '<br />';
echo gettype($a); #double
?>
</body>
</html>

2-5. 가변변수

  • 가변변수(variable variables). 변수의 이름을 가변적으로 변수로 변경 할 수 있게 함.
<html>
<body>
<?php
$title = 'subject';
$$title = 'PHP tutorial';
echo $title;
echo $subject;
?>
</body>
</html>

3. 비교

  • == , != , === , > , >= 등이 있음.
  • === : 데이터 뿐만 아니라 데이터 타입까지 비교할 경우 사용
<html>
<body>
<?php
echo('<br />');
echo "1==2 : ";
var_dump(1==2);
echo('<br />');
echo "1==1 : ";
var_dump(1==1);
echo('<br />');
echo '"one"=="two" : ';
var_dump("one"=="two");
echo('<br />');
echo '"two"=="two" : ';
var_dump("two"=="two");
echo('<br />');
?>
</body>
</html>
<!--결과 -->
1==2 : bool(false)
1==1 : bool(true)
"one"=="two" : bool(false)
"two"=="two" : bool(true)
<html>
<body>
<?php
var_dump(10>=20); #false
var_dump(1=='1'); #true
var_dump(1==='1'); #false
?>
</html>

생활 코딩 PHP 01 - Get Started

|

1. Windows 에서 PHP 설치하기

  • W APM: Window Apach PHP MySQL
  • Bitnami를 통해 W APM 설치 쉽게 가능
  • httpd.conf 파일을 열어보면 DocumentRoot를 확인할 수 있음
  • DocumentRoot “C:/Bitnami/wampstack-7.1.26-0/apache2/htdocs”

2. Windows에서 PHP 설정하기

2-1. 설정이란

Configuration. PHP가 동작하는 기본적인 작동방법을 변경하는 것으로, php.ini 파일를 통해서 변경 사항을 반영할 수 있다. 설정을 변경 한 후에는 웹서버를 리로드(reload) 혹은 재시작(restart) 해야 한다.

2-2. 에러설정

에러는 개발이나 오류를 파악하는데 중요한 수단이지만, 에러가 실서버 환경에서 그대로 노출되는 것은 바람직하지 못하다. 아래는 실서비스와 개발환경에서의 권장 설정 방법이다.

C:\BitNami\wampstack-5.4.20-0\php\php.ini

2-3. 운영

display_errors = Off
display_startup_errors = Off
error_reporting= E_ALL
log_errors = On

2-4. 개발

display_errors = On
display_startup_errors = On
error_reporting = -1
log_errors = On

php.ini: PHP에 대한 기본적인 설정을 저장한 파일

  • 개발 환경의 경우, php.ini-development 파일을 php.ini로 수정
  • 배포 환경의 경우, php.ini_production 파일을 php.ini로 수정

설정 변경 후, Bitnami 웹 서버를 다시 켜 줄 것.

3. 나의 첫번째 PHP 어플리케이션

  • /firstapp/helloworld.php
<?php
echo "Hello world";
?>
  • /firstapp/helloworld2.php
    • <?php> <?> : PHP Interpreter/Engine은 해당 기호안에 있는 내용만 php로 해석함
<html>
<body>
echo "Hello world";    
<?php
echo "Hello world";
?>
</body>
</html>
  • 그림 설명

서버측 언어를 사용하는 이유

  • HTTP: 웹 브라우저와 웹 서버가 서로 데이터를 주고 받기 위한 통신 규약
  • CGI: 웹서버와 서버 사이드 스크립트가 서로 데이터를 주고 받기 위한 통신 규약

웹브라우저가 요청한 페이지(자원)이 HTML이 아닌 경우 웹 서버는 처리가 불가능함. 따라서 처리 가능한 적합한 언어의 엔진을 호출하여 사용자가 요청한 파일의 처리를 위임함. PHP, PYTHON 등이 파일을 읽어서 각각의 언어(코드)를 해석한 다음 그 결과를 웹서버에 돌려줌. (CGI에 의해 약속된 방식에 따라)

추가로, 서버사이드 스크립트는 경우에 따라 데이터베이스에 접근하여 데이터를 HTML 문서로 변경한 다음 웹서버로 데이터를 전달함.

Udemy Laravel 02 - Routes, Controller, View

|

1. Routes

Django의 urls.py처럼 url을 정하여 View와 연동시키는 설정을 하는 영역. Routes\web.php에서 코드 입력

1.1 Routes\web.php

  • Route : 클래스 명
  • :: : static method를 의미함
  • 첫번째 파라미터로 url 주소를 입력, 두번째 파라미터로 closure function또는 controller 등을 입력할 수 있음. view()를 return시키거나, text를 return하는 것도 가능함.

404 Error가 발생할 경우, php artisan serve 를 terminal에서 실행 시켜 접속하자

<?php

Route::get('/', function () {
    return view('welcome');
});

Route::get('/welcome', function () {
    return "Hi You";
});

Route::get('/admin/post', function() {
    return "Admin is here";
});

1.2 variable routing

url 주소를 입력하는 첫번째 파라미터에 variable routing으로 쓸 변수를 {} 로 묶어준 다음 변수를 두번째 파라미터 함수의 인자로 넘겨주면 variable routing 설정이 가능함.

두번째 예제처럼 variable routing을 여러개 설정할 수 도 있음.

Route::get('/post/{id}', function($id) {
    return "This is post number ".$id;
});


Route::get('/post/{id}/{name}', function($id, $name) {
    return "This is post number ".$id . " ". $name;
});

1.3 naming

지정한 url에 대하여 naming 설정도 가능함. Route 클래스의 두번째 파라미터로 array() 메서드를 사용. naming 명으로 해당 url 호출 가능

  • 첫번째 파라미터: as=> naming 명
  • 두번째 파라미터: closure 함수 입력
Route::get('admin/posts/example', array('as'=>'admin.home', function() {
    
    $url = route('admin.home');

    return "This url is". $url;
}));
  • php artisan route:list : 프로젝트의 route list를 반환함
$ php artisan route:list
+--------+----------+---------------------+------------+---------+--------------+
| Domain | Method   | URI                 | Name       | Action  | Middleware   |
+--------+----------+---------------------+------------+---------+--------------+
|        | GET|HEAD | /                   |            | Closure | web          |
|        | GET|HEAD | about               |            | Closure | web          |
|        | GET|HEAD | admin/posts/example | admin.home | Closure | web          |
|        | GET|HEAD | api/user            |            | Closure | api,auth:api |
|        | GET|HEAD | contact             |            | Closure | web          |
|        | GET|HEAD | post/{id}/{name}    |            | Closure | web          |
+--------+----------+---------------------+------------+---------+--------------+

2. Controller

Django의 views.py의 역할을 함. Database에서 데이터를 갖고와 Template으로 넘겨줄 수 있음. App\Http\Controllers 디렉토리 내에서 파일 생성 & 코드 입력

2.1 PostsController.php

Laravel에서는 Terminal을 통해 손쉽게 controller를 생성할 수 있음.

  • php artisan make:controller controller 이름
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class PostController extends Controller
{
    //
}

CRUD 및 기본적인 로직이 담겨있는 resource가 저장된 controller를 불러와 만들 수도 있음.

  • php artisan make:controller --resource PostsController
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class PostsController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }
}

2.2 Routing controller

Route 클래스의 두번째 파라미터로 생성한 controller를 입력함으로써 controller를 routing 할 수 있음.

  • @를 활용하여 controller의 특정 메서드 호출 가능
  • variable routing을 설정하여 데이터를 넘겨주는 것 또한 가능
# web.php(routes)

Route::get('/post/{id}', 'PostsController@index'); # PostController의 index 메서드에 연결

#PostsController.php

    public function index($id)
    {
        //

        return "its working :: ".$id;
    }

2.3 resource

resource 메서드를 이용하면 CRUD의 경로를 한줄의 코드로 할당할 수 있음.

# web.php(routes)
Route::resource('post', 'PostsController');

#PostsController.php

    public function create()
    {
        //

        return "I am the method that creates stuff :)";
    }

    public function show($id)
    {
        //

        return "this is the show methods yayyyyyyy :: ". $id;
    }
$ php artisan route:list
+--------+-----------+------------------+--------------+---------------------------------
| Domain | Method    | URI              | Name         | Action                           
+--------+-----------+------------------+--------------+---------------------------------
|        | GET|HEAD  | post             | post.index   | PostsController@index           
|        | POST      | post             | post.store   | PostsController@store           
|        | GET|HEAD  | post/create      | post.create  | PostsController@create          
|        | GET|HEAD  | post/{post}      | post.show    | PostsController@show             
|        | PUT|PATCH | post/{post}      | post.update  | PostsController@update           
|        | DELETE    | post/{post}      | post.destroy | PostsController@destroy         
|        | GET|HEAD  | post/{post}/edit | post.edit    | PostsController@edit             
+--------+-----------+------------------+--------------+---------------------------------

3. Views

3.1 Get Started

  • resources/views/contact.blade.php
    • Laravel Blate Template Engine을 사용하면 <?php echo $this ?> 의 문법을 쉽게 `` 으로 변경하여 사용할수 있음. Simple하게 welcome.blade.php 파일의 내용을 갖고와 코드를 붙여놓도록 하자.
  • Controller & Routes
    • 해당 view로 연결시키는 메서드를 PostsController.php 내에 생성 & Routes 또한 생성
Route::get('/contact', 'PostsController@contact');

public function contact(){

    return view('contact');

}

3.2 view에 data 넘기기

  • Routes & Controller
    • {id}를 variable routing으로 controller로 넘김.
    • controller 메서드의 return 값으로 view 파일을 연결시키며, ->with() 메서드를 통해 데이터를 넘김
    • compact() 메서드로 ->with() 를 대체할 수 있음 (여러개의 파라미터를 넘길 때 유용)
Route::get('/post/{id}', 'PostsController@show_post');

public function show_post($id){

    return view('post')->with('id', $id);
    #return view('post', compact('id'));
}
  • post.blade.php
<body>
    <div class="container">
    	<h1> Post </h1>
    </div>
</body>