<?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에는 슈퍼 글로벌 변수가 있다. 다음 글이 가장 정리가 잘 되어있으니 참고하면 좋을 것 같다. ( 갓지피티를 써도 좋다 )
$_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> 라는 문자열이 입력되면 이를 그대로 출력했을 때 브라우저는 이 스크립트를 그대로 실행하게 되는데, 이 메서드를 통하면 <와 >가 각각 < 와 >로 변환되어서 브라우저가 스크립트를 실행하지 않고 그대로 문자열로 보내준다.
네번째!
보면 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 |