2017-10-22 1 views
0

다음 코드는 정상적으로 작동합니다. 하지만 GET 대신 POST 메서드를 사용하는 것을 선호합니다. 그렇게 할 방법이 있다면?PHP에서 GET 대신 POST를 사용하여 하이퍼 링크에서 데이터를 검색하는 방법은 무엇입니까?

<?php 
$lang=$_GET['lang']; 
$langArray=array('en','ar','ch'); 
$found=false; 
if(in_array($lang,$langArray)) 
$found=true; 
if(!$found) 
$lang='en'; 

$xml=simplexml_load_file("languages.xml") or die("xml not found!"); 
$title=$xml->title->$lang; 
$text=$xml->text->$lang; 
?> 

<h1><?php echo $title ?></h1> 
<div><?php echo $text ?></div> 
<div style="margin-top:50px;"> 

Languages: 

<a href="?lang=en">English</a> 
<a href="?lang=ar">Arabic</a> 
<a href="?lang=ch">Chinese</a> 
+1

왜 당신이 할 것 _POST 방법보다 너무 빨리입니까? 그리고'$ _GET'을'$ _POST'로 바꾸면됩니다. – SourceOverflow

+0

아니요, 작동하지 않습니다. – Shko

+2

그래야합니다. 실제로 요청을받는 대신 게시물 요청을 보내시겠습니까? 분명히 변수 만 변경하지만 요청은 작동하지 않습니다. – SourceOverflow

답변

0

으로는 $_POST은 일반적으로 당신이 콘텐츠를 게시 유지하는 경우 재미 행동 할 수있는 브라우저를 원인으로 즉,이 문제에 아주 좋은 솔루션이나 우아한 해결책이 아니라, 아래의 댓글을 달았습니다. 웹 사이트 기간로드가 중단 될 수도 있습니다. 따라서 $_GET은 정상적으로 처리되어야합니다 ... URL을 암호화 할 수 있습니다. 따라서 누군가가보고있는 경우 연결 대상을 인식하지 못할 수 있습니다.

예, 아니요 ... 적어도 당신이하려는 것으로 생각하는 의미에서, 나는 틀릴 수도 있습니다. 그것은 당신이하고있는 어떤의 구조를 변경한다 PHP에 따라 폼을 통해 제출 당신이 $_POST을 사용 :

$_POST :

를 통해 현재 스크립트에 전달되는 변수의 연관 배열 요청에서 HTTP Content-Type으로 application/x-www-form-urlencoded 또는 multipart/form-data를 사용할 때 HTTP POST 메소드.

그래서 당신은 이론적으로 lang 값으로 양식을 제출하고에서

$lang=$_GET['lang']; 

에 변경 될 수 있습니다 : 설치

$lang=$_POST['lang']; 

그래서 대신 가진 단순 링크하는있는 형태 버튼 또는 드롭 다운 :

<form id="web_lang" method="post"> 
    <button name="lang" value="en">English</button> 
    <button name="lang" value="ar">Arabic</button> 
    <button name="lang" value="ch">Chinese</button> 
</form> 

참고 :$_GET 또는 $_POST 필터링되지 않은 사용하지 마십시오는 그 사용자의 입력입니다, 당신은 결코 신뢰 사용자 입력, 그들은 악성 코드를 통과하고 당신의 웹 사이트에 심각한 해를 할 수 있습니다.

<form method=POST id=f1> 
<input name=hidden value=whatever> 
</form> 
<a href='#' onclick='document.getElementById("f1").submit()' />clickme</a> 

다른 사람이하는 것입니다 :

+2

나는 이런 식으로 게시물을 전환하여 비우호적 인 사용자 경험을 가져오고 있기 때문에이 일을 반대한다고 주장하고 싶습니다. 게시물을 사용할 때 브라우저의 앞으로/뒤로/새로 고침 기능을 사용하면 "양식 데이터를 다시 보내시겠습니까?"라는 질문에 답답합니다. 또는 그 효과를 나타내는 단어. – Scoots

+0

나는 동의한다. 그러나 나는 그에게 그것을 그렇게하는 것이 가능하다는 것을 보여주고 있었다. @Scoots – Samuel

+0

하나의 언어에서 다른 언어로 전환하기 위해이 하이퍼 링크를 보내거나 보내지 않으려 고합니다. – Shko

0
<?php 
    $lang=$_POST['lang']; 
    $langArray=array('en','ar','ch'); 
    $found=false; 
    if(in_array($lang,$langArray)) 
    $found=true; 
    if(!$found) 
    $lang='en'; 

    $xml=simplexml_load_file("languages.xml") or die("xml not found!"); 
    $title=$xml->title->$lang; 
    $text=$xml->text->$lang; 
    ?> 

    <h1><?php echo $title ?></h1> 
    <div><?php echo $text ?></div> 
    <div style="margin-top:50px;"> 

    Languages: 

<form method="post" action=""> 
    <select name="lang"> 

     <option VALUE=""> choose language </option> 
     <option VALUE="en"> English</option> 
     <option VALUE="ar"> Arabic</option> 
     <option VALUE="ch"> Chinese</option> 
    </select> 
<INPUT TYPE="submit" name="submit" /> 

+1

이 방법을 사용할 수는 있지만 양식을 제출하고 싶지는 않습니다. – Shko

+1

양식을 제출하고 싶지는 않지만 POST를 사용하고 싶습니다 ... 어디서 왔습니까? – Sayonara

1

만들기 링크가 POST 요청은 두 가지 방법으로 수행 할 수 있습니다 수행 한이 같은 링크가 양식을 보낼 수 있도록하는 것입니다 js 링크는 XMLHttpRequest 또는 새로운 js fetch() API를 보내 데이터를 보냅니다.

이 접근법의 유용성 단점은 사람들이 링크를 공유하거나 새 탭에서 열 수 없다는 것입니다. 이는 일반적입니다.

링크를 링크로, 양식을 양식으로합시다. 당신이 HTTPS를 사용하지 않는 경우의 보안 측면으로 당

, 모두 GETPOST이 안전하지, GET가 멱등 할 가정 및 POST 더 유용성을 감소, 브라우저 새로 고침에 재확인을 필요로하는 기억한다.

0

피상적으로 OP 코드에서 "$ _GET"을 "$ _POST"로 변경해야하는 것처럼 보일 수도 있지만, 이런 종류의 변경은 거의 쉽지 않습니다.

POST 메소드를 통한 제출 양식을 작성하거나 HTTP POST 요청을 작성해야합니다. 이전을 선택하면 링크가 양식을 포함하는 웹 페이지를 참조합니다. 나중에 선택하면 링크가 fsockopen() 또는 컬을 사용하는 PHP 스크립트를 참조하게됩니다. 여기에()는 fsockopen으로 역학을 보여 Tamlyn에 의해 제공이 discussion에서 몇 가지 예제 코드는 다음과 같습니다

<?php 

$fp = fsockopen('example.com', 80); 

$vars = array(
    'hello' => 'world' 
); 
$content = http_build_query($vars); 

fwrite($fp, "POST /reposter.php HTTP/1.1\r\n"); 
fwrite($fp, "Host: example.com\r\n"); 
fwrite($fp, "Content-Type: application/x-www-form-urlencoded\r\n"); 
fwrite($fp, "Content-Length: ".strlen($content)."\r\n"); 
fwrite($fp, "Connection: close\r\n"); 
fwrite($fp, "\r\n"); 

fwrite($fp, $content); 

header('Content-type: text/plain'); 
while (!feof($fp)) { 
    echo fgets($fp, 1024); 
} 

주, 당신은 HTTP POST 요청을 만들기 위해 키 - 값 쌍의 배열에 데이터를 준비해야합니다. 또는 AJAX를 사용하는 것이 더 쉽습니다. 이 example을 참조하십시오. 당신이, 내가 _GET 방법을 계속 사용 제안하지 센 시브 URL 또한 데이터를 암호화 할 수 있기 때문에

0

, 그것은

관련 문제