2017-12-20 20 views
4

AJAX呼び出しを行うフォームからデータを取得したい。私は私のPHPページで文字列としてデータを取得しています。文字列は、POST経由でPHPページへのajax呼び出しからJSONデータを取得

'fname'のようになります: 'abc'、 'lname': 'xyz'、 'email': ''、 'pass': ''、 'phone': ''、 'gender': ' 」、 '生年月日': '今、私は [ "FNAME"] => "ABC"、 [ "LNAME"] => "XYZ" のようになります。配列に、この文字列全体を変換したい

を'。 ...とそう

にAJAX呼び出しは、以下のようなものです:

fname = $("#form-fname").val(); 
lname = $("#form-lname").val(); 
email = $("#form-username").val(); 
pwd = $("#form-password").val(); 
phone = $("#form-phone").val(); 
gender = $("#form-gender").val(); 
dob = $("#form-dob").val(); 
var user = {"fname":fname,"lname":lname,"email":email,"pass":pwd,"phone":phone,"gender":gender,"dob":dob}; 
$.ajax({ 
     type: "POST", 
     url: "doRegistration.php", 
     data: user 
}) 
.done(function(msg) {       
     window.location.href = "../profile.php"; 
}) 
.fail(function(msg) { 
     sessionStorage.setItem("success","0"); 
     window.location.reload(); 
}); 

そして、ここでは私のPHPコードです

$content = file_get_contents("php://input"); 
file_put_contents("log1.txt",$content); //This produces the string I get above 

は今、私は

$dec = explode(",",$content); 
$dec1 = array(); 
for($i=0;$i<count($dec);$i++) 
{ 
    $dec1[i] = substr($dec[i],strpos($dec[i],":")); 
} 
//After this $dec1 is empty and count($dec1) gives 0. 

上記のように配列に文字列を変換しようとする。しかし、これは私に必要な配列を与えるものではありません。私はここでいくつかの答えをチェックしたが、私の問題は解決しない。私はGoogleにしようとしましたが、解決策は見つかりませんでした。コードに何か問題がありますか?親切に助けてください。前もって感謝します。

+0

[:]で$ dec値を分割し、その結果から[0]要素が関連付けられた配列キーで、[1]があなたのアソシエートされた配列値です。次に、最後に配列に関連付けられたjson_encode。 – Taplar

+0

@Taplar ':'を使用して分割すると、["fname"] - > "abc、lname"、["xyz、email"] - > "email"などのようになります... – CoolJavaProgrammer

+0

':'で$ contentを分割しないでください。各$ dec文字列を ":"で分割します。文字列全体は、カンマで区切られた名前の値のペアと、コロンで区切られた各名前の値のペアで構成されます。したがって、あなたはそれを解く必要があります。カンマは最も外側の区切り文字です。そして、コロンは、それぞれのトークンの内側のセパレータです。 – Taplar

答えて

4

引用符を変更し、中括弧を追加してください。そして、あなたはJSON上記のコードで

$string = "'fname':'abc','lname':'xyz','email':'','pass':'','phone':'','gender':'','dob':''"; 

print_r(json_decode('{' . str_replace("'", '"', $string) . '}', true)); 

結果

Array 
(
    [fname] => abc 
    [lname] => xyz 
    [email] => 
    [pass] => 
    [phone] => 
    [gender] => 
    [dob] => 
) 
+0

$ test = json_decode( '{'。str_replace( "'"、$ string)。'} '、true); $ testのタイプをgettype($ test )、私はそれをnullとして取得します – CoolJavaProgrammer

+0

https://eval.in/922962 - ソース文字列をチェックしてください私はあなたの質問から取ってきました – splash58

+0

あなたの解決策では、$ te = str_replace( '"' ""、$ string);文字列自体がその文字列を含んでいるためです。 "それらを削除した後、あなたのソリューションは正常に動作しました。ありがとうございました。 – CoolJavaProgrammer

0

を結果としてデコードすることができ、あなたは、配列のキーのためのループのインデックスを使用しています。あなたがアーカイブしようとしているなら(私はそれがJavaで辞書と呼ばれると信じています)。

<?php 
$string = "'fname':'abc','lname':'xyz','email':'','pass':'','phone':'','gender':'','dob':''"; 
$pieces=explode(',',$string); 
foreach($pieces as $array_format){ 
list($key,$value) = explode(':',$array_format); 
$array[$key]=$value; 
} 
+0

私はこれをやろうとしましたが、file_put_content( "file.txt"、$ array ["fname"])を実行しようとすると値が見えません。何か間違っていますか?私は "fname"が鍵であることを願っています – CoolJavaProgrammer

+0

ちょっと、$ string変数はfile_get_contentから得られるものでなければなりません。 これは上記のあなたのコードに本当に近いです。 $ pieces = explode( "、"、$ content); foreach($ pieces_formatとしての$個){ list($ key、$ value)= explode( ':'、$ array_format); $ array [$ key] = $ value; } – Dippy

関連する問題