บันทึกข้อมูลจากหน้าต่างข้อมูล Google ด้วย php.ini

ฉันได้ลองค้นหาไซต์นี้เพราะฉันแน่ใจว่าฉันไม่ใช่คนแรกที่ถามสิ่งนี้ ฉันได้ใส่แผนที่บนเว็บไซต์ของฉัน และต้องการให้ผู้ใช้เพิ่มเครื่องหมายและข้อมูล ใช้งานได้ดีแต่ข้อมูลไม่บันทึก เมื่อคุณคลิกปุ่มบันทึกและปิดไม่มีอะไรเกิดขึ้น โปรดมีคนบอกฉันว่าฉันไปไหนผิด นี่คือโค้ด html

เครื่องหมาย var; หน้าต่างข้อมูล var;

function initialize() {
  var latlng = new google.maps.LatLng(-24.532226,31.290586);
  var options = {
    zoom: 8,
    center: latlng,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  }
  var map = new google.maps.Map(document.getElementById("map-canvas"), options);
  var html = "<table>" +
             "<tr><td>Posted by:</td> <td><input type='text' id='name'/> </td> </tr>" +
             "<tr><td>Time +/-:</td> <td><input type='text' id='time'/></td> </tr>" +
             "<tr><td>Sighting:</td> <td><select id='sighting'>" +
             "<option value='Lion' SELECTED>Lion</option>" +
             "<option value='Rhino'>Rhino</option>" +
             "<option value='Elephant'>Elephant</option>" +
             "<option value='Buffalo'>Buffalo</option>" +
             "<option value='Leopard'>Leopard</option>" +
             "<option value='Cheetah'>Cheetah</option>" +
             "<option value='Spotted Hyena'>Spotted Hyena</option>" +
             "<option value='Wild Dogs'>Wild Dogs</option>" +
             "<option value='Hippo'>Hippo</option>" +
             "<option value='Kudu'>Kudu</option>" +
             "<option value='Zebra'>Zebra</option>" +
             "<option value='Fish Eagle'>Fish Eagle</option>" +
             "<option value='Other'>Other</option>" +
             "</select> </td></tr>" +
             "<tr><td>Description:</td> <td><input type='text' id='description'/> </td> </tr>" +
             "<tr><td></td><td><input type='button' value='Save & Close' onclick='saveData()'/></td></tr>";


infowindow = new google.maps.InfoWindow({
 content: html
});

google.maps.event.addListener(map, "click", function(event) {
    marker = new google.maps.Marker({
      position: event.latLng,
      map: map
    });
    google.maps.event.addListener(marker, "click", function() {
      infowindow.open(map, marker);
    });
});
}

function saveData() {
  var name = escape(document.getElementById("name").value);
  var time = escape(document.getElementById("time").value);
  var sighting = escape(document.getElementById("sighting").value);
  var description = escape(document.getElementById("description").value);

  var url = "phpsqlinfo_addrow.php?name=" + name + "&time=" + time +
  "&sighting=" + sighting + "&description" + description + "&lat=" + latlng.lat() + "&lng=" + latlng.lng();
  downloadUrl(url, function(data, responseCode) {
    if (responseCode == 200 && data.length <= 1) {
      infowindow.close();
      document.getElementById("msg").innerHTML = "Location added.";
    }
  });
}

function downloadUrl(url, callback) {
  var request = window.ActiveXObject ?
      new ActiveXObject('Microsoft.XMLHTTP') :
      new XMLHttpRequest;

  request.onreadystatechange = function() {
    if (request.readyState == 4) {
      request.onreadystatechange = doNothing;
      callback(request.responseText, request.status);
    }
  };

  request.open('GET', url, true);
  request.send(null);
}

function doNothing() {}
</script>

แล้วสิ่งนี้ในร่างกาย

<div id="map">
<body style="margin:0px; padding:0px;" onload="initialize()">
<div id="map-canvas" style="width: 950px; height: 534px"></div>
<div id="msg"></div>

และนี่คือ PHP ของฉัน

    <?php
    require("phpsqlinfo_dbinfo.php");

    // Gets data from URL parameters
    $name = $_GET['map_client_name'];
    $time = $_GET['client_time'];
    $lat = $_GET['client_lat'];
    $lng = $_GET['client_lng'];
    $description = $_GET['client_description'];
    $sighting = $_GET['client_sighting'];


    // Opens a connection to a MySQL server
    $connection = mysql_connect ("mysql.spri.co.za", "sean_sql", "Paaseiers01");
    if (!$connection) {
    die('Not connected : ' . mysql_error());
    }


   // Set the active MySQL database
   $db_selected = mysql_select_db($kruger_park_live, $connection);
   if (!$db_selected) {
   die ('Can\'t use db : ' . mysql_error());
   }

   // Insert new row with user data
   $query = sprintf("INSERT INTO tbl_maps " .
         " (ID, map_client_name, client_time, client_lat, client_lng, client_description, 

   client_sighting) " .
         " VALUES (NULL, '%s', '%s', '%s', '%s', '%s', '%s');",
         mysql_real_escape_string($name),
         mysql_real_escape_string($time),
         mysql_real_escape_string($lat),
         mysql_real_escape_string($lng),
         mysql_real_escape_string($description),
         mysql_real_escape_string($sighting));

    $result = mysql_query($query);

    if (!$result) {
    die('Invalid query: ' . mysql_error());
    }

    ?>

ใครก็ได้โปรดช่วยฉันด้วย ฉันทำสิ่งนี้มา 4 วันแล้ว และตอนนี้ฉันยอมแพ้แล้ว ขอบคุณมาก


person Sean Konig    schedule 24.05.2013    source แหล่งที่มา
comment
เราขอรหัส downloadUrl() ใน JS ได้ไหม และดูว่าคุณจะเห็นคำขอในแท็บ เครือข่าย ของคอนโซลแก้ไขข้อบกพร่องของเบราว์เซอร์ของคุณหรือไม่   -  person Sébastien Renauld    schedule 24.05.2013
comment
เหตุใดคุณจึงผ่าน null ใน request.send(null) ฉันไม่เคยเห็นมาก่อน ไม่คิดว่ามันจะเลอะเทอะ แต่ใครจะรู้ นอกจากนี้ หากคุณมี jquery บนไซต์ ฉันจะใช้ $.ajax เอกสารประกอบ เพื่อสร้าง โทรเพื่อให้คุณไม่ต้องกังวลเกี่ยวกับความเข้ากันได้ของเบราว์เซอร์   -  person Dropzilla    schedule 24.05.2013
comment
หากคุณเห็นว่าคำขอกำลังดำเนินการอยู่ ให้เริ่มดำเนินการผ่านสคริปต์ php ของคุณ เป็นการยากที่จะใช้คำสั่ง die() เนื่องจากเป็นสคริปต์ที่ถูกเรียกโดย ajax แต่วิธีการหนึ่งที่ทำงานได้ดีในสถานการณ์นี้คือการใช้ mail เพื่อส่งอีเมลแจ้งผลการทดสอบถึงตัวคุณเอง เพื่อให้คุณสามารถบอกได้ว่าข้อมูลที่ถูกต้องกำลังได้รับการส่งและแยกวิเคราะห์หรือไม่   -  person Dropzilla    schedule 24.05.2013
comment
@ SébastienRenauld - รหัสนี้มอบให้บนเว็บไซต์นักพัฒนาซอฟต์แวร์ของ Google นี่เป็นครั้งแรกที่ฉันพยายามทำอะไรแบบนี้ ฉันคัดลอกโค้ดและทำการเปลี่ยนแปลง ฉันไม่มีรหัสสำหรับ downloadURL   -  person Sean Konig    schedule 24.05.2013
comment
@Mike ปัญหาคือคำขอไม่ผ่านหรืออย่างน้อยก็ดูเหมือนจะไม่เป็นเช่นนั้น   -  person Sean Konig    schedule 24.05.2013
comment
developers.google.com/maps/articles/phpsqlinfo_v3#CreatingTable   -  person Sean Konig    schedule 24.05.2013
comment
เริ่มเพิ่มการแจ้งเตือนในฟังก์ชัน downloadUrl เพื่อให้แน่ใจว่าคุณกำลังไปถึงจุดนั้น ดังนั้นบางอย่างเช่น alert("made it"); ที่จุดเริ่มต้นของฟังก์ชันจะมากขึ้นเมื่อคุณลงไปดูว่าจุดใดที่ล้มเหลวหากคุณกำลังทำมันอยู่ นอกจากนี้ คุณอาจต้องการย้ายการประกาศตัวแปร var request ไปยังบรรทัดเดียวทั้งหมด ดังนั้น var request = window.ActiveXObject ? new ActiveXObject('Microsoft.XMLHTTP') :new XMLHttpRequest;   -  person Dropzilla    schedule 24.05.2013
comment
คุณต้องกำจัดจุดที่เกิดข้อผิดพลาด อันดับแรก. ข้อมูลฮาร์ดโค้ด ($name=name) ฯลฯ ในไฟล์ PHP เพื่อให้แน่ใจว่าแบบสอบถาม INSERT ใช้งานได้ ประการที่สองหาก INSERT ทำงานด้วยตนเองให้สร้าง URL และดูว่าใช้งานได้หรือไม่   -  person david strachan    schedule 24.05.2013


คำตอบ (1)


โค้ดด้านล่างใช้ jQuery เพื่อส่งข้อมูลไปยังไฟล์ php และ ส่งคืนข้อมูลหากสำเร็จ แทนที่ downloadUrl()

รวม

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>

ในหัวของคุณ

function saveData() {
     var latlng = marker.getPosition();
     var name = escape(document.getElementById("name").value);
     var time = escape(document.getElementById("time").value);
     var sighting = escape(document.getElementById("sighting").value);
     var description = escape(document.getElementById("description").value);
     $.get('phpsqlinfo_addrow.php',{lat:latlng.lat(),lng:latlng.lng(),name:name,time:time,sighting:sighting,description:description})
     .done(function(data){  
      alert("Data Loaded: " + data);
     });    
    }   

ไม่จำเป็น

function downloadUrl(url, callback)

และ

function doNothing() {}

รหัสถัดไปใช้ PDO แทนที่ฟังก์ชัน mysql_ ที่เลิกใช้แล้ว

phpsqlinfo_addrow.php

require("dbinfo.php");// database connections
// Get parameters from URL
$lat = $_GET["lat"];
$lng = $_GET["lng"];
$name = $_GET["name"];
$time = $_GET["time"];
$description = $_GET["description"];
$sighting = $_GET["sighting"];
//Connect to database
$dbh = new PDO("mysql:host=$host;dbname=$database", $username, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
try {
    // Prepare INSERT statement new sigting
        $stmt3 = $dbh->prepare("INSERT INTO tbl_maps (ID, map_client_name, client_time, client_lat, client_lng, client_description, client_sighting)  VALUES (NULL, ?, ?, ?, ?, ?, ?)");
        // Assign parameters
        $stmt3->bindParam(1,$name);
        $stmt3->bindParam(2,$time);
        $stmt3->bindParam(3,$lat);
        $stmt3->bindParam(4,$lng);
        $stmt3->bindParam(5,$description);
        $stmt3->bindParam(6,$sighting);
        $stmt3->execute();
        $data[] = array("name"=>$name, "lat"=>round($lat,6), "lng"=>round($lng,6),"time"=>$time,"description"=>$description,"sighting"=>$sighting);
        //Data for success
        echo json_encode($data);
}
catch(PDOException $e) {
    echo "Error Message.". $e->getMessage() ;// Remove or modify after testing 
    file_put_contents('PDOErrors.txt',date('[Y-m-d H:i:s]').", phpsqlinfo_addrow.php, ". $e->getMessage()."\r\n", FILE_APPEND);  
}
//Close the connection
$dbh = null; 
?>
person david strachan    schedule 24.05.2013
comment
สวัสดีพวก ขอบคุณมากสำหรับความช่วยเหลือ ดูเหมือนว่าจะใช้งานได้ แต่มีข้อผิดพลาดเล็กๆ น้อยๆ อีกประการหนึ่ง เมื่อคลิกและบันทึก ฉันได้รับข้อผิดพลาดดังต่อไปนี้ ข้อมูลที่โหลด: ‹br /› ‹b›ข้อผิดพลาดร้ายแรง‹/b›: ขนาดหน่วยความจำที่อนุญาตคือ 134217728 ไบต์หมดลง (พยายามจัดสรร 30720 ไบต์) ใน ‹b›/home/sea502/public_html/krugerparklive/dbinfo.php‹/b › ออนไลน์ ‹b›23‹/b›‹br /› - person Sean Konig; 25.05.2013
comment
บรรทัดที่ 23 คือ $stmt-›execute(); รหัสแสดงอยู่ด้านบนใน @davidstrachan - person Sean Konig; 25.05.2013
comment
@davidstrachen ฉันคิดว่าฉันสับสนที่นี่และใช้รหัสผิดผิดที่ - person Sean Konig; 25.05.2013
comment
ถ้าฉันอัปโหลดไฟล์ phpsqlinfo_addrow.php ที่คุณให้ฉันมาและคลิกที่บันทึกและปิด ฉันจะได้รับสิ่งต่อไปนี้ ‹br /› ‹b›Warning‹/b›: need(dbinfo.php): failed to open stream: No ไฟล์หรือไดเร็กทอรีดังกล่าวใน ‹b›/home/sea503/public_html/sean/phpsqlinfo_addrow.php‹/b› ออนไลน์ ‹b›2‹/b›‹br /› ‹br /› ‹b›คำเตือน‹/b› : need(dbinfo.php): ไม่สามารถเปิดสตรีม: ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าวใน ‹b›/home/sea503/public_html/sean/phpsqlinfo_addrow.php‹/b› ออนไลน์ ‹b›2‹/b›‹br /› ‹br /› ‹b›ข้อผิดพลาดร้ายแรง‹/b›: need(): จำเป็นต้องเปิดล้มเหลว 'dbinfo.php' (include_path='.:/usr/lib/php:/usr/local/lib/php' ) - person Sean Konig; 25.05.2013
comment
จากนั้นฉันเปลี่ยนชื่อไฟล์นั้นเป็น dbinfo.php และได้รับข้อผิดพลาดหน่วยความจำไม่เพียงพอ - person Sean Konig; 25.05.2013
comment
สวัสดี. มันยังคงให้ข้อผิดพลาดว่ามันใหญ่เกินไป ฉันพยายามขอให้เซิร์ฟเวอร์ของฉันเพิ่มขนาด แต่ก็ทำไม่ได้ อะไรก็ได้ที่ฉันสามารถทำได้ - person Sean Konig; 26.05.2013
comment
dbinfo.php <?php $host= "localhost"; $username="XXX"; $password="XXX"; $database="XXX"; ?> WHERE XXX is your details - person david strachan; 26.05.2013
comment
@davidstrachen ดูเหมือนว่าจะส่งข้อมูลตอนนี้ แต่หมดเวลาทำให้ฉันมีข้อผิดพลาดนี้ โหลดข้อมูลแล้ว: ‹br /› ‹b›ข้อผิดพลาดร้ายแรง‹/b›: ข้อยกเว้นที่ไม่ถูกตรวจจับ 'PDOException' พร้อมข้อความ 'SQLSTATE[HY000] [2002] หมดเวลาการเชื่อมต่อ' ใน /home/sea503/public_html/phpsqlinfo_addrow.php:11 Stack ติดตาม: #0 /home/sea503/public_html/phpsqlinfo_addrow.php(11): PDO-__construct('mysql:host=mysq...', NULL, NULL) #1 {main} โยนใน ‹b›/home/ sea503/public_html/phpsqlinfo_addrow.php‹/b› ออนไลน์ ‹b›11‹/b›‹br /› - person Sean Konig; 27.05.2013
comment
ฉันพยายามระบุ TCP/IP ด้วยการเพิ่มพอร์ต แต่ได้รับข้อผิดพลาดเดียวกัน - person Sean Konig; 27.05.2013
comment
ดูเหมือนว่าพารามิเตอร์ของคุณใน new PDO()are ไม่อยู่ที่นั่น ลองฮาร์ดโค้ด เช่น new PDO("mysql:host=localhost;dbname=tablename", "username", "password"); โดยที่ชื่อตาราง ชื่อผู้ใช้ และรหัสผ่านคือรายละเอียดของคุณ - person david strachan; 27.05.2013