मैं jQuery-serialized फॉर्म को PHP-unserialize कैसे करूँ?


160

का उपयोग करते हुए $('#form').serialize(), मैं इसे एक PHP पृष्ठ पर भेजने में सक्षम था। अब मैं इसे PHP में कैसे अनसुना करूँ? इसे jQuery में क्रमबद्ध किया गया था।


2
इन जैसे सवालों के लिए मैं फायरबग का उपयोग करके यह देखने की सलाह देता हूं कि सर्वर को किस प्रारूप में डेटा भेजा गया है। फिर आप आसानी से अपने डेटा का एक उदाहरण पोस्ट कर सकते हैं।
चिबॉर्ग

जवाबों:


65

आपको jquery serializeविधि से PHP में कुछ भी अनसुना नहीं करना चाहिए । यदि आप डेटा को क्रमबद्ध करते हैं, तो इसे पीएचपी को क्वेरी पैरामीटर के रूप में भेजा जाना चाहिए यदि आप एक पोस्ट विधि अजाक्स अनुरोध या पोस्ट संस्करण का उपयोग कर रहे हैं यदि आप एक पोस्ट अजाक्स अनुरोध का उपयोग कर रहे हैं। PHP में तो, आप की तरह मानों तक पहुंच जाएगा $_POST["varname"]या $_GET["varname"]अनुरोध प्रकार के आधार पर।

serializeविधि सिर्फ फार्म तत्वों लेता है और उन्हें स्ट्रिंग के रूप में डालता है।"varname=val&var2=val2"


3
यह गलत है। आपको वास्तव में उस स्ट्रिंग को पार्स करने की आवश्यकता है जो serializeवापस आती है। नीचे वास्तव में लोकप्रिय जवाब देखें।
इसहाक लुबो

393

बशर्ते कि आपका सर्वर एक स्ट्रिंग प्राप्त कर रहा है जो कुछ इस तरह दिखता है (जो कि अगर आपको jQuery का उपयोग कर रहा है तो यह होना चाहिए serialize()):

"param1=someVal&param2=someOtherVal"

... ऐसा कुछ है जो शायद आप सभी की जरूरत है:

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

$paramsतब एक सरणी होनी चाहिए कि आप कैसे उम्मीद करेंगे। ध्यान दें कि यह काम HTML सरणियों के साथ भी है।

अधिक जानकारी के लिए निम्नलिखित देखें: http://www.php.net/manual/en/function.parse-str.php

आशा है कि सहायक होगा। सौभाग्य!


5
यह करने का सबसे अच्छा तरीका है। parse_str ($ _ REQUEST ['jquery_serialized_values'], $ आउटपुट); print_r ($ उत्पादन);
एंडी

2
यह विधि अन्य की तुलना में बेहतर है।
dartacus

3
जैसा कि उपयोगकर्ता ने स्वीकृत उत्तर दिया था, मैं मानता हूं कि यह सही उत्तर है। मैंने अपना उत्तर इस धारणा के आधार पर दिया कि अनुरोध को jQuery के ajax $ .get / पोस्ट विधियों (निश्चित रूप से मुझे जहां से मिला है) के माध्यम से भेजा जा रहा है जो कि मानक GET चर के रूप में क्रमबद्ध () फ़ंक्शन का आउटपुट भेजता है। इसलिए कोई स्ट्रिंग पार्सिंग की आवश्यकता नहीं होगी। उदाहरण: $ .get ('ajax.php', $) ('फॉर्म')। serialize (), फ़ंक्शन () {});
क्रिस गुटिरेज

1
यह एक और केवल स्वीकार्य उत्तर है !! बाकी जवाब बहुत कुछ है ...
Mr.TK

1
इसका उत्तर होना चाहिए। चूंकि सर्वर 1000 से अधिक इनपुट मानों को स्वीकार नहीं कर सकता है, मुझे वैसे भी उन्हें भेजने का एक तरीका चाहिए था। इसलिए मैंने फॉर्म को क्रमबद्ध किया और डेटा को एक मूल्य के रूप में भेजा। इस जवाब के साथ, मैं ऐसा करने में सक्षम था। धन्यवाद @chrisallenlane
websupporter

51

// jQuery पोस्ट

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

// jquery.post क्रमबद्ध var - TO - PHP Array प्रारूप

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

// आपको इसमें से कोई भी समान मिलता है

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

यही तो मैं खोज रहा था!
जेपर बर्नार्डिनो


10

में एचटीएमएल पेज:

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

पर पीएचपी पेज:

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

इस php कोड पर, रिटर्न f1फील्ड।


5

साहचर्य सरणी का उपयोग क्यों न करें, ताकि आप इसे आसानी से उपयोग कर सकें

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

    return $returndata;
}

सादर


4
मैं $i = 0;
थिएलिश


5

सीधे शब्दों में यह कर

$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

मैं नहीं जानता कि आप कौन से Jquery के संस्करण का उपयोग कर रहे हैं, लेकिन यह मेरे लिए jquery 1.3 में काम करता है:

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

तब आप POST सरणी कुंजियों तक पहुँच सकते हैं जैसा कि आप सामान्य रूप से php में करते हैं। बस एक के साथ प्रयास करेंprint_r()

मुझे लगता है कि आप किसी ऑब्जेक्ट की संपत्ति में क्रमबद्ध फॉर्म वैल्यू को लपेट रहे हैं, जो कि मुझे पता है कि बेकार है।

उम्मीद है की यह मदद करेगा!


1

यह user1256561 के उत्तर में है। आपके विचार के लिए धन्यवाद .. हालाँकि मैंने step3 में उल्लिखित url डीकोड सामान का ध्यान नहीं रखा है।

तो यहाँ php कोड है जो क्रमबद्ध रूप डेटा को डिकोड करेगा, अगर किसी और को इसकी आवश्यकता है। वैसे, इस कोड का उपयोग अपने विवेक से करें।

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 पोस्ट डेटा इनपुट इस प्रकार होगा: विशेषता 1 = मान 1 और गुण 2 = मान 2 और गुण 3 = मान 3 और इतने पर

उपरोक्त कोड का आउटपुट अभी भी एक एरे में होगा और आप इसे संशोधित करके किसी भी वैरिएबल को दे सकते हैं जिसे आप चाहते हैं और यह इस बात पर निर्भर करता है कि आप इस डेटा का आगे कैसे उपयोग करना चाहते हैं।

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

1

आपको केवल फॉर्म में मूल्य विशेषता नाम की आवश्यकता है। उदाहरण :

प्रपत्र

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

जावास्क्रिप्ट

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


0

मुझे लगता है कि आपको प्रपत्र नामों को इसके मूल्यों से अलग करने की आवश्यकता है, ऐसा करने के लिए एक तरीका यह है (&)कि आप विस्फोट करेंगे attribute=value,attribute2=value

मेरा कहना यह है कि आप PHP में क्रमबद्ध jQuery स्ट्रिंग को सरणियों में बदल देंगे।

यहां वह चरण दिए गए हैं जिनका आपको अधिक विशिष्ट होना चाहिए।

  1. jQueryएक PHPपृष्ठ (जैसे ajax.php) पर अनुक्रमित पर उत्तीर्ण जहां आप $.ajaxपोस्ट का उपयोग कर सबमिट करने या प्राप्त करने के लिए उपयोग करते हैं।
  2. अपने php पृष्ठ से, विस्फोट करें (&) प्रकार प्रत्येक गुण को अलग करते हुए । अब आपको attribute1 = value, attribute2 = value मिलेगा, अब आपको php array वैरिएबल मिलेगा। जैसे$data = array("attribute1=value","attribute2=value")
  3. एक ऐसा foreachकरें $dataऔर explodeकरें (=)ताकि आप विशेषता को मूल्य से अलग कर सकें, और मूल्य के लिए सुनिश्चित हो urldecode ताकि यह क्रमबद्ध मानों को आपके द्वारा आवश्यक मान में परिवर्तित कर दे, और विशेषता और उसके मूल्य को एक नए सरणी चर में सम्मिलित करें, जो विशेषता और क्रमबद्ध स्ट्रिंग के मूल्य को संग्रहीत करता है।

यदि आपको अधिक स्पष्टीकरण की आवश्यकता है, तो मुझे बताएं।


0

आप इस फ़ंक्शन का उपयोग कर सकते हैं:

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

इसे कैसे उपयोग करे

$_POST['serialized_data'] = 'var1=1&var2=2&var3=3';
post_unserialize( 'serialized_data' );
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.