본문 바로가기
Language/php

폼 처리

by 잘먹는 개발자 에단 2024. 9. 9.
<?php
if($_SERVER["REQUEST_METHOD"] == "POST"){

    echo "test";
    // 입력 가져오기
    $username = $_POST['username'];
    $password = $_POST['password'];

    // 입력 유효성 검사
    $errors = [];

    if(empty($username)){
        // php 에서는 배열의 마지막에 요소를 추가할 때
        // $배열명[] = 요소 이런식으로 한다.
        $errors[] = "사용자 이름을 입력해주세요.";
    }

    if(empty($password)){
        $errors[] = "비밀번호를 입력해주세요.";
    }

    // 유효성 검사 통과여부 확인
    if(empty($errors)){
        echo "로그인 성공!";
        echo "<script>
            // 이 안에 자바스크립트 식/문 모두 넣을 수 있음

</script>";


    }else{
        foreach ($errors as $error) {
            echo $error."<br>";
        }
    }

}
?>



<!DOCTYPE html>
<html>
<head>
    <title>로그인 폼</title>
</head>
<body>
    <h2>로그인</h2>
    <form method="POST" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>">
        
        <label for="username">사용자 이름:</label>
        <input type="text" name="username" id="username"><br><br>

        <label for="password">비밀번호:</label>
        <input type="password" name="password" id="password"><br><br>

        <input type="submit" value="로그인">
    </form>
</body>
</html>

 

먼저 생소한 표현 먼저 잡고 가자. 

 

첫번째!

$_SERVER 이건 무엇인가?!

- PHP에는 슈퍼 글로벌 변수가 있다. 다음 글이 가장 정리가 잘 되어있으니 참고하면 좋을 것 같다. ( 갓지피티를 써도 좋다 )

- https://codingeverybody.kr/php-%EC%8A%88%ED%8D%BC%EA%B8%80%EB%A1%9C%EB%B2%8C-%EB%B3%80%EC%88%98-%EC%95%8C%EC%95%84%EC%95%BC-%ED%95%A0-%EB%AA%A8%EB%93%A0-%EA%B2%83/

 

PHP 슈퍼글로벌 변수 – 알아야 할 사용법, 활용 방법 그리고 중요성! - 코딩에브리바디

PHP의 슈퍼글로벌 변수는 코드 전체에서 사용할 수 있는 특별한 변수로, 올바르게 활용함으로써 개발 작업을 효율적으로 수행할 수 있습니다. PHP에는 슈퍼글로벌 변수는 9개($_GET, $_POST, $_SERVER, $_

codingeverybody.kr

 

$_SERVER["PHP_SELF"]는 현재 실행되고 있는 php 파일의 경로를 나타낸다. 

즉 이 코드를 사용하면 현재 페이지로 폼을 제출하게 된다.

예를 들어서, 이 코드가 login.php 파일에 있다면

$_SERVER["PHP_SELF]는 /login.php 를 반환한다.

 

이렇게 하면 폼이 제출되었을 때 같은 페이지에서 데이터를 처리할 수 있다.

보통 폼이 제출되면 해당 페이지에서 입력값을 검사하고 결과를 사용자에게 보여주는 방식으로 많이 사용된다. 

 

두번째!

보면

$errors[] = 문자열 쏼라쏼라 되어있는데

$error 같이 이런식으로 생긴건 변수라는 건 알 것이다. 자료형 없이 이렇게 이름주고 바로 선언 가능한건 파이썬과 많이 닮았다.

어쨋든 $errors[] = "~~~" 는 배열 errors의 마지막에 요소를 넣어주는 것이다. 진짜 꽤 오래된 언어 치고 진짜 직관적이어서 너무 좋다. 

 

 

세번째!

htmlspecialchars() 이건 무엇인가

보안 목적으로 사용된다고 한다. 

사용자가 폼에 악성 스크립트나 html 태그 등을 입력했을 때, 이를 그대로 출력하면 XSS cross-site scripting 공격에 취약해지는데,

이를 방지하기 위해서 이 메서드는 특수 문자를 html 엔티티로 변환해준다.

 

예를 들어서 <script>alert('xss')</script> 라는 문자열이 입력되면 이를 그대로 출력했을 때 브라우저는 이 스크립트를 그대로 실행하게 되는데, 이 메서드를 통하면 <와 >가 각각 &lt; 와 &gt;로 변환되어서 브라우저가 스크립트를 실행하지 않고 그대로 문자열로 보내준다. 

 

네번째!

보면 echo "<script></script>"; 이렇게 코드를 넣어놨는데, 해당 스크립트 안에서 JS 코드를 쓸 수 있다.

물론 php의 웹은 서버 사이드 렌더링이라서 서버에서 돌아가는거고 저 해당 스크립트는 클라이언트 사이드 즉 브라우저에서 돌아가게 된다.

그렇기 때문에 변수가 공유가 안되냐 하면 php에서 js로의 변수 할당은 가능하다.

 

정말 편한 언어다.

<?php
$teststr = "test";
?>

<script>
    // PHP 변수를 JavaScript 변수로 전달
    var jsTestStr = "<?php echo $teststr; ?>";
    console.log(jsTestStr); // "test" 출력
</script>

 

* 그 역순은 아마 안될거다. 서버에서 클라이언트에 사이트 파일을 보내면서 브라우저에서 해당 값을 받을 수는 있지만

그 반대는 힘들지 않을까?

 

*** 20240909 PHP 공부 시작

- php the right way라는 페이지에서 글을 보는데, 어떤 글귀를 보고 불안해졌다.

    "PHP는 에러가 발생해도 심각하지 않으면 행복하게 제 갈 길 갑니다!" 

 

- ...?

 

- 대체 PHP는 무슨 언어인가 하는 생각이 들었었는데, 잠깐이지만 공부해보니, 꽤 괜찮은 언어 같다.

 

- C# blazor로 웹페이지를 짜다가 라이브러리 쪽으로 빠지는 순간, 진짜 머리가 너무 아팠다. 페이지를 만드려면 어쩔 수 없이 JS를 건들 수 밖에 없는데, blazor에서 스크립트를 실행시키려면 거기서부터 생기는 보일러플레이트 코드부터 꽤 많았기 때문이다.

 

- 그에 비교하면 PHP는 정말 너무너무너무너무너무 편하다....

 

- PDO 로 mysql에서 데이터 가져오는 것도 진짜 편하다.

 

 

 

 

 

'Language > php' 카테고리의 다른 글

캐싱 예시  (0) 2024.09.11
해시 테이블 사용하기  (0) 2024.09.11
폼 처리 - XSS 공격  (6) 2024.09.11
예외처리  (0) 2024.09.09
자료구조 및 메서드  (1) 2024.09.09