2011-10-26 21 views
2

URL 매개 변수에 POST 메서드를 사용하여 특정 변수에 따라 데이터를 표시 할 수 있음을 알고 있습니다. GET 메서드를 사용하는 방법을 알고 있습니다. POST 메서드는 이와 같은 URL 부분을 숨기는 데 사용할 수 있습니다.POST 메서드를 사용하여 URL 매개 변수 숨기기

/data.php?parameter=1234 

URL 매개 변수의 실제 차이점은 무엇입니까? 다음은

내가 이렇게 같은 ID에 따라 data.php 파일에 대한 링크를 생성하는 별도의 페이지에서 특정 링크

<?php 
//This includes the variables, adjusted within the 'config.php file' and the functions from the 'functions.php' - the config variables are adjusted prior to anything else. 
require('configs/config.php'); 
require('configs/functions.php'); 

    //This is the actual interaction with the database, according to the id. 
    $query = mysql_query("SELECT * FROM table WHERE id=" .$_GET['id'] . ";") or die("An error has occurred"); 

      //This re-directs to an error page the user preventing them from viewing the page if there are no rows with data equal to the query. 
    if(mysql_num_rows($query) < 1) 
{ 
    header('Location: 404.php'); 
    exit; 
} 

    //Here each cell in the database is fetched and assigned a variable. 
    while($row = mysql_fetch_array($query)) 
    { 
     $id = $row['id']; 
     $title = $row['title']; 
     $month = $row['month']; 
     $day = $row['day']; 
     $photo = $row['photo']; 
     $text = $row['text'];  
    } 
?> 

의 ID에 따라 데이터베이스에서 데이터를 가져 오는 몇 가지 코드 :

<a href="post.php?id=<?php echo $content['id']; ?>"><?php echo $content['title']; ?></a> 

나는 URL 매개 변수를 숨기기 위해 POST 방식의 활용에 대해 갈 것입니다 방법, 위의 코드를 통해 발생할 수있는 잠재적 인 SQL 주입이 있다는 것을 잊어 버리고, 또는 적어도이처럼 그들을 표시하지 :

http://example.com/data.php?id=1 
+0

작은 보조 노트'''는 mysql_query (에서 폼에 매개 변수를 POST를 제거 추가, 같은 문제가 있었다 "테이블 SELECT * FROM WHERE ID =". $ _ GET [ 'ID'] ";")'''은 SQL 삽입에 취약하기 때문에 이것을 온라인에 넣고 데이터베이스에 중요한 데이터가 포함되어 있다면주의해야합니다. – Mason

답변

2

POST를 사용하려면 <form> 태그를 사용해야하며 URL을 가져 오는 방법에 따라 자바 스크립트를 사용하는 것이 더 쉬울 수 있습니다. 여기에 기본 예제 :

<form method="post" action="data.php"> 
    <input type="hidden" name="parameter" value="1234" /> 
    <input type="submit" value="Go" /> 
</form> 

이동 단추는 폼 데이터를 게시 것이고, 지금 data.php에 당신은 $_POST['parameter']에서 값을 검색 할 수 있습니다. POST를 사용할 때 사용자가 뒤로 버튼을 클릭하면 브라우저가 양식을 다시 제출하라는 메시지를 표시하지 않도록 페이지로 다시 리디렉션 (HTTP 302)해야합니다.

자바 스크립트를 사용하면 양식을 게시하기 전에 parameter 입력을 다른 값으로 설정할 수 있습니다.

+0

응답 해 주셔서 감사합니다. 나는 데이터를 데이터베이스에 삽입 한 다음 게시물을 제출 한 양식을 사용하여 유사한 프로세스를 수행하고 있습니다. 그런 다음 헤더를 통해 제출 한 데이터가 포함 된 페이지로 연결됩니다 ('Location : ../data .php? id = '. $ id); 이 시점에서 내가 실제로 잘못된 코드를 사용하고 있다는 뜻입니까? – Alex

+0

그것에 대해 잘못된 것은 없지만 URL에서 ID를 제거하기 위해 POST를 사용하려면 ID ($ _SESSION)를 세션에 저장해야합니다. 이렇게하면 사용자가 data.php에있을 때 GET이 아닌 세션에서 ID를 찾을 수 있습니다. –

+0

그래서 삽입 된 내용을 표시하는 동일한 파일에 데이터베이스를 업데이트하기위한 코드를 고수해야합니까? 그러면 양식이 해당 스크립트를 실행하여 데이터베이스에 삽입 한 다음 사용자에게 삽입 된 데이터를 표시합니다. – Alex

0

값을 POST하려면 브라우저가 method = "post"또는 JavaScript를 사용하여 양식을 시뮬레이트해야합니다. 다양한 개발자 도구 (fireug 등)는 GET 양식을 POST 양식으로 변환 할 수 있지만 일반적으로 양식이 필요합니다.

GET 요청에는 부작용이 없어야하며 요청에서 요청까지 일관되어야합니다. 즉, 서버는 동일한 내용을 반환해야합니다. 모든 것이 동적 인 오늘날의 세계에서 이것은 실제적인 디자인의 중요성이 없을 수도 있습니다.

0

GET 또는 POST를 사용하는 경우 매개 변수는 $_REQUEST에 표시됩니다. 중요한 차이점은 POST를 사용하면 변수가 URL 기록에 나타나지 않는다는 것입니다. 이렇게하면 URL 기록에 표시하지 않으려는 암호와 같은 데이터의 가시성이 떨어집니다. GET 대신 POST를 사용하려면 문서에 <form method="POST" ...>을 생성하기 만하면됩니다.

민감한 값 (예 : 사용자 ID)을 쿠키에 저장하면 $_REQUEST에 전혀 표시되지 않도록하는 것이 더 좋습니다. 쿠키의 내용은 내용이 아닌 추가 HTTP 요청 헤더에 제공되므로 일반적으로 기록의 일부로 저장되지 않습니다.

0

, 당신과 같이 당신의 HTML에 HTML 양식 태그를 사용해야합니다 GET 대신 POST를 사용하려면 :

제출
<form method="POST" action="/data.php"> 
    <input type="hidden" name="parameter" value="1234" /> 
    <button type="submit">Submit</button> 
</form> 

, 당신의 URL 그냥 /data.php 및 매개 변수 = 1234 것이다 것 귀하의 (숨겨진) 사후 버퍼에 있어야합니다.

의미가 있습니까?

0

POST를 수행하려면 양식 또는 일부 javascript/ajax 속임수를 사용해야합니다. <a>은 GET 요청 만 발생합니다.

POST 요청에는 여전히 URL에 쿼리 매개 변수가있을 수 있습니다. 그것들을 갖는 것은 "정상적인"것이 아니지만 허용됩니다. 가장 큰 차이점은 GET 요청 (쿠키 무시)에서 URL은 ONLY 매개 변수/데이터를 서버로 보내는 것입니다. POST를 사용하면 URL과 POST 요청의 본문을 둘 다 사용할 수 있습니다. POST 요청 양식은 POST 된 양식 데이터가 정상적으로 배치되는 곳입니다.

2

양식에 "POST"메서드를 사용하십시오. 난 그냥 URL

<form id="abc" name="abc" action="someaction.php" method="post"> 
    <input type="text" id="username" name="username"/> 
    <input type="password" id="password" name="password"/> 
    <input type="submit" id="submit" name="submit" value="submit"/> 
</form>