PHP, JavaScript, iki-boyutlu Array

3 Cevap php

I have to send a two-dimensional JavaScript Array to a PHP page. Indeed, I'm working on a form-builder, in which the user can add or remove fields.
These fields are added (or removed) using JavaScript (jQuery). When the user is done and hit a 'publish' button, I have to get all the fields concerned and send them to a PHP page which would build a real form with it.
I found a way to do it but I'm pretty sure it's not very clean :

addedFields = new Array();
$("#add-info .field").each(function() {
    addedFields.push(new Array($(this).find('.name').val(), $(this).find('.type').val(), $(this).find('.size').val()));
});

Basically, the ".field" class objects are <tr> and the ".name", ".type" and ".size" objects are inputs.
So I get an array of [name, type, size], then I convert it into a string using

addedFields = addedFields.join(";");

Son olarak, PHP formu için bu şekilde gitmek;

document.location.href = "create.php?addedfields=" + addedFields;

PHP kodu ile ilgili olarak, ben explode() işlevini kullanarak bir PHP dizi oluşturun:

$addedFields = explode(";", $_GET['addedfields']);

ve sonra ben dizide her öğe için tekrar kullanabilirsiniz:

foreach ($addedFields as $field) {
    $field = explode(",", $field);
    echo "<li>Field with name : '$field[0]', of '$field[1]' type and with a size of $field[2]</li>";
}

Yani çalışıyor, ama çok kirli görünüyor ...

3 Cevap

PHP ve JavaScript arasında veri etkileşim JSON kullanarak düşünün sahipsiniz.

JSON JavaScript içine inşa edilmiştir ve PHP için harika bir kütüphanesi var. Onları kontrol edin.

PHP otomatik dizisi özelliğini kullanın:

var data = {};
$("#add-info .field").each(function(i) {
  data['field['+i+'][name]'] = $(this).find('.name').val();
  data['field['+i+'][type]'] = $(this).find('.type').val();
  data['field['+i+'][size]'] = $(this).find('.size').val()]);
});
$.post("target.php", data);

Daha sonra sunucu tarafında

var_dump($_POST['field']);
// array(
//   0 => array(
//     'name' => ...
//     'type' => ...
//     'size' => ...
//   ),
//   1 => ...

Döngü Edit: biraz daha zarif bir versiyonu:

$("#add-info .field").each(function(i) {
  for (attr in {name: 1, type: 1, size: 1}) {
    data['field['+i+']['+attr+']'] = $(this).find('.'+attr).val();
  }
});

Bir form elemanının bu giriş alanlarını koydu. Gibi JSON

var formData = $('form').serializeArray();
formData     = window.JSON.stringifiy(formData);

$.post('address', {addedfields: formData}, function(){});

something similar to that should do it in jQuery. on the backend convert the JSON into an object and loop through.