2012-02-08 19 views
0

データベースから値を取得し、XMLの一時ファイル(Google Maps webappの場合)に入力してから入力値に割り当てたいとします。変数クエリを使用してSQLにXMLを変換する

Select * from markers where 1のようにクエリが静的である場合、私はそれを行う方法を知っていますが、Select * from markers WHERE ID = $idのようなものを実行したいのですが、この$ idはPOSTのものです。

JSを持つHTMLファイルがあり、PHPアーカイブを呼び出してXMLを取得して解析します。それは静的なクエリで動作しますが、これらのクエリを動的にするにはどうすればいいですか?その変数をJS関数からPHPファイルに渡すにはどうしたらいいですか?ここで

は、XMLを取得するために私のコードです:

<?php 
    $username="SOMEUSER"; 
    $password="SOMEPASSS"; 
    $database="SOMEUSER_marcadoresMapas"; 

    function parseToXML($htmlStr) 
    { 
     $xmlStr=str_replace('<','&lt;',$htmlStr); 
     $xmlStr=str_replace('>','&gt;',$xmlStr); 
     $xmlStr=str_replace('"','&quot;',$xmlStr); 
     $xmlStr=str_replace("'",'&apos;',$xmlStr); 
     $xmlStr=str_replace("&",'&amp;',$xmlStr); 
     return $xmlStr; 
    } 

    // Opens a connection to a mySQL server 
    $connection=mysql_connect (localhost, $username, $password); 
    if (!$connection) { 
     die('Not connected : ' . mysql_error()); 
    } 

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

    // Select all the rows in the markers table 
    $query = "SELECT * FROM markers WHERE clave"; 
    $result = mysql_query($query); 
    if (!$result) { 
     die('Invalid query: ' . mysql_error()); 
    } 

    header("Content-type: text/xml"); 

    // Start XML file, echo parent node 
    echo '<markers>'; 

    // Iterate through the rows, printing XML nodes for each 
    while ($row = @mysql_fetch_assoc($result)){ 
     // ADD TO XML DOCUMENT NODE 
     echo '<marker '; 
     echo 'name="' . parseToXML($row['name']) . '" '; 
     echo 'address="' . parseToXML($row['address']) . '" '; 
     echo 'lat="' . $row['lat'] . '" '; 
     echo 'lng="' . $row['lng'] . '" '; 
     echo 'telefono="' . $row['telefono'] . '" '; 
     echo 'zona="' . $row['zona'] . '" '; 
     echo 'ciudad="' . $row['ciudad'] . '" '; 
     echo 'email="' . $row['email'] . '" '; 
     echo 'piso="' . $row['piso'] . '" '; 
     echo 'tipo="' . $row['tipo'] . '" '; 
     echo 'erasmus="' . $row['erasmus'] . '" '; 
     echo 'nhabitaciones="' . $row['nhabitaciones'] . '" '; 
     echo 'plazas="' . $row['plazas'] . '" '; 
     echo 'equipHabita="' . $row['equipHabita'] . '" '; 
     echo 'nbanos="' . $row['nbanos'] . '" '; 
     echo 'salon="' . $row['salon'] . '" '; 
     echo 'cocina="' . $row['cocina'] . '" '; 
     echo 'electrodomesticos="' . $row['electrodomesticos'] . '" '; 
     echo 'garaje="' . $row['garaje'] . '" '; 
     echo 'internet="' . $row['internet'] . '" '; 
     echo 'calefaccion="' . $row['calefaccion'] . '" '; 
     echo 'sexo="' . $row['sexo'] . '" '; 
     echo 'precio="' . $row['precio'] . '" '; 
     echo 'superficie="' . $row['superficie'] . '" '; 
     echo 'fecha="' . $row['fecha'] . '" '; 
     echo 'otros="' . $row['otros'] . '" '; 
     echo 'id="' . $row['id'] . '" '; 
     echo '/>'; 
    } 

    //echo 'name="' . parseToXML('&','&amp;', $row['name']) . '" '; 

    // End XML file 
    echo '</markers>'; 
?> 

そしてここでは、PHPファイルを呼び出し、XMLを取得JSです:私は何をしたいか

function downloadUrl(url, callback) { 
    var request = window.ActiveXObject ? 
     new ActiveXObject('Microsoft.XMLHTTP') : 
     new XMLHttpRequest; //en cierto modo es una API, acepta requests HTTP. 

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

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

downloadUrl("phpsqlajax_genxml2.php", function(data) { 
    var xml = parseXml(data); 
    var markers = xml.documentElement.getElementsByTagName("marker"); //coge todos los markers 
    for (var i = 0; i < markers.length; i++) { //coge los atributos de los markers 
     var name = markers[i].getAttribute("name"); 
     var address = markers[i].getAttribute("address"); 
     var telefono= markers[i].getAttribute("telefono"); 
     var precio=markers[i].getAttribute("precio"); 
     //var type = markers[i].getAttribute("type"); 
     var point = new google.maps.LatLng(//crea LatLng a partir de Lat Long de los markers 
      parseFloat(markers[i].getAttribute("lat")), 
      parseFloat(markers[i].getAttribute("lng"))); 
     var html = "Nombre:" + name + "<br>Direccion:" + address+"<br>Telefono:"+telefono+"<br>Precio:"+precio; 
     var marker = new google.maps.Marker({ //posiciona los markers 
     map: map, 
     position: point 
     }); 
     bindInfoWindow(marker, map, infoWindow, html); //pone la ventana de información 
    } 
    }); 
} 

は、関数のようなものですdownloadUrl(url、callback、id)、POST経由でIDを送信します。

これは可能ですか、どの方法を使用する必要がありますか?

ありがとう、私の説明が不十分で申し訳ありません。

答えて

1

JavaScript側では、downloadUrl()関数の3番目のパラメータを追加できます。そして、POSTを使用する代わりに

request.open('POST', url, true); 

を取得し、PHP側のキャッチに要求

var params = 'id='+id; 
request.send(params); 

でIDを送信するために、着信リクエスト変数をフィルタリングするために開いたコマンドを設定します。それをクエリに追加します。

$id = filter_input(INPUT_POST, 'id', FILTER_SANITIZE_NUMBER_INT); 
$query = "SELECT * FROM markers WHERE id = {$id}"; 
+0

あなたは素晴らしいです:-) – danielrozo

関連する問題