2013-03-25 9 views
5

पर जावास्क्रिप्ट सरणी पास करना तो मुझे पता है कि जावास्क्रिप्ट क्लाइंट-साइड है और PHP सर्वर-साइड है और यह चीज जटिल करता है लेकिन मैं सोच रहा हूं कि यह करने के बारे में कैसे जाना है।PHP फ़ाइल

मेरे पास मेरे जावास्क्रिप्ट कोड (एक HTML फ़ाइल में) में एक सरणी है और जब उपयोगकर्ता मेरा सबमिट बटन हिट करता है तो मैं चाहता हूं कि पेज उस सरणी को मेरे PHP पृष्ठ पर भेज दे, जो उस तारीख को ले जाएगा और उसे डाल देगा एसक्यूएल डेटाबेस।

क्या ऐसा करने का कोई आसान तरीका है? मेरी सरणी इस var markers = []; की तरह घोषित की गई है यह कोड के जावास्क्रिप्ट भाग में केवल एक चर है।

मैंने इसके बारे में अन्य पदों का एक समूह देखा है, लेकिन सभी समाधान जो मुझे करने की ज़रूरत है, उसके अनुरूप नहीं होंगे, या अभी मैं जो भी कर सकता हूं उसके लिए बहुत अधिक बदलाव की आवश्यकता है। मैं AJAX या JSON से वास्तव में परिचित नहीं हूं (सुनिश्चित नहीं है कि वास्तव में क्या है)।

मेरे जावास्क्रिप्ट है:

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 पृष्ठ में बाहर प्रिंट हालांकि मुझे पता है कि सरणी में तत्व हैं, इससे मुझे विश्वास होता है कि सरणी पारित नहीं हो रही है।

+7

अच्छी तरह से आपको AJAX से परिचित होना चाहिए। ऐसा करने का यही एकमात्र तरीका है ... –

+0

बहुत यकीन है कि ऐसा करने का एकमात्र तरीका कुछ प्रकार के AJAX समाधान के साथ है। अगर आपके पास इसका कोई अनुभव है तो jQuery इसे वास्तव में आसान बनाता है। – dmikester1

उत्तर

3

आपको AJAX और JSON की मूल बातें सीखनी होगी। jQuery इस के साथ आपकी मदद कर सकता है और मैं इसे एक अच्छा प्रारंभिक बिंदु के रूप में अनुशंसा करता हूं।

AJAX का उपयोग कर JSON सबमिट करें, फिर $phpArray = json_decode($submittedJson); और व्हायोला का उपयोग करें, आपके पास सबमिट की गई जावास्क्रिप्ट ऑब्जेक्ट का एक अच्छा PHP सरणी होगा।

1

एक json वस्तु भेज सकते हैं और यह एक सरणी में बदलने का json_decode($obj)

+0

क्या यह delimiters का उपयोग करें?मैं वास्तव में डिलीमीटर नहीं कर सकता क्योंकि सरणी में उपयोगकर्ता इनपुट टेक्स्ट शामिल है और मैं उपयोगकर्ता को इनपुट करने के लिए सीमित नहीं करना चाहता हूं। – 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); 
    }); 
} 

का उपयोग और अपने PHP में जोड़ना, जहां आप सबमिट किए गए फॉर्म डेटा को संभालते हैं:

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

+1 यह इंगित करने के लिए कि AJAX एकमात्र समाधान नहीं है –

+0

+1 यह एक अच्छा बिंदु है। यद्यपि jQuery के साथ शायद यह वास्तव में आसान है। यह सब कुछ के लिए सही नहीं है, लेकिन यह इसके लिए अच्छा है। – pseudosavant

+0

यह समझ में आता है, धन्यवाद! क्या मुझे उस php फ़ाइल को निर्दिष्ट करने की आवश्यकता है जिसे मैं इसे कहीं भेजना चाहता हूं? इसके अलावा, यदि मार्कर सरणी पहले से मौजूद है तो क्या यह उस रेखा को हटाने के समान सरल है जहां आप मार्कर बनाते हैं? – intA

4

यह संभवतः यह करने का सबसे आसान तरीका है। यह jQuery का उपयोग करता है जो इस तरह की चीजों के लिए अच्छा है। पहला भाग सिर्फ एजेक्स पोस्ट में markers पैरामीटर के रूप में सरणी भेजता है।

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

यह हिस्सा 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); 
संबंधित मुद्दे