Autor Zpráva
kedarh
Profil
Dobrý den,

mám kod.
HTML
<input id="place_text" type="text" class="input-xlarge" />

neco.php
<?php
require_once("config/config.php");

try {
if ( !isset($_REQUEST['term']) )
    exit;
    
        $db = new PDO($dsn, $username, $password);
        $db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
        
        $places = $db->query("SELECT * FROM markers WHERE places LIKE '%". mysql_real_escape_string($_REQUEST['term']) ."%'");
        $markers = $places->fetchAll();
         
        echo json_encode( $markers );
         
    } catch (Exception $e) {
        echo $e->getMessage();
    }
?>

Ale nevím jak přes Jquery předat hodnotu z input id="place_text" do mysql_real_escape_string($_REQUEST['term'] ...

Neví s někdo rady??

Předem moc děkuji!
final
Profil
pomocou ajaxu
Joker
Profil
kedarh:
Viz časté otázky v PHP sekci a Jak přenést proměnnou z javascriptu do PHP
kedarh
Profil
Děkuji za odpovědi.

Ale už jsem to všechno dávno prošel a prostě mi to nejde... Nevím jak dostat "hodnotu" textu do:
mysql_real_escape_string($_REQUEST['term'])

Ať se snažím jak chci, zatím nic nefungovalo...
shaggy
Profil
kedarh:
1. prečítal si si, čo je na stránke v[#3]? Všetky rady?
2. ukáž nám celý tvoj kód (javascriptové volanie aj php časť), nie iba jeden riadok.
pcmanik
Profil
kedarh:
V PDO na ošetrenie dát slúži iná funkcia.
Ukáž nám svoj JS kód, ako sa snažíš dostať ten text na stranu serveru.
kedarh
Profil
Tohle je celý můj JS kod:
 <script type="text/javascript">
 
function init() {
 
    var mapOptions = {
      zoom: 7,
      center: center,
      disableDefaultUI: true,
      mapTypeId: google.maps.MapTypeId.HYBRID
    }
     
    map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
    
}

 function makeRequest(url, callback) {
    var request;
    
    
    if (window.XMLHttpRequest) {
        request = new XMLHttpRequest(); // IE7+, Firefox, Chrome, Opera, Safari
    } else {
        request = new ActiveXObject("Microsoft.XMLHTTP"); // IE6, IE5
    }
    request.onreadystatechange = function() {
        if (request.readyState == 4 && request.status == 200) {
            callback(request);
        }
    }
    request.open("GET", url, true);
    request.send();
}

var map;
// Střed - geografický střed České republiky
var center = new google.maps.LatLng(49.7417099, 15.33489899999995);
var geocoder = new google.maps.Geocoder();
var infowindow = new google.maps.InfoWindow();


function displayLocation(markers) {
         
    var content =   '<div class="infoWindow"><strong>'  + markers.places + '</strong>'
                    + '<br/>'     + markers.places
                    + '<br/>'     + markers.type
                    + '<br/>'     + markers.desc + '</div>';
     
    if (parseInt(markers.lat) == 0) {
        geocoder.geocode( { 'places': markers.places }, function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
                 
                var marker = new google.maps.Marker({
                    map: map, 
                    position: results[0].geometry.markers,
                    title: markers.places
                });
                 
                google.maps.event.addListener(marker, 'click', function() {
                    infowindow.setContent(content);
                    infowindow.open(map,marker);
                });
            }
        });
    } else {
        var position = new google.maps.LatLng(parseFloat(markers.lat), parseFloat(markers.lng));
        var marker = new google.maps.Marker({
            map: map, 
            position: position,
            title: markers.places
        });
         
        google.maps.event.addListener(marker, 'click', function() {
            infowindow.setContent(content);
            infowindow.open(map,marker);
        });
    }
}

function search()
{
            
makeRequest('../neco.php', function(data) {
var data = JSON.parse(data.responseText);
 for (var i = 0; i < data.length; i++) {
            displayLocation(data[i]);
             
        }
    });

}

jQuery(document).ready(function(){
$('#place_text').autocomplete({source:'../auto.php', minLength:1,});
});

</script>

Teď tam nemám žádný kod pro dostaní textu na stranu serveru. Nejsem zas tak pokročilý, proto se ptám Vás. Šlo by to udělat podobně jako

jQuery(document).ready(function(){
$('#place_text').autocomplete({source:'../auto.php', minLength:1,});
});
????

U toho mám php kod takovyhle a vše funguje v pořádku
<?php
require_once("config/config.php");

if ( !isset($_REQUEST['term']) )
    exit;

$dblink = mysql_connect($server, $username, $password) or die( mysql_error() );
mysql_select_db($database);


$rs = mysql_query('select places from markers where places like "'. mysql_real_escape_string($_REQUEST['term']) .'%"order by places', $dblink);
$data = array();
if ( $rs && mysql_num_rows($rs) )
{
    while( $row = mysql_fetch_array($rs, MYSQL_ASSOC) )
    {
        $data[] = array(
            'label' => $row['places'] ,
            'value' => $row['places'] 
        );
    }
}

echo json_encode($data);
flush();

?>

PHP část jsem zveřejnil v první příspěvku. Jde mi o to, že když v
<input id="place_text" type="text" class="input-xlarge" />
budu mít napsanou nějakou hodnotu v inputu, zmáčknu tlačítko vyhledat a ta hodnota se přnese do toho Requestu v PHP části...
kedarh
Profil
Zkoušel jsem
$("#place_text").keyup(function()
{
var search = $(this).val();
var dataString = 'term='+ search;
$.ajax({
type: "GET",
url: "../xml.php",
data: dataString)}
}

ale bohužel nefunguje...
Joker
Profil
kedarh [#8]:
bohužel nefunguje
Dost možná funguje a ty požadavky odesílá, potíž je, že pak nic nedělá s vrácenými daty.
Chybí tam ještě success : function (data) { /* zpracuj data */ }
kedarh
Profil
A potřebuji něco dělat pak s těmi data? Protože stačí když tam jen odešlu data, o navrácení dat se mi postará neco.php, kde mi data vrátá v JSONU... A tt mi to zpracují již napsané funkce... nebo se pletu? Děkuji za odpověď.
Joker
Profil
kedarh:
A potřebuji něco dělat pak s těmi data?
No to já nevím :-) Ale asi jo.

Může být požadavek, který nic zajímavého nevrací a cíl je jen udělat nějakou akci na serveru. Ale i tak by se alespoň mělo návštěvníkovi dát najevo, jestli byl úspěšný nebo skončil chybou.
Ale už vzhledem k tomu, že to má vracet nějaká data v JSONu bych předpokládal, že je pak chcete převzít a nějak prezentovat.

mi data vrátá v JSONU... A tt mi to zpracují již napsané funkce.
A kde je funkce, která převezme a zpracuje výsledek toho požadavku? (Normálně právě to totiž mají zařídit success a error, které v ukázce nejsou definované.)
kedarh
Profil
Už jsem to pochopil. Když napíšu:
jQuery(document).ready(function(){
   $('#place_text').keyup(function()
    {
       var search = $(this).val();
       var dataString = 'term='+ search;
       $.ajax({
                 type: "GET",
                 url: "../xml.php",
                 data: dataString,
                  success : function (data) { 
                  alert(data);
                  window.location.href = "index.php"; }
              });
    
    }
)});

Vrátí mi to dialogový okno s hodnotama, který potřebuji. Problém je, že mi to vrací hned jak napíšu první charakter kvůli:
$('#place_text').keyup(function()

Šlo by tam použít něco jiného? Co by mi jen jakoby získalo celou hodnotu textu?

A pak vlastně po odeslání textu AJAXEM do neco.php, by měla tu hodnotu přebrat:
mysql_real_escape_string($_REQUEST['term'])

v sql dotazu, kde se provede sql dotaz a uloží se mi hodnoty do $markers.

A přes function displayLocation(markers) se zobrazí výsledky na mapě...
Joker
Profil
kedarh:
Tak použijte událost onchange místo onkeyup.
kedarh
Profil
Tak jsem to udělal takhle:

function test_ajax(){

var term = $('#place_text').val();
var dataString = 'term='+ term;
       $.ajax({
                 type: "GET",
                 url: "../xml.php",
                 data: dataString,
                  success : function (data) { 
                  alert(data);
                      window.location.href = "index.php"; }
              })
};

Po zmáčknutí tlačítka hledat se zavolá test_ajax() a vrátí mi požadovaný výsledek. Bohužel se pak nic nestane, což asi tedy znamená, že tato hodnota se nepředala do:

mysql_real_escape_string($_REQUEST['term'])

Je nějaká možnost jak to otestovat? Děkuji.


AJAXem tedy předávám hodnotu textu do url, ale potřeboval bych to udělat tak, abych dostal hodnotu do toho php souboru... nějaký nápad?
Joker
Profil
kedarh:
Tak se podívejte v nějakém nástroji na zachytávání odesílaných požadavků a odpovědí, co se posílá.

Nejspíš budou špatně předávaná ta data. Nevím, jaké všechny způsoby jQuery umožňuje, ale standardně to bývá přes JSON nějak takhle:
  data: {term : $('#place_text').val()} 
kedarh
Profil
Děkuji, moc mi to pomohlo. Mám to takhle
$.ajax({
         type: "POST",
         url: "../xml.php",
         data: {term : $('#place_text').val()},
         success : function (data) { 
                                    alert(data);
                                    window.location.href = "index.php"; }
       })
};

Hodnota textu se už předává. Teď už jenom vyřešit, kam ten kod AJAXU mam vlozit, aby pri zavolání ostatnich funkci ta hodnata tam byla...

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: