source

HTML 양식 숨김 요소를 사용하여 배열 전달

manysource 2022. 11. 5. 17:37

HTML 양식 숨김 요소를 사용하여 배열 전달

숨겨진 필드에 배열을 게시하려고 하는데 PHP로 폼을 제출한 후 해당 배열을 가져오고 싶습니다.

$postvalue = array("a", "b", "c");
<input type="hidden" name="result" value="<?php echo $postvalue; ?>">

하지만 게시된 값을 출력한 후 배열 문자열만 받습니다.그럼 어떻게 해결할까요?

용도:

$postvalue = array("a", "b", "c");
foreach($postvalue as $value)
{
    echo '<input type="hidden" name="result[]" value="'. $value. '">';
}

그리고 당신은 얻을 것이다.$_POST['result']배열로서

print_r($_POST['result']);

여기에는 주로 두 가지 방법이 있습니다.

  1. 다음과 같은 방법으로 데이터를 직렬화합니다.

    $postvalue = serialize($array); // Client side
    
    $array = unserialize($_POST['result']; // Server side
    

다음에, 투고된 값의 시리얼화를 해제할 수 있습니다.unserialize($postvalue)자세한 내용은 PHP 매뉴얼을 참조하십시오.

Alternalley를 사용할 수 있습니다.json_encode()그리고.json_decode()JSON 형식의 시리얼 스트링을 취득하기 위한 함수입니다.전송되는 데이터를 축소할 수도 있습니다.gzcompress()(이것은 퍼포먼스를 중시하는 것에 주의해 주세요).또, 송신된 데이터의 시큐러티를base64_encode()(8비트 이외의 클린 트랜스포트 레이어에서 데이터를 존속시키기 위해)다음과 같은 경우가 있습니다.

    $postvalue = base64_encode(json_encode($array)); // Client side

    $array = json_decode(base64_decode($_POST['result'])); // Server side

데이터를 시리얼화하는 권장되지 않는 방법(단, 퍼포먼스는 매우 낮음)은implode()지정된 문자로 구분된 모든 값을 포함하는 문자열을 가져오려면 이 명령을 사용합니다.서버측에서는, 다음의 방법으로 어레이를 취득할 수 있습니다.explode()단, 배열 값에서 발생하는 구분(또는 이스케이프)에 문자를 사용하지 않아야 하며 이 방법으로는 배열 키를 전송할 수 없습니다.

  1. 특수 이름 있는 입력 요소의 속성을 사용합니다.

    $postvalue = "";
    foreach ($array as $v) {
      $postvalue .= '<input type="hidden" name="result[]" value="' .$v. '" />';
    }
    

    이와 같이 어레이 전체를$_POST['result']변수(폼이 전송되는 경우)어레이 키는 전송되지 않습니다.단, 다음과 같이 할 수 있습니다.result[$key]각 필드의 이름으로 지정합니다.

이 모든 방법들은 그들만의 장점과 단점을 가지고 있다.사용하는 것은 주로 어레이의 크기에 따라 달라집니다.이러한 모든 방법으로 최소한의 데이터 전송을 시도해야 하기 때문입니다.

또 다른 방법은 어레이를 클라이언트 측에서 전송하는 것이 아니라 서버 측 세션에 저장하는 것입니다.이와 같이 어레이에 액세스 할 수 있습니다.$_SESSION폼을 통해 아무것도 전송할 필요가 없습니다.를 위해 php.net 세션의 기본 사용 예를 참조하십시오.

클라이언트 측에서 serialize 및 base64_encode를 사용할 수 있습니다.그런 다음 서버 측에서 unserialize 및 base64_decode를 사용합니다.

예를 들어 다음과 같습니다.

클라이언트측에서는, 다음을 사용합니다.

    $postvalue = array("a", "b", "c");
    $postvalue = base64_encode(serialize($array));

   // Your form hidden input
   <input type="hidden" name="result" value="<?php echo $postvalue; ?>">

서버측에서 다음을 사용합니다.

    $postvalue = unserialize(base64_decode($_POST['result']));
    print_r($postvalue) // Your desired array data will be printed here

시리얼화 중 하나:

$postvalue=array("a","b","c");
<input type="hidden" name="result" value="<?php echo serialize($postvalue); ?>">

: "Discrivate unserialize($_POST['result'])

또는 삽입:

$postvalue=array("a","b","c");
<input type="hidden" name="result" value="<?php echo implode(',', $postvalue); ?>">

" " "explode(',', $_POST['result'])

배열을 게시하려면 다른 표기법을 사용해야 합니다.

foreach ($postvalue as $value){
<input type="hidden" name="result[]" value="$value.">
}

result [ ]라는 이름의 요.게시되었을 때, 「 」는 「 」의 3개의 필드입니다.$_POST['result'].

<input type="hidden" name="item[]" value="[anyvalue]">

반복 모드일 경우 이 요소를 배열 형식으로 게시하고

print_r($_POST['item'])

항목을 검색하려면

먼저 JSON 문자열로 인코딩하고 다음으로 Base64로 인코딩하는 것이 좋습니다.예를 들어 서버 측에서 먼저 base64_decode 함수를 사용하고 다음으로 json_decode 함수를 사용합니다.그러면 PHP 어레이를 복원할 수 있습니다.

다음과 같이 할 수 있습니다.

<input type="hidden" name="result" value="<?php foreach($postvalue as $value) echo $postvalue.","; ?>">

언급URL : https://stackoverflow.com/questions/6547209/passing-an-array-using-an-html-form-hidden-element