表单插入序列化 php,我如何PHP反序列化jQuery序列化表单?

使用$('#form').serialize(),我能够将其发送到PHP页面。 现在如何在PHP中反序列化它? 它已在jQuery中序列化。

对于此类问题,我建议使用Firebug查看以何种格式将哪些数据发送到服务器。 然后,您可以轻松地发布数据示例。

前提是您的服务器接收的字符串看起来像这样(如果您使用的是jQuery serialize(),则应该这样):

"param1=someVal&param2=someOtherVal"

...大概是您所需要的:

$params = array();

parse_str($_GET, $params);

然后,$params应该是一个模拟您期望的数组。请注意,这也适用于HTML数组。

有关更多信息,请参见以下内容:

http://www.php.net/manual/zh/function.parse-str.php

希望对您有所帮助。祝好运!

那是最好的方法。 parse_str($ _ REQUEST [jquery_serialized_values],$ output); print_r($ output);

这个答案应该被接受,实际的是没有答案。

这种方法比其他方法好得多。

这是正确的答案,谢谢chrisallenlane。

辉煌的天使

作为给出接受答案的用户,我同意这是正确的答案。我给出的答案是基于这样的假设,即请求是通过jQuery ajax $ .get / post方法发送的(不确定我从哪里得到的),该方法的确将serialize()函数的输出作为标准GET变量发送。因此不需要字符串解析。例如:$ .get(ajax.php,$(form).serialize(),function(){});

这是一个也是唯一可以接受的答案!!剩下的答案是过分的事情。

这应该是答案。由于服务器可能不接受超过1000个输入值,因此无论如何我都需要一种发送它们的方法。因此,我对表格进行了序列化,并确实将数据作为一个值发送。有了这个答案,我就能做到。谢谢@chrisallenlane

这对我有很大帮助

如何遍历结果数组$params?

请注意,例如,如果您发送的是电子邮件字段,则该字段可能会被urlencode编码,例如@变为%40,因此在这种情况下,PHP parse_str应随附urldecode。

大!这是最好的答案。

根据官方文档:Warning Using this function without the result parameter is highly DISCOURAGED and DEPRECATED as of PHP 7.2. Dynamically setting variables in functions scope suffers from exactly same problems as register_globals. Read section on security of Using Register Globals explaining why it is dangerous.

非常感谢你!这是正确的答案。我能弄清楚我的东西。非常感谢

您无需从jquery serialize方法反序列化PHP中的任何内容。如果对数据进行序列化,则如果使用GET方法ajax请求,则应将其作为查询参数发送给PHP;如果使用POST ajax请求,则应将其作为vars发送。因此,在PHP中,您将根据请求类型访问诸如$_POST["varname"]或$_GET["varname"]之类的值。

serialize方法仅采用表单元素并将其放入字符串形式。 "varname=val&var2=val2"

"是"眨眼;)

这是不正确的。您确实确实需要解析serialize返回的字符串。请参阅下面真正流行的答案。

// jQuery Post

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

// jquery.post序列化var-TO-PHP数组格式

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

)

那正是我要寻找的!

parse_str($_POST['whatever'], $searcharray);

在HTML页面中:

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

}

});

}

OK

...

在PHP页面上:

if(isset($_POST['data']))

{

parse_str($_POST['data'], $searcharray);

$data = array(

"back_message"   => $searcharray['f1']

);

echo json_encode($data);

}

?>

在此php代码上,返回f1字段。

修改后的Murtaza Hussain答案:

function unserializeForm($str) {

$strArray = explode("&", $str);

foreach($strArray as $item) {

$array = explode("=", $item);

$returndata[] = $array;

}

return $returndata;

}

为什么不使用关联数组,那么您可以轻松使用它

function unserializeForm($str) {

$returndata = array();

$strArray = explode("&", $str);

$i = 0;

foreach ($strArray as $item) {

$array = explode("=", $item);

$returndata[$array[0]] = $array[1];

}

return $returndata;

}

问候

我不明白你的$i = 0;

只需这样做

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

您只需要表单中的值属性名称。范例:

形成

Submit

Java脚本

$(document).ready(function(){});

function login(){

var obj = $('#login_form').serialize();

$.post('index.php', obj, function(res){

alert(res);

})

}

PHP-index.php

if(!empty($POST['username']) && !empty($POST['password'])){

$user = $POST['username'];

$pass = $POST['password'];

$res ="Username :".$user." || Password :".$pass;

return $res;

}

?>

这是对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);

}

网址发布数据输入将类似于:attribute1 = value1&attribute2 = value2&attribute3 = value3,依此类推

上面代码的输出仍将保留在数组中,您可以对其进行修改以将其分配给所需的任何变量,这取决于您希望进一步使用此数据的方式。

Array

(

[0] => attribute1

[1] => value1

[2] => attribute2

[3] => value2

[4] => attribute3

[5] => value3

)

我不知道您使用的是哪个版本的Jquery,但这在jquery 1.3中对我有用:

$.ajax({

type: 'POST',

url: your url,

data: $('#'+form_id).serialize(),

success: function(data) {

$('#debug').html(data);

}

});

然后,您可以像在php中通常那样访问POST数组键。

只需尝试使用print_r()。

我认为您是将序列化表单值包装在对象的属性中,据我所知这是没有用的。

希望这可以帮助!

使用:

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

PHP获取数组,不需要反序列化;)

我认为您需要将表单名称与其值分开,执行此操作的一种方法是爆炸(&),以便获得attribute=value,attribute2=value。

我的意思是,您将把序列化的jQuery字符串转换为PHP中的数组。

这是您应该遵循的步骤,以更加具体。

传递序列化的jQuery到PHP页面(例如ajax.php)

您使用$.ajax通过post或get提交的位置。

从您的php页面中,将(&)展开,从而将每个

属性。现在,您将获得attribute1 = value,attribute2 = value,

您将获得一个php数组变量。例如$data =

array("attribute1=value","attribute2=value")

在$data和explode (=)上执行foreach

将属性与值分开,并确保urldecode

该值,以便它将序列化的值转换为该值

您需要的属性,并将属性及其值插入到新数组中

变量,用于存储序列化的属性和值

串。

让我知道是否需要更多说明。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值