আমি কীভাবে একটি jQuery- সিরিয়ালাইজড ফর্ম পিএইচপি-আনসিরিয়ালাইজ করব?


160

ব্যবহার করে $('#form').serialize(), আমি এটি পিএইচপি পৃষ্ঠায় প্রেরণ করতে সক্ষম হয়েছি। এখন আমি কীভাবে এটি পিএইচপি-তে আনসিরিয়ালাইজ করব? এটি জিকিউরিয়ায় সিরিয়ালযুক্ত হয়েছিল।


2
এই জাতীয় প্রশ্নের জন্য আমি ফর্মব্যাগ ব্যবহার করার পরামর্শ দিচ্ছি সার্ভারে কোন ফর্ম্যাটে কোন ডেটা প্রেরণ করা হয়েছে তা দেখার জন্য। তারপরে আপনি সহজেই আপনার ডেটার উদাহরণ পোস্ট করতে পারেন।
chiborg

উত্তর:


65

Jquery serializeপদ্ধতি থেকে আপনাকে পিএইচপি-তে কোনও কিছুর আনসিরিয়ালাইজ করা উচিত নয় । আপনি যদি ডেটাটিকে সিরিয়ালাইজ করে থাকেন তবে আপনি যদি কোনও জিইটি পদ্ধতি এজ্যাক্স অনুরোধ ব্যবহার করছেন বা যদি আপনি কোনও পোষ্ট এজ্যাক্স অনুরোধ ব্যবহার করছেন তবে কোয়েরি প্যারামিটার হিসাবে পিএইচপিকে পাঠানো উচিত। পিএইচপি সুতরাং, আপনি মত মান অ্যাক্সেস হবে $_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তারপরে এমন একটি অ্যারে মডেল হওয়া উচিত যা আপনি কীভাবে আশা করতে পারেন। নোট করুন এটি এইচটিএমএল অ্যারেতেও কাজ করে।

আরও তথ্যের জন্য নিম্নলিখিতটি দেখুন: http://www.php.net/manual/en/function.parse-str.php

আশা করি এটি সহায়ক। শুভকামনা!


5
এটি করার সেরা উপায় parse_str ($ _ REQUEST ['jquery_serialized_values'], $ আউটপুট); print_r ($ আউটপুট);
অ্যান্ডি

2
এই পদ্ধতিটি অন্যের চেয়ে অনেক ভাল।
ডার্টাকাস

3
ব্যবহারকারী যে গ্রহণযোগ্য উত্তর দিয়েছেন, আমি সম্মত হই যে এটিই সঠিক উত্তর। আমি জকিউরি আজ্যাক্স get .get / পোস্ট পদ্ধতিগুলির মাধ্যমে (নিশ্চিত হয়েছি না যে আমি কোথা থেকে পেয়েছি) এর মাধ্যমে অনুরোধটি প্রেরণ করা হচ্ছে যা সিরিয়ালাইজ () ফাংশনটির মান GET ভেরিয়েবল হিসাবে প্রেরণ করে। সুতরাং কোনও স্ট্রিং পার্সিংয়ের প্রয়োজন হবে না। যেমন: get .get ('ajax.php', $ ('form')। সিরিয়ালাইজ (), ফাংশন () {});
ক্রিস গুটিয়েরেজ

1
এটি একটি এবং একমাত্র গ্রহণযোগ্য উত্তর !! বাকি উত্তরগুলি অতিরিক্ত জিনিসগুলি ...
মিঃ টি কে

1
এই উত্তর হওয়া উচিত। যেহেতু সার্ভারটি 1000 টিরও বেশি ইনপুট মান গ্রহণ করতে পারে না, তাই যাইহোক সেগুলি পাঠানোর জন্য আমার একটি উপায়ের প্রয়োজন ছিল। তাই আমি ফর্মটি সিরিয়ালাইজ করেছি এবং ডেটাটি একটি মান হিসাবে প্রেরণ করেছি। এই উত্তর দিয়ে, আমি এটি করতে সক্ষম হয়েছিল। ধন্যবাদ @ chrisallenlane
ওয়েবসপোর্টার

51

// jQuery পোস্ট

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

// jquery.post সিরিয়ালযুক্ত ভার - টু - পিএইচপি অ্যারে ফর্ম্যাট

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

এই পিএইচপি কোড, রিটার্ন 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);
  }
});

তারপরে আপনি পিপিএসটি অ্যারে কীগুলি অ্যাক্সেস করতে পারেন যেমন আপনি সাধারণত পিএইচপি করতে পারেন। শুধু একটি দিয়ে চেষ্টা করুন print_r()

আমি মনে করি আপনি কোনও বস্তুর সম্পত্তিতে সিরিয়ালযুক্ত ফর্মের মানটি মুড়িয়ে দিচ্ছেন, যা আমার জানা হিসাবে অব্যর্থ।

আশাকরি এটা সাহায্য করবে!


1

এটি ব্যবহারকারী 1256561 এর জবাবে। আপনার ধারণার জন্য ধন্যবাদ .. তবে আমি স্টিপি 3-তে উল্লিখিত ইউআরএল ডিকোড জিনিসগুলির যত্ন নিই নি।

সুতরাং এখানে পিএইচপি কোডটি সিরিয়ালযুক্ত ফর্ম ডেটা ডিকোড করবে, অন্য কারও যদি এটির প্রয়োজন হয়। যাইহোক, নিজের বিবেচনার ভিত্তিতে এই কোডটি ব্যবহার করুন।

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

ইউআরএল পোস্টের ডেটা ইনপুটটি এরকম হবে: অ্যাট্রিবিউট 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);
  })
}

পিএইচপি - 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

এখানে আমার বক্তব্যটি হল যে আপনি সিরিয়ালযুক্ত jQuery স্ট্রিংটিকে পিএইচপি-তে অ্যারে রূপান্তর করবেন।

আপনার আরও নির্দিষ্ট হওয়ার জন্য যে পদক্ষেপগুলি অনুসরণ করা উচিত তা এখানে।

  1. সিরিয়ালযুক্ত jQueryএমন একটি PHPপৃষ্ঠায় পাস হয়েছে (উদাঃ ajax.php) যেখানে আপনি $.ajaxপোস্ট ব্যবহার করে জমা দিতে বা পেতে ব্যবহার করেন।
  2. আপনার পিএইচপি পৃষ্ঠা থেকে, (&)প্রতিটি বৈশিষ্ট্য পৃথক করে এভাবে বিস্ফোরিত করুন । এখন আপনি বৈশিষ্ট্য 1 = মান, গুণ 2 = মান পাবেন, এখন আপনি একটি পিএইচপি অ্যারে ভেরিয়েবল পাবেন। যেমন$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' );
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.