2013-03-25 7 views
5

Więc wiem, że JavaScript jest po stronie klienta, a PHP po stronie serwera, co komplikuje sprawę, ale zastanawiam się, jak to zrobić.Przekazywanie tablicy JavaScript do pliku PHP

Mam tablicę w moim kodzie javascript (w pliku HTML) i kiedy użytkownik kliknie mój przycisk przesyłania Chcę, aby strona wysłała tę tablicę na moją stronę PHP, która następnie weźmie tę datę i umieści ją w Baza danych SQL.

Czy istnieje prosty sposób na zrobienie tego? Moja tablica jest zadeklarowana w ten sposób: var markers = []; jest po prostu zmienną w części kodu javascript.

Przyjrzałem się kilku innym postom dotyczącym tego problemu, ale wszystkie rozwiązania nie pasują do tego, co muszę zrobić, lub wymagają WAY zbyt dużej zmiany, jeśli chodzi o to, co mogę teraz zrobić. Nie jestem zaznajomiony z AJAX lub JSON (nie jestem pewien, co to jest).

My Javascript jest:

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); 
    }); 
} 

Moje HTML jest:

<form action="portal.php" method="post" id="theform"> 
    <input type="hidden" id="markers" name="markers"> 
    <button>Submit</button> 
</form> 

W moim pliku portal.php mam:

$markers = json_decode($_POST['markers']); 
echo $markers; 

Nic nie wypisuje na stronie php nawet chociaż wiem, że są elementy w tablicy, to prowadzi mnie do przekonania, że ​​tablica nie jest przekazywana.

+7

Cóż, powinieneś zapoznać się z AJAX. To jedyny sposób na zrobienie tego ... –

+0

Jestem pewien, że jedynym sposobem na zrobienie tego jest jakiś rodzaj rozwiązania ajaxowego. jQuery czyni to naprawdę łatwym, jeśli masz z tym jakieś doświadczenie. – dmikester1

Odpowiedz

3

Będziesz musiał nauczyć się podstaw AJAX i JSON. jQuery może ci w tym pomóc i poleciłbym to jako dobry punkt wyjścia.

Prześlij JSON za pomocą AJAX, następnie użyj $phpArray = json_decode($submittedJson); i viola, będziesz miał ładną tablicę PHP przesłanego obiektu javascript.

1

przesłać obiekt JSON i przekształcić go do tablicy z json_decode($obj)

+0

Czy używane są ograniczniki?Naprawdę nie mogę mieć ograniczników, ponieważ tablica zawiera tekst wprowadzony przez użytkownika i nie chcę ograniczać tego, co użytkownik może wprowadzić. – intA

9

Ja zakładając, że strona jest już załadowany po przesłaniu formularza, a nie masz z tym problem. Jeśli tak, to można dodać ukryte pole dla tych danych, i dodać go do pola tuż przed formą przedkłada:

<form method="post" id="theform"> 
    <!-- your existing form fields --> 

    <input type="hidden" id="markers" name="markers"> 

    <button>Submit</button> 
</form> 

Następnie użyć tego 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); 
    }); 
} 

i dodać do PHP, w przypadku obsługi przesłanych danych formularza:

$markers = json_decode($_POST['markers']); 
+2

+1 za wskazanie, że AJAX nie jest jedynym rozwiązaniem –

+0

+1 To jest dobra uwaga. Prawdopodobnie jest to łatwiejsze w przypadku jQuery. Nie jest idealny na wszystko, ale jest na to dobry. – pseudosavant

+0

To wydaje się mieć sens, dzięki! Czy muszę określić plik php, którego szukam, aby wysłać go gdzieś? Również, jeśli tablica znaczników już istnieje, jest tak prosta, jak usunięcie linii, w której tworzone są znaczniki? – intA

4

Jest to prawdopodobnie najbardziej prosty sposób na zrobienie tego. Używa jQuery, która jest dobra dla tego rodzaju rzeczy. Pierwsza część po prostu wysyła tablicę jako parametr markers w POST AJAX.

// Javascript/jQuery 
$.ajax({ 
    type: 'POST', 
    data: markers, 
    dataType: 'json', 
    url: 'yourPHPFile.php' 
}); 

Ta część PHP, który odbiera i dekoduje wiadomość JSON tablicy 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);