2013-03-25 38 views
5

JavaScriptがクライアント側でPHPがサーバー側であり、それが問題を複雑にしていることは知っていますが、これをどうやって行うのかと思います。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は次のとおりです。私のportal.phpファイルで

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

私が持っている:

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

何でもPHPページで出力していません配列に要素があることはわかっていますが、これは配列が渡されていないと信じさせてくれます。

+7

あなたはAJAXについてよく知っておく必要があります。それはこれを行う唯一の方法です... –

+0

これを行うための唯一の方法は、何らかの種類のAjaxソリューションです。経験があれば、jQueryはとても簡単です。 – dmikester1

答えて

3

AJAXとJSONの基礎を学ぶ必要があります。 jQueryはこれを手伝ってくれるので、良い出発点としてお勧めしたいと思います。

AJAXを使用してJSONを送信し、$phpArray = json_decode($submittedJson);とviolaを使用すると、送信されたjavascriptオブジェクトの素敵なPHP配列が作成されます。

1

は、私はあなたがフォームを送信すると、ページが既に再ロードされていると仮定すると、あなたはそれで問題がないことだJSONオブジェクトを送信し、json_decode($obj)

+0

デリミタを使用しますか?配列にはユーザーが入力したテキストが含まれており、ユーザーが入力できるものを制限したくないため、デリミタを使用することはできません。 – intA

9

と配列に変換します。もしそうなら、あなたはフォームを送信する直前に、そのデータのための隠しフィールドを追加し、フィールドに追加することができます

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

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

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

を次に

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

このJavaScriptを使用して、あなたのPHPにこれを追加し、送信されたフォームデータを処理する場所:

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

+1はAJAXが唯一の解決策ではないことを指摘しています –

+0

+1それは良い点です。実際にはjQueryを使うほうが簡単かもしれません。それはすべてには完璧ではありませんが、これは良いことです。 – pseudosavant

+0

これは感謝しているようです、ありがとう!私はそれをどこかに送るために探しているPHPファイルを指定する必要がありますか? また、マーカー配列がすでに存在する場合は、マーカーを作成する行を削除するだけで簡単ですか? – intA

4

これはおそらく最も単純な方法です。この種のものには良いjQueryを使います。最初の部分はAJAX POSTのmarkersパラメータとして配列を送信するだけです。

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

この部分は、投稿を受け取り、JSONをPHP配列にデコードする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); 
関連する問題