Поэтому я знаю, что Javascript является клиентской, а PHP – серверной, что усложняет, но мне интересно, как это сделать.
У меня есть массив в моем javascript-коде (в файле HTML), и когда пользователь нажимает на кнопку отправки, я хочу, чтобы страница передавала этот массив на мою страницу PHP, которая затем берет эту дату и помещает ее в базу данных SQL.
Есть ли простой способ сделать это? Мой массив объявлен как этот var markers = [];
это просто переменная в javascript-части кода.
Я смотрел на кучу других сообщений, касающихся этого, но все решения не соответствуют тому, что мне нужно сделать, или требуют слишком большого количества изменений для того, что я могу сделать прямо сейчас. Я не очень хорошо знаком с AJAX или JSON (точно не знаю, что это такое).
Мой Javascript:
var markers = []; function placeMarker(location) { var clickedLocation = new google.maps.LatLng(location); var name = document.getElementById("checkname").value; var description = document.getElementById("description").value; var marker = new google.maps.Marker({ position: location, map: map, title: name, // This may cause a problem when reloading and editing an existing tour // url was found at: http://biostall.com/adding-number-or-letters-to-google-maps-api-markers icon: 'http://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=' + markerId + '|FE6256|000000' }); marker.setMap(map); markers.push([markerId, name, marker.getPosition().lat(), marker.getPosition().lng(), description]); //alert("" + markers); markerId = markerId + 1; } google.maps.event.addListener(map, 'click', function(event) { placeMarker(event.latLng); }); google.maps.event.addListener(marker, "click", function() { map.removeOverlay(marker); marker.setMap(map); }); } window.onload = function() { var form = document.getElementById('theform'); form.addEventListener('submit', function(){ var markersField = document.getElementById('markers'); markersField.value = JSON.stringify(markers); }); }
Мой HTML:
<form action="portal.php" method="post" id="theform"> <input type="hidden" id="markers" name="markers"> <button>Submit</button> </form>
В моем файле portal.php у меня есть:
$markers = json_decode($_POST['markers']); echo $markers;
На php-странице ничего не печатается, хотя я знаю, что в массиве есть элементы, это приводит меня к мысли, что массив не передается.
Я предполагаю, что ваша страница уже перезагружается, когда вы отправляете форму, и что у вас нет проблемы с этим. Если это так, вы можете добавить скрытое поле для этих данных и добавить его в поле непосредственно перед отправкой формы:
<form method="post" id="theform"> <!-- your existing form fields --> <input type="hidden" id="markers" name="markers"> <button>Submit</button> </form>
Затем используйте этот JavaScript
window.onload = function() { var form = document.getElementById('myform'); form.addEventListener('submit', function(){ var markersField = document.getElementById('markers'); var markers = [1,2,3]; markersField.value = JSON.stringify(markers); }); }
И добавьте это на свой PHP, где вы обрабатываете представленные данные формы:
$markers = json_decode($_POST['markers']);
Это, вероятно, самый прямой способ сделать это. Он использует jQuery, который хорош для такого рода вещей. Первая часть просто отправляет массив в качестве параметра markers
в AJAX POST.
// Javascript / jQuery $.ajax({ type: 'POST', data: markers, dataType: 'json', url: 'yourPHPFile.php' });
Эта часть является PHP, который получает сообщение и декодирует JSON в массив PHP.
// PHP in 'yourPHPFile.php' // Santizing the string this way is a little safer than using $_POST['markers'] $markersFromPost = filter_input(INPUT_POST, 'markers', FILTER_SANITIZE_STRING); // Turn the sanitized JSON string into a PHP object $markers = json_decode($markersFromPost);
Вам нужно будет изучить основы AJAX и JSON. jQuery может помочь вам в этом, и я бы рекомендовал его в качестве хорошей отправной точки.
Отправьте JSON с помощью AJAX, затем используйте $phpArray = json_decode($submittedJson);
и альт, у вас будет хороший PHP-массив представленного объекта javascript.
отправьте объект json и преобразуйте его в массив с json_decode($obj)