2017-08-21 3 views
-1

Ich habe eine Broschüre Karte auf meiner Website. Was ich tun möchte, ist, die Positionsdaten von der Markierung zu erhalten, die ein Benutzer setzt, und sie über Sitzung in meine Datenbank zu übertragen. Ich kann es nicht schaffen, dass meine Datenbank userPos nicht aktualisiert wird. Kannst du mir erklären, was ich falsch mache? (Dbconnect.php bereits funktioniert, getestet)mit Ajax, um Daten aus der Broschüre Map

das ist mein home.php Datei, in der die Karte ist:

<?php 
ob_start(); 
session_start(); 
require_once 'dbconnect.php'; 

if(!isset($_SESSION['user'])) { 
    header("Location: index.php"); 
    exit; 
} 
$res=mysqli_query($conn,"SELECT * FROM `users` WHERE userId=".$_SESSION['user']); 
$userRow[]=mysqli_fetch_array($res); 

echo json_encode($userRow); 
?> 
<script> 
    $(document).ready(function(){ 
     var mymap = L.map('map').setView([51.505, -0.09], 13); 
     L.tileLayer('https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token=xxx', { 
    attribution: 'Map data &copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery © <a href="http://mapbox.com">Mapbox</a>', 
    maxZoom: 18, 
    id: 'mapbox.streets', 
    accessToken: 'xxx' 
}).addTo(mymap); 
var marker; 
mymap.on('click', function (e) { 
    if (marker) { 
    mymap.removeLayer(marker); 
    } 
    marker = new L.Marker(e.latlng).addTo(mymap); 
     if (window.XMLHttpRequest) { 
      // code for IE7+, Firefox, Chrome, Opera, Safari 
      xmlhttp = new XMLHttpRequest(); 
     } else { 
      // code for IE6, IE5 
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
     } 
     var user = <?php echo json_encode($userRow['userId']); ?>; 
     xmlhttp.open("GET","homemappositions.php?q="+ e.latlng + "&r=" + user, true); 
     xmlhttp.send(); 
}); 
}); 

</script> 

und das ist homemappositions.php:

<?php 
include_once('dbconnect.php'); 
    $r = $_GET['r']; 
    $q = $_GET['q']; 
    $query2 = mysqli_query($conn,"UPDATE users SET userPos =". $q ."WHERE userId=". $r); 
    echo "succesfull" ; 
?> 
+0

Die 'WHERE'-Klausel in der' update' Anweisung verwendet, was im Allgemeinen als Platzhalter verwendet wird, - das ist die Absicht? Normalerweise würde das mit einem 'WHERE col LIKE '% value%' verwendet werden. Daher würde ich denken, dass Ihre update-Anweisung keinen Benutzer findet, der eine Benutzer-ID'% % '??? – RamRaider

+0

behoben, aber immer noch nicht aktualisiert meine Datenbank – Peslis

+0

Wenn Sie die update SQL-Anweisung echo vor dem Versuch, es auszuführen, es sieht korrekt aus und führt es in einem Client GUI? – RamRaider

Antwort

0

Ich hoffe, die folgende könnte ein wenig helfen - da der ursprüngliche Code für SQL-Injection anfällig war, verwendet das folgende prepared statements, um gegen diese Bedrohung abzuschwächen. Die Update-Anweisung verwendet nicht die % Wilcard, da ich sicher war, dass dies wahrscheinlich die Ursache für das Fehlschlagen des Updates war - obwohl Ihr letzter Kommentar zu der Annahme führt, dass ein anderes Problem vorliegt.

Die Ajax-Funktion benötigt nicht unbedingt eine Callback-Funktion, aber sie würde das Debuggen erleichtern, wenn es einen gab - im folgenden Code ist es nur eine einfache alert-Anweisung, könnte/sollte aber ausgeklügelter sein. das `%` Symbol sowohl als Präfix und Suffix auf den Wert

<?php 
    ob_start(); 
    session_start(); 

    require_once 'dbconnect.php'; 

    if(!empty($_SESSION['user'])){ 
     exit(header('Location: index.php')); 
    } 

    $uid=false; 
    $user=$_SESSION['user']; 

    /* The only column used later is userid so only select that column */ 
    $sql='select `userid` from `users` where userid=?'; 

    /* Prepare the sql */ 
    $stmt=$conn->prepare($sql); 

    if($stmt){ 

     /* Bind the parameters to the sql statement */ 
     $stmt->bind_param('s', $user); 
     $res=$conn->execute(); 

     /* Assign retrieved results */ 
     if($res && $stmt->num_rows==1){ 
      $stmt->bind_result($uid); 
      $stmt->fetch(); 
      $stmt->free_result(); 
      $stmt->close(); 
     } 
    } 
?> 

<script> 
    $(document).ready(function(){ 
     var mymap = L.map('map').setView([51.505, -0.09], 13); 
     L.tileLayer('https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token=xxx', { 
      attribution: 'Map data &copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery © <a href="http://mapbox.com">Mapbox</a>', 
      maxZoom: 18, 
      id: 'mapbox.streets', 
      accessToken: 'xxx' 
     }).addTo(mymap); 

     var marker; 
     mymap.on('click', function(e) { 
      if(marker) { 
       mymap.removeLayer(marker); 
      } 
      marker = new L.Marker(e.latlng).addTo(mymap); 

      <?php 
       echo "var user='$uid';"; 
      ?> 

      var xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP'); 
      xmlhttp.onload=function(){ 
       alert(this.response); 
      }; 
      xmlhttp.onerror=function(err){ 
       alert(err); 
      }; 
      xmlhttp.open('GET', 'homemappositions.php?q='+e.latlng+'&r='+user, true); 
      xmlhttp.send(); 
     }); 
    }); 
</script> 







<?php 

    include 'dbconnect.php'; 

    $r = !empty($_GET['r']) ? $_GET['r'] : false; 
    $q = !empty($_GET['q']) ? $_GET['q'] : false; 

    if($r && $q){ 
     $sql='update `users` set `userpos`=? where `userid`=?'; 
     $stmt=$conn->prepare($sql); 
     if($stmt){ 
      $stmt->bind_param('ss', $q, $r); 
      $result=$stmt->execute(); 
      echo $result ? 'good' : 'bad'; //ugly 
     } 
    } else { 
     exit('Bad Foo - two parameters are required'); 
    } 
?> 
Verwandte Themen