Bir jQuery serileştirilmiş formu nasıl PHP-serileştirmek nasıl?


160

Kullanarak $('#form').serialize(), bunu bir PHP sayfasına gönderebildim. Şimdi nasıl PHP seri haline nasıl? JQuery'de serileştirildi.


2
Bu gibi sorular için hangi formatta sunucuya hangi verilerin gönderildiğini görmek için Firebug kullanmanızı tavsiye ederim. Daha sonra verilerinizin bir örneğini kolayca gönderebilirsiniz.
chiborg

Yanıtlar:


65

PHP'de hiçbir şeyi jquery serializeyönteminden serileştirmek zorunda kalmamalısınız . Verileri serileştirirseniz, bir GET yöntemi ajax isteği kullanıyorsanız veya POST ajax isteği kullanıyorsanız post vars, sorgu parametreleri olarak PHP'ye gönderilmelidir. Böylece PHP'de, istek türüne bağlı olarak $_POST["varname"]veya buna $_GET["varname"]bağlı değerlere erişirsiniz .

serializeYöntem sadece form öğeleri alır ve dize biçiminde koyar."varname=val&var2=val2"


3
Bu yanlış. Gerçekten serializedönen dizeyi ayrıştırmanız gerekir . Aşağıdaki gerçekten popüler cevaba bakınız.
Isaac Lubow

393

Sunucunuzun şuna benzer bir dize alması koşuluyla (jQuery kullanıyorsanız gerekir serialize()):

"param1=someVal&param2=someOtherVal"

... böyle bir şey muhtemelen tek ihtiyacınız olan şey:

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

$paramsdaha sonra nasıl olacağını modellenmiş bir dizi olmalıdır. Bunun HTML dizileriyle de çalıştığını unutmayın.

Daha fazla bilgi için aşağıdakilere bakın: http://www.php.net/manual/en/function.parse-str.php

Umarım bu yardımcı olur. İyi şanslar!


5
Bunu yapmanın en iyi yolu bu. parse_str ($ _ REQUEST ['jquery_serialized_values'], $ çıktı); print_r ($ çıkış);
Andy

2
Bu yöntem diğerinden çok daha iyidir.
dartacus

3
Kabul edilen cevabı veren kullanıcı olarak, BU'nun doğru cevap olduğunu kabul ediyorum. Standart GET değişkenleri olarak serialize () işlevinin çıktısını gönderen istek jQuery ajax $ .get / post yöntemleri (nereden aldım emin değilim) yoluyla gönderildiği varsayımına dayanarak cevabımı verdim. dolayısıyla dize ayrıştırma işlemi gerekmez. örneğin: $ .get ('ajax.php', $ ('form'). serialize (), function () {});
Chris Gutierrez

1
Bu tek ve kabul edilebilir bir cevaptır !! Cevapların geri kalanı bazı şeyleri
abartıyor

1
Cevap bu olmalı. Sunucu 1000'den fazla giriş değerini kabul etmeyebileceğinden, bunları yine de göndermek için bir yola ihtiyacım vardı. Bu yüzden formu serileştirdim ve verileri tek bir değer olarak gönderdim. Bu cevapla bunu başardım. Teşekkürler @chrisallenlane
websupporter

51

// jQuery Postası

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

// jquery.post serileştirilmiş var - TO - PHP Dizi biçimi

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

// Bunlardan herhangi birini elde edersin

 Array (
 [A] => 1
 [B] => 2
 [C] => 3
 [D] => 4
 [E] => 5
 [F] => 6
 [G] => 7
 [H] => 8
 )

Tam da aradığım şey buydu!
Jepser Bernardino


10

In HTML sayfası:

<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>

üzerinde PHP sayfası:

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

Bu php kodunda, dönüş f1alanı.


5

Neden ilişkisel dizi kullanmıyorsunuz, böylece onu kolayca kullanabilirsiniz

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

    return $returndata;
}

Saygılarımızla


4
Ben senin alamadım$i = 0;
Thielicious

5

Modifiye Murtaza Hussain cevabı:

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

5

Sadece bunu yap

$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']);

1

Hangi Jquery sürümünü kullandığınızı bilmiyorum, ama bu benim için jquery 1.3 çalışır:

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

Ardından, normalde php'de yaptığınız gibi POST dizi anahtarlarına erişebilirsiniz. Sadece bir ile deneyin print_r().

Bence bildiğim kadarıyla işe yaramaz bir nesnenin özellik serileştirilmiş form değeri kaydırma.

Bu yardımcı olur umarım!


1

Bu user1256561 yanıtlıdır. Fikriniz için teşekkürler .. Ancak ben adım3'te belirtilen url kod çözme şeyler hallettim değil.

işte eğer başka birisinin ihtiyacı varsa, serileştirilmiş form verilerinin kodunu çözecek php kodu. Bu arada, bu kodu kendi takdirinize bağlı olarak kullanın.

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);
}

URL post veri girişi aşağıdaki gibi olacaktır: özellik1 = değer1 ve özellik2 = değer2 ve özellik3 = değer3 vb.

Yukarıdaki kodun çıktısı yine de bir dizide olacaktır ve istediğiniz herhangi bir değişkene atanmasını sağlamak için bu kodu değiştirebilirsiniz ve bu verileri nasıl daha fazla kullanmak istediğinize bağlıdır.

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

1

Formda değer özniteliği adına ihtiyacınız var. Misal :

Form

<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;
}
?>

1

kullanın:

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

Php dizi almak, serileştirmek gerekmez;)


0

Ben onun değerlerinden formu adlarını ayırmak gerektiğini düşünüyorum, bunu yapmanın bir yöntemi patlayabilir etmektir (&)sen alalım diye attribute=value,attribute2=value.

Demek istediğim, serileştirilmiş jQuery dizesini PHP'de dizilere dönüştürmeniz.

Daha spesifik olmak için izlemeniz gereken adımlar.

  1. Serileştirilmiş jQueryolarak posta veya get kullanarak göndermek için kullandığınız bir PHPsayfaya (ör. ajax.php) $.ajaxAktarılır.
  2. Php sayfanızdan, (&) böylece her nitelikleri ayıran . Şimdi attribute1 = değer, attribute2 = değer, şimdi bir php dizi değişkeni alacaksınız. Örneğin$data = array("attribute1=value","attribute2=value")
  3. Bir Do foreachüzerinde $datave böylece değerinden niteliğini ayırabilirsiniz olduğunu ve mutlaka ihtiyacınız olduğunu değere tefrika değerleri dönüştürmek ve niteliğini ve yeni bir dizi değişkene değerini, ekleyecektir böylece değerin hangi Serileştirilmiş dizenin özniteliğini ve değerini saklar.explode(=)urldecode

Daha fazla açıklamaya ihtiyacınız varsa bana bildirin.


0

Bu işlevi kullanabilirsiniz:

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);
}

Bu nasıl kullanılır

$_POST['serialized_data'] = 'var1=1&var2=2&var3=3';
post_unserialize( 'serialized_data' );
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.