2009-04-29 8 views
1

나는 PHP를 통해 기본 HTML 폼을 되풀이했다 :양식에 매개 변수를 전달하는 PHP?

<html> 
<body> 
<?php 
if (isset($_GET["pk"])) 
{ $pk = $_GET["pk"];} 
echo '<form action="up.php" method="post" 
enctype="multipart/form-data"> 
<label for="file">Filename:</label> 
<input type="file" name="file" id="file" /> 
<br /> 
<input type="submit" name="submit" value="Submit" /> 
</form>'; 
?> 
</body> 
</html> 

up.php

액션을 수정 = "up.php? pk = $ pk"수정하지 않았다. 작업.

+2

주의 !!! 형식이 지정되지 않은 값 (예 : echo $ _GET [ 'pk'])을 페이지에 인쇄하지 마십시오! 문제의 세계를 소개하는 보안 구멍입니다 (XSS로 이름을 지어줍니다). "pk"가 데이터베이스의 기본 키이고 숫자 인 경우 regex 또는 intval() 함수를 사용하여 삭제할 수 있습니다. – Rob

+0

페이지로 인쇄하지 않고 통과합니다. up.php 어디에서 매개 변수가있는 쿼리를 통해 데이터베이스에 삽입 될 것인가 왜 전송 중에 위생 처리가 필요한가? –

답변

13

숨겨진 필드를 사용합니다. HEREDOC, 템플릿 엔진 또는 프레임 워크를 사용하여 PHP를 수행하십시오.

편집 : 아래에 언급 한 바와 같이

, 당신은 GET과 먼저 살균하지 않고 다시 페이지에 POST 데이터를 인쇄하지 않아야합니다. pk가 기본 키라고 가정하면 위의 $pkintval 함수 으로 적어도에 랩핑해야합니다.

당신은 단일 인용 문자열 안에 변수를 사용할 수 없습니다
+1

Upvoted하지만 GET/POST 데이터에서 값을 인쇄하는 것에 관한 질문에 첨부 된 내 노트를 참조하십시오. – Rob

+0

한숨. 네, 알아요. 나는 돌보는 것을 멈출 때까지 여기서만 대답 할 수있다. 이것을 반영하도록 편집 됨. –

1

는 :

$pk = 123; 
echo 'Hello $pk'; // echos Hello $pk 
echo "Hello $pk"; // echos Hello 123 
echo 'Hello ' . $pk; // echos Hello 123 

가장 좋은 방법은

0

해보십시오 STH 같은 형태로 내부에 숨겨진 필드로 될 것이다 그것을 통과하기 :

<html> 
<body> 
<?php 
$params = ""; 
if (isset($_GET["pk"])) 
    { $params = "?pk=" . $_GET["pk"];} 
echo '<form action="up.php' . $params . '" method="post" 
enctype="multipart/form-data"> 
<label for="file">Filename:</label> 
<input type="file" name="file" id="file" /> 
<br /> 
<input type="submit" name="submit" value="Submit" /> 
</form>'; 
?> 
</body> 
</html> 

은 물론 당신은 $ _GET은 [ "PK"] 거의 모든 것을 포함 할 수 있다는 것을 알고 있어야한다, 그래서 입력 위생의 일종에 대해 생각합니다.

2

$ _GET [ 'pk'] 변수의 입력 제어에 관한 모든 의견에 동의합니다. 나는 필터 모듈을 php에서 추천 할 것이다. 이것은 꽤 많이 기본 설치 모듈이라고 생각한다.

<html> 
<body> 
<?php 
$param = filter_input(INPUT_GET, 'pk', FILTER_SANITIZE_ENCODED); 
?> 
<form action="up.php<?php echo (isset($param) && $param != false) ? '?pk=' . $params : ''); ?>" method="post"enctype="multipart/form-data"> 
<label for="file">Filename:</label> 
<input type="file" name="file" id="file" /> 
<br /> 
<input type="submit" name="submit" value="Submit" /> 
</form> 
</body> 
</html> 
현재 필터 모듈에 대한 자세한 내용은 찾을 수 있습니다

: link text

나는 또한 파올로 Bergantino에 동의

가이 그것을 할 수있는 가장 아름다운 방법 및 템플릿 엔진 아니라, heredocs 또는 정규 표현식이 될 수를 시스템의 가독성과 유지 보수성을 높이는 더 좋은 방법입니다.

관련 문제