Programming/PHP

[PHP]폼을 이용한 데이터 전달 방법. 배열 정리.

Rexter 2019. 3. 16. 09:55
반응형

참고도서 : PHP & MySQL 닌자 비법서. 한빛미디어


1. 배열

배열 사용법은 여타의 언어들과 비슷합니다.


1-1 선언 및 초기화

 선언은 따로 하지 않아도 됩니다. PHP 는 변수의 타입을 따로 지정하지 않기 때문에 그냥 사용할 때 선언을 같이 한다고 생각하시면 됩니다.

 초기화 방법은

 $myArray = [1, 2, 3];

 과 같은 방법으로 하시면 됩니다.


1-2 출력

 배열의 전체 내용을 출력할 때는 반복문이나 다른 함수를 이용해도 되지만 foreach() 함수를 이용하면 편한 거 같습니다.

 위 myArray 라는 배열을 출력하는 명령어 입니다.

 

foreach($myArray as $key=>$value){
echo 'array[' . $key . '] : ' . $value . '<br>';
}


 echo 문이 좀 보기 불편하긴 한데, php 파일을 실행해 보면 내용은 이해가 되실 겁니다.

 $key 는 인덱스, 키 를 의미하는 변수고, value 는 해당 값을 의미하는 변수 입니다.

 그냥 값들만 보고 싶다면,

 foreach($array as $value){

    echo $value . '<br>';

 }

  이렇게 입력한 후 실행하면 값들만 줄줄이 나오는 걸 볼 수 있습니다.

1-3 인덱스 사용자화

 인덱스를 기본 설정이 아닌 문자열로 사용할 수도 있는데요,

 초기화를 할 때

 $myArray = ['first' => 10, 'second' => 20];

 와 같이 선언을 한 후 위 출력문을 이용해서 출력해 보면

 이런 식으로 출력이 됩니다.

 전체 내용을 출력하지 않고 가령 second 의 내용만 출력을 하고자 하는 경우

echo $array['second']; 와 같은 식으로 하시면 됩니다.

 문자열 데이터를 전달 받아서 특정 배열의 같은 문자열의 키에 위치한 데이터를 출력하고 싶을 때 이용할 수 있는 방법입니다. 배열의 키 값에는 변수를 지정해도 사용이 가능한 점을 이용하는 거라고 볼 수 있습니다.


2. 폼(form)을 이용한 데이터 전달

 html 을 이용해 데이터를 입력 받은 후 php 로 전달하는 방법입니다.

 우선 2개의 파일이 필요합니다.

 임의로 001.html 과 001.php 파일을 만들어 주세요.

 그리고 001.html 에는

<!DOCTYPE html>
<html>
<head>
<title>전달용 페이지</title>
</head>
<body>
<form action="001.php" method="get">
<label for="myName">이름 : </label>
<input type="text" name="myName" id= "myName">
<label for="myAge">나이 : </label>
<input type="text" name="myAge" id= "myAge">
<input type="submit" value="전달">
</form>
</body>
</html>


처럼 입력을 해 주세요. 그리고 001.php 에는


<!DOCTYPE html>
<html>
<head>
</head>
<body>
<div>
<?php
$userData = ['Name' => $_GET['myName'], 'Age' => $_GET['myAge']];
foreach($userData as $value){
echo $value. '<br>';
}
?>
</div>
</body>
</html>


처럼 입력을 해 주세요.

그런 후 localhost/001.html 을 브라우저의 주소창에 입력 한 후 값들을 입력 하고 전달 버튼을 눌러 주시면 php 로 값이 전달됩니다.



굳이 배열을 사용하지 않아도 됩니다만 배열에 대해 정리를 하는 김에 그냥 써 봤습니다.

php 에서 출력을 할 때 보안을 위해 사용하는게 좋다고 하는게 있습니다.

echo htmlspecialchars() 를 이용해서 전달받은 값을 출력하도록 하는 건데요.

지금 설명드린 방법은 html 에서 submit 버튼을 이용해 값을 전달하고 php 에서 불러와서 쓰는 방법이었습니다.

근데 굳이 그렇게 하지 않고 php 를 불러오는 브라우저의 주소창의 내용을 수정하는 것만으로도 사용이 가능합니다. 그냥 단순하게 test 를 text 로 바꾼다던지 하는 경우에는 문제가 없겠지만, 스크립트를 넣는다던지 하는 경우에는 문제가 될 수 있겠지요. 그러한 보안 취약점을 해결하기 위한 함수라고 합니다.

htmlspecialchars 함수는 말 그대로 html 에서 쓰이는 특수 기호 들을 처리하는 함수입니다.

기본적인 사용 법은

htmlspecialchars($변수, ENT_QUOTES, 'UTF-8') 과 같습니다.

위에 출력문에 적용을 한다면

echo htmlspecialchars($value, ENT_QUOTES, 'UTF-8'). '<br>';

와 같은 방식이 되겠지요.


출력 결과에는 차이가 없습니다. 그럼 뭐가 다른가를 비교해서 보는 게 좋을 것 같네요.


foreach {} 안의 내용을

echo '안보안' . $value . '<br>'
echo '보안' . htmlspecialchars($value, ENT_QUOTES, 'UTF-8'). '<br>';


요런식으로 바꿔 주신 후 php 파일을 불러와 주세요. 그리고 주소창의 내용을

http://localhost/index.php?myName=<b>qasdf</b>&myAge=1<br>2<br>3<br> 와 같이 변경 한 후 다시 불러와 주세요.

그럼 결과 화면이



이런식으로 나오게 됩니다.

안보안은 html 태그가 적용이 되어서 나오게 되고

보안은 html 태그를 그대로 보여주게 됩니다.


스크립트를 이용한 보안취약점 공격에 사용하는 방법이라고 하니 알아두면 좋을 것 같네요.


html에서 php 로 값을 전달할 때 get 방법을 사용했는데 post 를 사용할 수도 있습니다.


3. get 과 post 의 차이점

 get 은 전달된 데이터가 서버 쪽에서 변경이 되지 않을 때 사용하고

 post 는 변경될 때 사용한다고 합니다.

 만약 get 방식을 이용해 데이터를 전달했는데 그게 결과 페이지에서 수정등이 이루어졌다면 데이터를 다시 전달해야 되고 그 과정에서 문제가 발생할 수 있다고 합니다.

반응형