2017-04-16 54 views
2

我想创建一个网站,允许用户输入一个HTML格式的地址。当用户点击提交按钮时,我希望PHP获取表单数据,然后使用该数据访问存储地址的mysql数据库,基于表单数据php将查询mysql数据库并返回给定距离内的地址。那么我想使用ajax将该结果传递到JavaScript,我将使用这些数据创建一个带有绘制到地图上的所有地址的谷歌地图。我现在所遇到的问题仅仅是在javascript中将数据显示到控制台。我注意到,每次我点击提交按钮,似乎html页面正在刷新,所以我认为可能是刷新是数据未被正确传递的原因。MySQL的查询数据不正确传递给从PHP通过ajax的JavaScript

HTML表单代码(与JavaScript/AJAX)

<html> 
<head> 
<title></title> 
</head> 
<body> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script> 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script> 
    <div class = "container"> 
    <nav class = "navbar navbar-inverse"> 
     <div class = "container-fluid"> 
     <div class = "navbar-header"> 
      <a class = "navbar-brand" href = "home.html">YardSaleMapper.com</a> 
     </div> 
     <ul class = "nav navbar-nav"> 
      <li><a href = "home.html">Go Home</a></li> 
      <li class = "active"><a href = "viewSales.php">View Sales</a></li> 
      <li><a href = "addSale.html">Publish your Sale</a></li> 
     </ul> 
     </div> 
    </nav> 
    <h3>Enter Starting Point</h3> 
    <hr/> 
    <form method = "post" id = "myForm"> 
     <div class = "col-md-2"> 
     <div class = "form-group"> 
      Street: 
      <input class = "form-control" type = "text" name = "start_street" ng-model = "ss" required/> 
     </div> 
     </div> 
     <div class = "col-md-2"> 
     <div class = "form-group"> 
      City: 
      <input class = "form-control" type = "text" name = "start_city" ng-model = "ss" required/> 
     </div> 
     </div> 
     <div class = "col-md-2"> 
     <div class = "form-group"> 
      State (EX: PA): 
      <input class = "form-control" type = "text" name = "start_state" ng-model = "ss" maxlength="2" required/> 
     </div> 
     </div> 
     <div class = "col-md-2"> 
     <div class = "form-group"> 
      ZIP 
      <input class = "form-control" type = "text" name = "start_zip" ng-model = "ss" maxlength="5" required/> 
     </div> 
     </div> 
     <div class = "col-md-2"> 
     <div class = "form-group"> 
      Within <select type = "text" name = "distance" required class = "form-control"> 
      <option value = 5>5</option> 
      <option value = 10>10</option> 
      <option value = 15>15</option> 
      <option value = 20>20</option> 
      <option value = 25>25</option> 
      </select> 
      Miles 
     </div> 
     </div> 
     <div class = "col-md-2"> 
     <div class = "form-group"> 
      &nbsp 
      <button class ="btn btn-primary btn-block" id = "submit" type = "submit" name = "submit">Submit</button> 
     </div> 
     </div> 
    </form> 
    </div> 

    <script id = "source" language = "javascript" type = "text/javascript"> 
    $(function() { 
    $('#submit').on('click', function() { 
     $.ajax({ 
     url: 'getSales.php', 
     method: 'post', 
     data: $("#myForm").serialize(), 
     dataType: 'json', 
     success: function(data) { 
      console.log(data); 
     } 
     }) 
    }) 
    }); 
    </script> 

</body> 
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> 
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous"> 
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script> 


</html> 

PHP代码访问MySQL数据库和呼应的结果。

<?php 
    $servername = "localhost"; 
    $username = "username"; 
    $password = "password"; 
    $dbname = "yardsales"; 

    $data = array(); 

    // Create connection 
    $conn = new mysqli($servername, $username, $password, $dbname); 
    // Check connection 
    if ($conn->connect_error) { 
     die("Connection failed: " . $conn->connect_error); 

    } 

    $street = $_POST["start_street"]; 
    $city = $_POST["start_city"]; 
    $state = $_POST["start_state"]; 
    $zip = $_POST["start_zip"]; 
    $dist = $_POST["distance"]; 

    $address = $street . ", " . $city . ", " . $state . ", " . $zip; 

    $geo = file_get_contents('http://maps.googleapis.com/maps/api/geocode/json?address='.urlencode($address).'&sensor=false'); 

    // Convert the JSON to an array 
    $geo = json_decode($geo, true); 

    if ($geo['status'] == 'OK') { 
    // Get Lat & Long 
    $lat = $geo['results'][0]['geometry']['location']['lat']; 
    $long = $geo['results'][0]['geometry']['location']['lng']; 

    } 

    $sql = "SELECT street, city, state, zip, county, sdate, edate, 
    stime, etime, description, 69 * vincenty($lat, $long, lat, lon) AS distance from 
    addresses where 69 * vincenty($lat, $long, lat, lon) < $dist"; 

    $result = $conn->query($sql); 

    while($row = $result->fetch_assoc()) { 
    $data[] = $row; 
    //print_r($row); 
    } 

    echo json_encode($data); 

?> 
+0

**警告**:当使用'mysqli'你应该使用[参数化查询](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)和['bind_param'](http://php.net/manual/en/mysqli-stmt.bind-param.php)将用户数据添加到您的查询中。 **不要**使用字符串插值或连接来完成此操作,因为您创建了严重的[SQL注入漏洞](http://bobby-tables.com/)。 **不要**将'$ _POST','$ _GET'或**任何**用户数据直接放入查询中,如果有人试图利用您的错误,这可能会非常有害。 – tadman

回答

0

你的提交按钮使POST请求和刷新页面,这样的Javascript失去了它的数据。你必须改变这一点:

<form method = "post" id = "myForm"> 

或按钮,另一个标签,就像

<a></a>. 

,并使用替代的mysqli PDO。将更好为你

+0

我该如何改变? – tygrim

+0

Submit

+0
相关问题