2013-03-25 19 views
5

Quindi so che Javascript è lato client e PHP è lato server e questo complica la cosa, ma mi chiedo come fare per farlo.Passare l'array Javascript al file PHP

Ho un array nel mio codice javascript (in un file HTML) e quando l'utente preme il pulsante di invio voglio che la pagina invii quell'array alla mia pagina PHP che quindi prenderà quella data e la inserirà in un Database SQL.

C'è un modo semplice per farlo? Il mio array è dichiarato come questo var markers = []; è solo una variabile nella parte javascript del codice.

Ho esaminato un sacco di altri post relativi a questo, ma tutte le soluzioni non si adattano a ciò che devo fare, o richiedono MODI troppo di un cambiamento per ciò che posso fare adesso. Non ho molta familiarità con AJAX o JSON (non sono sicuro di cosa sia esattamente).

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

mio HTML è:

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

Nel mio file portal.php ho:

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

Nulla viene stampato nella pagina php anche sebbene io sappia che ci sono elementi nella matrice, questo mi porta a credere che la matrice non venga ignorata.

+7

bene, quindi è necessario acquisire familiarità con AJAX. È l'unico modo per farlo ... –

+0

Abbastanza sicuro l'unico modo per farlo è con una sorta di soluzione ajax. jQuery rende davvero facile, se hai qualche esperienza con questo. – dmikester1

risposta

3

Avrete bisogno di imparare le basi di AJAX e JSON. jQuery può aiutarti con questo e lo consiglierei come un buon punto di partenza.

Invia JSON utilizzando AJAX, quindi usa $phpArray = json_decode($submittedJson); e viola, avrai un bel array PHP dell'oggetto javascript inviato.

1

inviare un oggetto JSON e convertirlo in un array con json_decode($obj)

+0

Usa i delimitatori?Non posso avere delimitatori perché l'array include il testo immesso dall'utente e non voglio limitare ciò che l'utente può inserire. – intA

9

che sto assumendo la pagina è già stato ricaricato quando si invia il modulo, e che non hanno un problema con questo. Se è così, è possibile aggiungere un campo nascosto per quei dati, e aggiungerlo al campo appena prima che il modulo invia:

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

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

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

quindi utilizzare questo 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); 
    }); 
} 

e aggiungere questo al vostro PHP, dove gestisci i dati del modulo inviato:

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

+1 per aver sottolineato che AJAX non è l'unica soluzione –

+0

+1 Questo è un buon punto. È probabilmente più facile da fare con jQuery. Non è perfetto per tutto, ma è buono per questo. – pseudosavant

+0

Questo sembra avere senso, grazie! Devo specificare il file php che sto cercando di inviarlo da qualche parte? Inoltre, se l'array di marcatori esiste già, è semplice come rimuovere quella linea in cui si creano i marcatori? – intA

4

Questo è probabilmente il modo più semplice per farlo. Usa jQuery che è buono per questo genere di cose. La prima parte invia l'array come parametro markers in un POST AJAX.

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

Questa parte è il PHP che riceve il post e decodifica il JSON in un array 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); 
Problemi correlati