Bagaimana cara PHP-unserialize formulir jQuery-serial?

160

Dengan menggunakan $('#form').serialize(), saya bisa mengirimkan ini ke halaman PHP. Sekarang bagaimana cara saya unserialize di PHP? Itu serial di jQuery.

Gene Bean
sumber
2
Untuk pertanyaan seperti ini saya sarankan menggunakan Firebug untuk melihat data apa dalam format apa yang dikirim ke server. Anda kemudian dapat dengan mudah memposting contoh data Anda.
chiborg

Jawaban:

65

Anda tidak harus membatalkan pengunaan apa pun dalam PHP dari serializemetode jquery . Jika Anda membuat serial data, itu harus dikirim ke PHP sebagai parameter kueri jika Anda menggunakan metode GET permintaan ajax atau memposting vars jika Anda menggunakan permintaan ajax POST. Jadi dalam PHP, Anda akan mengakses nilai suka $_POST["varname"]atau $_GET["varname"]tergantung pada jenis permintaan.

The serializeMetode hanya membutuhkan unsur-unsur bentuk dan menempatkan mereka dalam bentuk string."varname=val&var2=val2"

Chris Gutierrez
sumber
3
Ini salah. Anda memang perlu mengurai string yang serializekembali. Lihat jawaban yang sangat populer di bawah ini.
Isaac Lubow
393

Asalkan server Anda menerima string yang terlihat seperti ini (yang seharusnya jika Anda menggunakan jQuery serialize()):

"param1=someVal&param2=someOtherVal"

... sesuatu seperti ini mungkin yang Anda butuhkan:

$params = array();
parse_str($_GET, $params);

$paramsseharusnya array yang dimodelkan seperti yang Anda harapkan. Perhatikan ini berfungsi juga dengan array HTML.

Lihat yang berikut untuk informasi lebih lanjut: http://www.php.net/manual/en/function.parse-str.php

Semoga bermanfaat. Semoga berhasil!

Chris Allen Lane
sumber
5
Itu cara terbaik untuk melakukannya. parse_str ($ _ REQUEST ['jquery_serialized_values'], $ output); print_r ($ output);
Andy
2
Metode ini JAUH lebih baik daripada yang lain.
dartacus
3
Sebagai pengguna yang memberikan jawaban yang diterima, saya setuju bahwa INI adalah jawaban yang benar. Saya memberikan jawaban saya berdasarkan asumsi bahwa permintaan sedang dikirim melalui metode jQuery ajax $ .get / post (tidak yakin dari mana saya mendapatkannya) yang mengirimkan output dari fungsi serialize () sebagai variabel standar GET. jadi tidak perlu string parsing. misal: $ .get ('ajax.php', $ ('form'). serialize (), function () {});
Chris Gutierrez
1
Ini adalah satu-satunya jawaban yang dapat diterima !! Sisa dari jawabannya adalah hal-hal berlebihan ...
Mr.TK
1
Ini seharusnya jawabannya. Karena server mungkin tidak menerima lebih dari 1000 nilai input, saya tetap memerlukan cara untuk mengirimnya. Jadi saya membuat serial formulir dan mengirimkan data sebagai satu nilai. Dengan jawaban ini, saya bisa melakukannya. Terima kasih @chrisallenlane
websupporter
51

// jQuery Post

var arraydata = $('.selector').serialize();

// jquery.post serialized var - TO - PHP Array format

parse_str($_POST[arraydata], $searcharray);
print_r($searcharray); // Only for print array

// Kamu mendapatkan hal yang sama

 Array (
 [A] => 1
 [B] => 2
 [C] => 3
 [D] => 4
 [E] => 5
 [F] => 6
 [G] => 7
 [H] => 8
 )
Aridane
sumber
Itulah tepatnya yang saya cari!
Jepser Bernardino
17
parse_str($_POST['whatever'], $searcharray);
danidacar
sumber
10

Di halaman HTML :

<script>
function insert_tag()
{
    $.ajax({
        url: "aaa.php",
        type: "POST",
        data: {
            ssd: "yes",
            data: $("#form_insert").serialize()
        },
        dataType: "JSON",
        success: function (jsonStr) {
            $("#result1").html(jsonStr['back_message']);
        }
    });
}
</script>

<form id="form_insert">
    <input type="text" name="f1" value="a"/>
    <input type="text" name="f2" value="b"/>
    <input type="text" name="f3" value="c"/>
    <input type="text" name="f4" value="d"/>
    <div onclick="insert_tag();"><b>OK</b></div>
    <div id="result1">...</div>
</form>

di halaman PHP :

<?php
if(isset($_POST['data']))
{
    parse_str($_POST['data'], $searcharray);
    $data = array(
        "back_message"   => $searcharray['f1']
    );
    echo json_encode($data);
}
?>

pada kode php ini, kembalikan f1bidang.

mghhgm
sumber
5

Mengapa tidak menggunakan array asosiatif, sehingga Anda dapat menggunakannya dengan mudah

function unserializeForm($str) {
    $returndata = array();
    $strArray = explode("&", $str);
    $i = 0;
    foreach ($strArray as $item) {
        $array = explode("=", $item);
        $returndata[$array[0]] = $array[1];
    }

    return $returndata;
}

Salam

Murtaza Khursheed Hussain
sumber
4
Saya tidak mengerti$i = 0;
Thielicious
5

Jawaban Murtaza Hussain yang dimodifikasi :

function unserializeForm($str) {
    $strArray = explode("&", $str);
    foreach($strArray as $item) {
        $array = explode("=", $item);
        $returndata[] = $array;
    }
    return $returndata;
}
Tomasz Majerski
sumber
5

Cukup lakukan ini

$get = explode('&', $_POST['seri']); // explode with and

foreach ($get as $key => $value) {
    $need[substr($value, 0 , strpos($value, '='))] =  substr(
        $value, 
        strpos( $value, '=' ) + 1 
    );
}

// access your query param name=ddd&email=aaaaa&username=wwwww&password=wwww&password=eeee
var_dump($need['name']);
Omid Akhavan
sumber
1

Saya tidak tahu versi Jquery yang Anda gunakan, tetapi ini berfungsi untuk saya di jquery 1.3:

$.ajax({
    type: 'POST', 
    url: your url,
    data: $('#'+form_id).serialize(), 
    success: function(data) {
        $('#debug').html(data);
  }
});

Kemudian Anda dapat mengakses kunci array POST seperti yang biasa Anda lakukan di php. Coba saja dengan aprint_r() .

Saya pikir Anda membungkus nilai formulir serial di properti objek, yang tidak berguna sejauh yang saya tahu.

Semoga ini membantu!

enam jari
sumber
1

Ini sebagai balasan untuk user1256561. Terima kasih atas ide Anda .. namun saya belum mengurus url decode hal-hal yang disebutkan dalam langkah3.

jadi di sini adalah kode php yang akan men-decode data formulir berseri, jika orang lain membutuhkannya. Omong-omong, gunakan kode ini atas kebijakan Anda sendiri.

function xyz($strfromAjaxPOST)
{
    $array = "";
    $returndata = "";
    $strArray = explode("&", $strfromPOST);
    $i = 0;
    foreach ($strArray as $str)
    {
        $array = explode("=", $str);
        $returndata[$i] = $array[0];
        $i = $i + 1;
        $returndata[$i] = $array[1];
        $i = $i + 1;
    }
    print_r($returndata);
}

Input data postingan url akan seperti: atribut1 = value1 & attribute2 = value2 & attribute3 = value3 dan seterusnya

Output dari kode di atas masih akan berada dalam array dan Anda dapat memodifikasinya untuk membuatnya ditugaskan ke variabel apa pun yang Anda inginkan dan itu tergantung pada bagaimana Anda ingin menggunakan data ini lebih lanjut.

Array
(
    [0] => attribute1
    [1] => value1
    [2] => attribute2
    [3] => value2
    [4] => attribute3
    [5] => value3
)
jbz
sumber
1

Anda hanya perlu nama atribut nilai dalam bentuk. Contoh:

Bentuk

<form id="login_form">
    <input type="text" name="username" id="a"/>
    <input type="password" name="password" id="b"/>
    <button type="button" onclick="login()">Submit</button>
</form>

Javascript

$(document).ready(function(){});
function login(){
  var obj = $('#login_form').serialize();
  $.post('index.php', obj, function(res){
    alert(res);
  })
}

PHP - index.php

<?php
if(!empty($POST['username']) && !empty($POST['password'])){
  $user = $POST['username'];
  $pass = $POST['password'];
  $res = "Username : ".$user." || Password : ".$pass;
  return $res;
}
?>
Script Lagan
sumber
1

Menggunakan:

$( '#form' ).serializeArray();

Dapatkan array, jangan perlu unserialize;)

Varga Zoli
sumber
0

Saya pikir Anda perlu memisahkan nama formulir dari nilainya, salah satu metode untuk melakukan ini adalah dengan meledak (&)sehingga Anda akan mendapatkanattribute=value,attribute2=value .

Maksud saya di sini adalah bahwa Anda akan mengubah string jQuery berseri menjadi array di PHP.

Inilah langkah-langkah yang harus Anda ikuti agar lebih spesifik.

  1. Melewati serial jQueryke PHPhalaman (misalnya ajax.php) tempat Anda menggunakan$.ajax untuk mengirim menggunakan pos atau dapatkan.
  2. Dari halaman php Anda, meledak (&) sehingga memisahkan setiap atribut. Sekarang Anda akan mendapatkan atribut1 = nilai, atribut2 = nilai, sekarang Anda akan mendapatkan variabel array php. misalnya$data = array("attribute1=value","attribute2=value")
  3. Lakukan foreachpada $datadan explodeyang (=)sehingga Anda dapat memisahkan atribut dari nilai, dan pastikan untuk urldecode nilai sehingga akan mengkonversi nilai serial dengan nilai yang Anda butuhkan, dan masukkan atribut dan nilainya ke variabel array baru, yang menyimpan atribut dan nilai string serial.

Beri tahu saya jika Anda membutuhkan lebih banyak klarifikasi.

Jm Dollosa
sumber
0

Anda dapat menggunakan fungsi ini:

function post_unserialize( $key ){
  $post_data = array();
  $post_data = $_POST[ $key ];
  unset($_POST[ $key ]);
  parse_str($post_data, $post_data);
  $_POST = array_merge($_POST, $post_data);
}

Bagaimana cara menggunakannya

$_POST['serialized_data'] = 'var1=1&var2=2&var3=3';
post_unserialize( 'serialized_data' );
Niko
sumber