2016-06-01 13 views
3

入力からActors.jsonローカルファイルにデータを追加しようとしています。ここでは、ファイル構造です:Ajax POSTを使用してPHPのJSONローカルファイルを保存する

<table> 
    <tr> 
     <td>Id:</td> 
     <td><input type="text" id="ID" /></td> 
    </tr> 
    <tr> 
     <td>First name:</td> 
     <td><input type="text" id="FirstName" /></td> 
    </tr> 
    <tr> 
     <td>Last name:</td> 
     <td><input type="text" id="LastName" /></td> 
    </tr> 
    <tr> 
     <td>&nbsp;</td> 
     <td><input type="button" value="ADD" onclick="AddActor()" /></td> 
    </tr> 
</table> 

これは私のaddActor機能である:

function AddActor(){ 
      $.ajax({ 
       url: 'save.php', 
       method: 'POST', 
       dataType: 'json', 
       data: JSON.stringify({'FirstName': $('#FirstName').val(), 
        'Id': $('#ID').val(), 
        'LastName': $('#LastName').val()}), 
       success: function() {alert("Thanks!"); }, 
       error: function() {alert("Error!");} 
      }); 
    } 

しかし、私は保存の内側に配置するのか分からない

[ 
    { 
    "FirstName": "Ricardo", 
    "Id": 1, 
    "LastName": "Darin" 
    }, 
    { 
    "FirstName": "Bruce", 
    "Id": 2, 
    "LastName": "Willis" 
    } 
] 

これが入力されています。 PHPファイルを作成し、いくつかの方法を試みますが、アクタは保存されません。

+0

試し: 'データ:{ファーストネーム:$( "#の姓")のval()、番号:$( "#のID")のval()、。 ...} 'PHP側では、' $ _POST ['FirstName']、$ _POST ['Id'] 'を使って値を取得します。 –

+0

そのすべてが文字化けしているのですか?なぜフォーム全体を.serialize()しないのですか?そして、フォームフィールドの 'id'は、送信に**使われていないことに注意してください。 'name'属性が必要です。 –

+1

@Marc B彼の場合、これはフォームではないので、^^ –

答えて

3

がフォームにname属性を追加します。

<table> 
    <tr> 
     <td>Id:</td> 
     <td><input type="text" id="ID" name="ID" /></td> 
    </tr> 
    <tr> 
     <td>First name:</td> 
     <td><input type="text" id="FirstName" name="FirstName" /></td> 
    </tr> 
    <tr> 
     <td>Last name:</td> 
     <td><input type="text" id="LastName" name="LastName" /></td> 
    </tr> 
    <tr> 
     <td>&nbsp;</td> 
     <td><input type="button" value="ADD" onclick="AddActor()" /></td> 
    </tr> 
</table> 

変更AddActor()機能:

function AddActor(){ 
     $.ajax({ 
      url: 'save.php', 
      method: 'POST', 
      data: $('input').serialize(), 
      success: function(result) {alert("Thanks!"); }, 
      error: function(result) {alert("Error!");} 
     }); 
} 

$().serializeは、クエリ文字列(name=val&name1=val1形式)などのすべての入力フィールドをフォーマットします。 save.phpで

<?php 

    // Adjust the actual location of the file relative 
    // to the location of the PHP script 
    $json_str = file_get_contents('Actors.json'); 

    // Convert json string to PHP array 
    $json_arr = json_decode($json_str, true); 

    // Make sure this variable is set in case Actors.json is empty 
    if(!$json_arr) { 
     $json_arr = array(); 
    } 

    // Add new data 
    $json_arr[] = $_POST; 

    // Encode back to json string and save 
    $json_str_done = json_encode($json_arr); 
    file_put_contents('Actors.json', $json_str_done); 
+0

OPはすべてのフォーム入力フィールドに 'name'属性も追加する必要があります。 – Mikey

+0

ああ、そうです。良いキャッチメイト! –

+0

ありがとうございました!しかし、まだ、データはjsonに保存されていません。 –

2

あなたが何か他の理由でそれを必要としない限り、JSON.stringifyを忘れてください。ただ、使用:あなたはそれらの変数を持ってたらfile_put_contentsまたは同様に見て、

$_POST['firstName']$_POST['lastName']など:

data: { 
    firstName: $('#FirstName').val(), 
    lastName: $('#LastName').val(), 
    ... 
} 

これらはそれぞれとして利用できるようになります。

関連する問題