Back to top

Autore Topic: maledetto ajax  (Letto 4121 volte)

Offline kolbac

  • Esploratore
  • **
  • Post: 63
    • Mostra profilo
maledetto ajax
« il: 16 Mar 2007, 14:43:52 »
Ciao ragazzi, sto muovendo i primi passi con ajax, seguendo esempi su internet e varie guide, ma non sono ancora riuscito a capire se è possibile ritornare una variabile o un vettore mediante la richiesta XMLHttpRequest.


Codice: [Seleziona]

 

<script type="text/javascript">
//<![CDATA[
var myRequest = null;

function CreateXmlHttpReq(handler) {
  var xmlhttp = null;
  try {
    xmlhttp = new XMLHttpRequest();
  } catch(e) {
    try {
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch(e) {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
  }
  xmlhttp.onreadystatechange = handler;
  return xmlhttp;
}

function myHandler2() {
    if (myRequest.readyState == 4 && myRequest.status == 200) {
        e = document.getElementById("ex4result");
    e.innerHTML = myRequest.responseText;


    }
}

function esempio4() {
var nome = document.f1.id.value;
var database ="<?php echo $vettoreConnection['db']; ?>";
<!-- --> document.f1.database.value;
var host = "<?php echo $vettoreConnection['host']; ?>";
var user = "<?php echo $vettoreConnection['user']; ?>";
var password = "<?php echo $vettoreConnection['password']; ?>";
var prefix = "<?php echo $vettoreConnection['prefix']; ?>";
    myRequest = CreateXmlHttpReq(myHandler2);
   myRequest.open("POST","components/com_map/lecce.php","true");
   myRequest.setRequestHeader("content-type", "application/x-www-form-urlencoded");   
     
   myRequest.setRequestHeader("connection", "close");
 
    myRequest.send("id=" + nome + "&database=" + database + "&host=" + host + "&user=" + user + "&password=" + password + "&prefix=" + prefix );

 //]]>
   </script>
 <form name="f1">
Nome: <input type="input" name="id">

<input type="button" onClick="esempio4()" value="Visualizza cognome" /><br />

Risultato: <div id="ex4result"></div>
</form>






questo è myfile.php

Codice: [Seleziona]

 

$conn= mysql_connect($_GET[host], $_GET[user], $_GET[password]) or die("Connessione non riuscita: ".mysql_error());
$sql = "SELECT via, nome FROM ".$_GET[prefix]."map where id=".$_GET['id'];
$result = mysql_db_query($_GET[database],$sql,$conn) or die ("errore " . mysql_error());
$array = mysql_fetch_array($result);

print "VIA: ".$array['via']."<br>";


?>




in questo caso mi viene modificato il div ex4result con la stampa a video di $array['via'] e fin qui tutto bene. Il problema è che a me non serve visualizzarlo ma passarlo ad un'altra funzione.
Come posso fare?



Grazie.

Offline kolbac

  • Esploratore
  • **
  • Post: 63
    • Mostra profilo
Re: maledetto ajax
« Risposta #1 il: 19 Mar 2007, 11:24:31 »
Allora ragazzi...??? nessuno sa come posso recuperare i valori?

sto provando in questo modo

function myHandler2() {
    if (myRequest.readyState == 4 && myRequest.status == 200) {
          miafunzione(myRequest.responseText);
}}

il problema è che il file php che ho postato precedentemente mi restituisce un vettore e non riesco ad accedere ai vari elementi che sono contenuti dal vettore.

Offline napo

  • Instancabile
  • ******
  • Post: 6532
  • Sesso: Maschio
  • NO MP TECNICI, verranno ignorati
    • Mostra profilo
Re: maledetto ajax
« Risposta #2 il: 19 Mar 2007, 11:27:45 »
Mi sfugge la connessione con Joomla. ???


AllOne.it Consulting: http://www.allone.it Gens Joomla, il : http://www.gensjoomla.org  [url=http://www.allone.it/jooml

Offline kolbac

  • Esploratore
  • **
  • Post: 63
    • Mostra profilo
Re: maledetto ajax
« Risposta #3 il: 19 Mar 2007, 18:11:06 »
Sto sviluppando un componente per joomla vorrei utilizzare delle richieste asincrone...

Offline napo

  • Instancabile
  • ******
  • Post: 6532
  • Sesso: Maschio
  • NO MP TECNICI, verranno ignorati
    • Mostra profilo
Re: maledetto ajax
« Risposta #4 il: 19 Mar 2007, 18:17:27 »
Mi sfuggono le connessioni...
  • lo script JS invoca la pagina PHP
  • la pagina PHP effettua un'elaborazione e restituisce il risultato a JS
  • JS cosa deve fare con questo risultato?
  • qual'è il formato del risultato?


AllOne.it Consulting: http://www.allone.it Gens Joomla, il : http://www.gensjoomla.org  [url=http://www.allone.it/jooml

Offline kolbac

  • Esploratore
  • **
  • Post: 63
    • Mostra profilo
Re: maledetto ajax
« Risposta #5 il: 20 Mar 2007, 09:59:54 »
Come prima cosa vorrei dire che il codice che vedi è un po' approssimativo perchè stavo facendo delle prove.
JS dovrà utilizzare i dati restituiti dalla query contenuta nel file php, passandoli ad altre funzioni.
Come si vede dal file php il risultato non è altro che un vettore contenente il record restituito dalla query.
Fondamentalmente il problema di recuperare i dati l'ho risolto, ma mi si pone un altro problema, direi molto più importante, riguardante la sicurezza.
Utilizzando firebug di firefox e qualsiasi cosa simile è possibile vedere il contenuto delle variabili.  :(
Come faccio ad evitare ciò? il metodo post non dovrebbe essere un metodo sicuro per inviare dati?

Codice: [Seleziona]
  myRequest.open("POST","components/com_map/lecce.php","true");
   myRequest.setRequestHeader("content-type", "application/x-www-form-urlencoded");   
     
   myRequest.setRequestHeader("connection", "close");
 
    myRequest.send("id=" + nome + "&database=" + database + "&host=" + host + "&user=" + user + "&password=" + password + "&prefix=" + prefix );

Hai qualche idea su come risolvere questo problema? o indicarmi qualche buona guida che parli di ciò?
Ciao e grazie per l'interessamento

Offline napo

  • Instancabile
  • ******
  • Post: 6532
  • Sesso: Maschio
  • NO MP TECNICI, verranno ignorati
    • Mostra profilo
Re: maledetto ajax
« Risposta #6 il: 20 Mar 2007, 10:03:08 »
Aspetta un attimo...
Il file PHP restituisce questo:

Codice: [Seleziona]
<?php
print "VIA: ".$array['via']."<br>";
?>

Ma quello che arriva a JS è una stringa, non un vettore.

Per quanto riguarda il problema di sicurezza, l'idea di passare tutti i parametri di connessione è veramente pessima. Tali parametri sono tutti contenuti nel file configuration.php, pertanto è inutile passarli: includi il file ed usali.


AllOne.it Consulting: http://www.allone.it Gens Joomla, il : http://www.gensjoomla.org  [url=http://www.allone.it/jooml

Offline kolbac

  • Esploratore
  • **
  • Post: 63
    • Mostra profilo
Re: maledetto ajax
« Risposta #7 il: 20 Mar 2007, 10:28:24 »
Il file php l'ho modificato in questo modo. Ora proverò a seguire i tuo consiglio di importare configuration.php

Codice: [Seleziona]
$conn= mysql_connect($_POST[host], $_POST[user], $_POST[password]) or die("Connessione non riuscita: ".mysql_error());
$sql = "SELECT via, nome FROM ".$_POST[prefix]."map where id=".$_POST['id'];
$result = mysql_db_query($_POST[database],$sql,$conn) or die ("errore " . mysql_error());
$array = mysql_fetch_array($result);

?>

    <input type="hidden" id="via" value="<?php echo $array[0]; ?>">
    <input type="hidden" id="nome" value="<?php echo $array[1]; ?>">
    <input type="hidden" id="lng" value="<?php echo $_POST[lng]; ?>">
    <input type="hidden" id="lat" value="<?php echo $_POST[lat]; ?>">

quindi quello che mi restituiste sono campi di testo nascosti contenenti i valori che mi ha restituito la query.

Il file JS l'ho modificato in questo modo.
Codice: [Seleziona]

 var myRequest = null;

function CreateXmlHttpReq(handler) {
  var xmlhttp = null;
  try {
    xmlhttp = new XMLHttpRequest();
  } catch(e) {
    try {
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch(e) {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
  }
  xmlhttp.onreadystatechange = handler;
  return xmlhttp;
}

function myHandler2() {
    if (myRequest.readyState == 4 && myRequest.status == 200) {
        e = document.getElementById("contenitoredinamico");
e.innerHTML = myRequest.responseText;
vettore=new Array;
vettore[0]= document.getElementById("via").value;
vettore[1]= document.getElementById("nome").value;
var lng= document.getElementById("lng").value;
var lat= document.getElementById("lat").value;

mytabs(vettore,lng,lat);
   
    }
}

// permette di eseguire la query impostata in lecce.php e poi richiama myHandler2() dove verranno recuperati i risultati
function myclick(nome,lng,lat) {

    myRequest = CreateXmlHttpReq(myHandler2);
 
   myRequest.open("POST","components/com_map/lecce.php","false");
   myRequest.setRequestHeader("content-type", "application/x-www-form-urlencoded");   
     
   myRequest.setRequestHeader("connection", "close");
 
    myRequest.send("id=" + nome + "&database=" + database + "&host=" + host + "&user=" + user + "&password=" + password + "&prefix=" + prefix + "&lng="+ lng + "&lat=" + lat);

}


In teoria io volevo recuperare $array per poi passarlo a mytabs(vettore,lng,lat), ma utilizzano la funzione myHandler2() non riuscivo ad utilizzarlo, quindi ho dovuto usare document.getElementById("via").value; per recuperare i valori, metterli in vettore e passarli alla funzione mytabs.

Spero di essere stato un po' più chiaro.
Se hai altri suggerimenti sono ben graditi.

Offline napo

  • Instancabile
  • ******
  • Post: 6532
  • Sesso: Maschio
  • NO MP TECNICI, verranno ignorati
    • Mostra profilo
Re: maledetto ajax
« Risposta #8 il: 20 Mar 2007, 10:44:00 »
Tu stai lavorando con 2 tecnologie diverse, JS e PHP, che hanno ambienti di esecuzione differenti. E devi tenerne conto.
Tramite JS devi recuperare i valori del form (ossia testo puro) ed inviarli allo script PHP, anche via GET.
Non devi passare alcun dato sensibile di connessione al db!
Dopodichè lo script PHP, riceve i valori via GET, li elabora e fornisce un risultato, che è una stringa.
Poi sta a te gestire la stringa come meglio credi, utilizzando il formato che preferisci.
Ad esempio potresti restituire i valori separati da un separatore: VALORE1|VALORE2|VALORE3|...
O in alternativa trasferire oggetti veri e propri, serializzati mediante JSON.


AllOne.it Consulting: http://www.allone.it Gens Joomla, il : http://www.gensjoomla.org  [url=http://www.allone.it/jooml

Offline kolbac

  • Esploratore
  • **
  • Post: 63
    • Mostra profilo
Re: maledetto ajax
« Risposta #9 il: 20 Mar 2007, 12:03:40 »
Non riesco ad includere il file configuration.php
come faccio a darli il percorso assoluto?
posso passarli la cartella in cui è stato installato joomla come facevo prima o è pericolosa anche questa soluzione?

Offline napo

  • Instancabile
  • ******
  • Post: 6532
  • Sesso: Maschio
  • NO MP TECNICI, verranno ignorati
    • Mostra profilo
Re: maledetto ajax
« Risposta #10 il: 20 Mar 2007, 12:15:37 »
Non riesco ad includere il file configuration.php
come faccio a darli il percorso assoluto?

Codice: [Seleziona]
<?php
require_once("../configuration.php");
?>

Ovviamente devi inserire il percorso relativo, in base a dov'è  il tuo script.


AllOne.it Consulting: http://www.allone.it Gens Joomla, il : http://www.gensjoomla.org  [url=http://www.allone.it/jooml

Offline kolbac

  • Esploratore
  • **
  • Post: 63
    • Mostra profilo
Re: maledetto ajax
« Risposta #11 il: 20 Mar 2007, 13:14:02 »
Grazie di tutto.
Ora funziona perfettamente.

 



Web Design Bolzano Kreatif