PDA

View Full Version : interrogare db con javascript


fifth
25-01-2007, 15:13
Ciao a tutti. io ho in un file html una select di questo tipo:

<select name=choice size=1 onchange=go()>
<option value=uno>One</option>
<option value=due>Two</option>
<option value=tre>Three</option>
</select>

e una funzione js

function go(){
var choice = document.getElementById("choice").options[document.getElementById("choice").selectedIndex].value;
alert("choice = " + choice);
}

la risposta viene restituita corretta.
A questo punto ho bisogno di usare questa variabile per interrogare il database. Come posso realizzare questo passaggio nella funzione js?

Grazie ;)

0rph3n
25-01-2007, 15:33
usare un linguaggio client side per interrogare un db è un po' improponibile, devi passare a qualche script server side che possa interagire appunto con il db

'iao

yorkeiser
25-01-2007, 15:42
Se vuoi farlo lato client con tecnologia Java, puoi utilizzare tranquillamente Applet e jdbc; con il solo javascript la vedo dura, a meno che non ti appoggi ad un linguaggio di scripting o qualche altro accrocchio, come da post di Orph3n

MEMon
25-01-2007, 15:56
Semplice usi javascript inseme all'oggetto xmlhttp, e il tutto prende il nome di AJAX ( alla gente piace cambiare nome alle cose per farle sembrare più complicate e affiscinanti...).
Ecco un esempio di una richiesta http ad uno script php, utilizzando il metodo GET(ma si può fare anche con POST)



var myRequest=null;

function CreateXmlHttpObject(myFunction){
var xmlhttpObject=null;
try{
xmlhttpObject=new XMLHttpRequest();
}catch(e){
try{
xmlhttpObject=new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){
xmlhttpObject=new ActiveXObject("Microsoft.XMLHTTP");
}
}
xmlhttpObject.onreadystatechange=myFunction;
return xmlhttpObject;
}

function httpReturnResponse(){
if(myRequest.readyState==4&&myRequest.status==200){
var readText=myRequest.responseText;
}

function httpRequest(){
myRequest=CreateXmlHttpObject(httpReturnResponse);
myRequest.open("GET",php_link+"?variabile="+variabile,true);
myRequest.send(null);
}

E' semplicissimo, te chiami la funzione httpRequest, la quale crea un oggetto xmlHttp che si occupa di interrogare lo scritp php(link_php è l'indirizzo) passandogli la variabile tramite GET(variabile=12345).
Dopo tornerà indietro il codice della pagina web chiamata, quindi torna indietro tutto quello di cui nello script php ne fai l'echo.
Quindi se farai l'echo di un risultato ottenuto dal DB, in readText avrai quel risultato ;)

giannola
25-01-2007, 16:22
Semplice usi javascript inseme all'oggetto xmlhttp, e il tutto prende il nome di AJAX ( alla gente piace cambiare nome alle cose per farle sembrare più complicate e affiscinanti...).
Ecco un esempio di una richiesta http ad uno script php, utilizzando il metodo GET(ma si può fare anche con POST)



var myRequest=null;

function CreateXmlHttpObject(myFunction){
var xmlhttpObject=null;
try{
xmlhttpObject=new XMLHttpRequest();
}catch(e){
try{
xmlhttpObject=new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){
xmlhttpObject=new ActiveXObject("Microsoft.XMLHTTP");
}
}
xmlhttpObject.onreadystatechange=myFunction;
return xmlhttpObject;
}

function httpReturnResponse(){
if(myRequest.readyState==4&&myRequest.status==200){
var readText=myRequest.responseText;
}

function httpRequest(){
myRequest=CreateXmlHttpObject(httpReturnResponse);
myRequest.open("GET",php_link+&variabile=12345,true);
myRequest.send(null);
}

E' semplicissimo, te chiami la funzione httpRequest, la quale crea un oggetto xmlHttp che si occupa di interrogare lo scritp php(link_php è l'indirizzo) passandogli la variabile tramite GET(variabile=12345).
Dopo tornerà indietro il codice della pagina web chiamata, quindi torna indietro tutto quello di cui nello script php ne fai l'echo.
Quindi se farai l'echo di un risultato ottenuto dal DB, in readText avrai quel risultato ;)

php che è ovviamente un linguaggio server sided cui faceva menzione 0rph3n. ;)
scordatevi di poter usare il solo javascript per poter eseguire una connessione al db. :ciapet:
Non rientra nelle sue potenzialità. :mc:
Oltretutto MeMon sfruttare per i propri programmi la creazione di oggetti activeX equivale a renderli compatibili solo con windows, visto che sono una invenzione microsoft.

0rph3n
25-01-2007, 16:35
Oltretutto MeMon sfruttare per i propri programmi la creazione di oggetti activeX equivale a renderli compatibili solo con windows, visto che sono una invenzione microsoft.
quei due new ActiveXObject se noti sono dentro ad un blocco catch che cattura l'errore generato da new XMLHttpRequest()...
prova un po' ad immaginare perchè ;)

'iao

giannola
25-01-2007, 16:38
quei due new ActiveXObject se noti sono dentro ad un blocco catch che cattura l'errore generato da new XMLHttpRequest()...
prova un po' ad immaginare perchè ;)

'iao
:doh: :stordita: :doh: :muro: :( :doh: :D
può bastare ? ;)

0rph3n
25-01-2007, 16:44
http://www.forumeye.it/invision/style_emoticons/default/famale.gif


:D :friend:

MEMon
25-01-2007, 19:54
sarà ma io lo utilizzo in una mia estensione che ovviamente va anche su linux.

fifth
26-01-2007, 10:38
Semplice usi javascript inseme all'oggetto xmlhttp, e il tutto prende il nome di AJAX ( alla gente piace cambiare nome alle cose per farle sembrare più complicate e affiscinanti...).
Ecco un esempio di una richiesta http ad uno script php, utilizzando il metodo GET(ma si può fare anche con POST)



var myRequest=null;

function CreateXmlHttpObject(myFunction){
var xmlhttpObject=null;
try{
xmlhttpObject=new XMLHttpRequest();
}catch(e){
try{
xmlhttpObject=new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){
xmlhttpObject=new ActiveXObject("Microsoft.XMLHTTP");
}
}
xmlhttpObject.onreadystatechange=myFunction;
return xmlhttpObject;
}

function httpReturnResponse(){
if(myRequest.readyState==4&&myRequest.status==200){
var readText=myRequest.responseText;
}

function httpRequest(){
myRequest=CreateXmlHttpObject(httpReturnResponse);
myRequest.open("GET",php_link+&variabile=12345,true);
myRequest.send(null);
}

E' semplicissimo, te chiami la funzione httpRequest, la quale crea un oggetto xmlHttp che si occupa di interrogare lo scritp php(link_php è l'indirizzo) passandogli la variabile tramite GET(variabile=12345).
Dopo tornerà indietro il codice della pagina web chiamata, quindi torna indietro tutto quello di cui nello script php ne fai l'echo.
Quindi se farai l'echo di un risultato ottenuto dal DB, in readText avrai quel risultato ;)

sto provando. ma poi, l'interrogazione mysql la piazzo nel file php giusto? e come variabile da inserire nella query che nome metto? quello passato nella funzione js? il mio "choice"?

MEMon
26-01-2007, 10:51
certo, e fai in modo che la pagina php stampi il risultato della query con echo

fifth
26-01-2007, 16:59
non riesco a passargli quella variabile. nel file js io attribuisco

var choice = document.getElementById("choice").options[document.getElementById("choice").selectedIndex].value;

ok, poi torna al file php in cui inserisco la query, ma se nella query inserisco come criterio di scelta il mio choice, non funziona. probabilmente perchè non sa che choice è il nome assegnato dal file js alla scelta fatta nella select...

0rph3n
26-01-2007, 17:10
ma la pagina php da dove la chiami?
dovrai usare javascript per appiccicarci il parametro alla fine!
del tipo:
document.location.href = "paginaInterfacciaDB.php?choice=" + choice;
o comunque qualcosa del genere!
e poi nella pagina php ti dovrai recuperare il parametro:
$choice = $_GET['choice'];

'iao

fifth
26-01-2007, 17:34
Io un file "Index.php" in cui eseguo del codice javascript per far comparire due menu a tendina diversi in base alla scelta effettuta in un primo menu a tendina. Da qui vado tramite form ad un secondo file "auth.php" in cui propongo una terza scelta con menu a tendina ed è in questo che richiamo con l'evento onchange della select il file js che deve eseguire codice in stile ajax, quindi creare l'oggetto xmlhttprequest, leggere il valore della select precedente (choice) e fin qui va bene.
A questo punto, quando termina l'esecuzione, il controllo mi torna al file auth.php e non riesco a capire come fare per eseguire la query mysql in cui inserire il valore di choice memorizzato nel file js.

spero di essere riuscito a spiegarmi... :) lo so, sono un pò incasinato :help:

MEMon
26-01-2007, 17:38
choice gliela devi pssare con GEt ovviamente, forse ti sfugge come funziona.
In pratica ad uno script PHP puoi passare una variabile tramite l'URL, basta mettere un "?" dopo l'URL seguito dal nome della variabile e dal suo valore.
esempio:
Vuoi pssare alla pagina php(http://tuodominio/pippo.php) la variabile choice, quindi scrivi l'URL così:
http://tuodominio/pippo.php?choice=12345

ora nello script php per riprendere la variabile ti basta fare:
$scelta=$_GET['choice']
vedrai che $scelta ora vale 12345 e la puoi utilizzare come ti pare.

Vediamo con AJAX ora:

var php_link="http://tuodominio/pippo.php";
var choice=12345;

function httpRequest(){
myRequest=CreateXmlHttpObject(httpReturnResponse);
myRequest.open("GET",php_link+"?choice="+choice,true);
myRequest.send(null);
}


ed ecco che hai passato la variabile choice al php.

fifth
26-01-2007, 17:57
In "auth.php" ho scritto

echo"
<select name=choice size=1 onchange=httpRequest()>
<option value=uno>One</option>
<option value=due>Two</option>
<option value=tre>Three</option>
</select>
";

$scelta=$_GET['choice'];

nel file js:

function httpRequest(){
var php_link="getTopicsByCountryID.php";
var choice = document.getElementById("choice").options[document.getElementById("choice").selectedIndex].value; alert("choice = " + choice);

myRequest=CreateXmlHttpObject(httpReturnResponse);
myRequest.open("GET",php_link+"?choice="+choice,true);
myRequest.send(null);

}

ma quando apre il file "auth.php" mi da l'errore

Notice: Undefined index: choice in C:\www\auth.php

MEMon
26-01-2007, 18:50
che significa quande apre il file?? :confused:

Comunque non va bene così, il php deve solo fare la query e stampare il risultato, la richiesta la devi lanciare da un altro file...

fifth
27-01-2007, 14:36
mmmm......... ok

a proposito... conosci qualche script che mi permette di visualizzare il grafico a torta relativo ai dat estratti dalla query?

fifth
28-01-2007, 12:51
Più che altro il mio problema è come riuscire a passare le variabili che ho nel mio file php al file js...

########### file.php ###########

<?php
$var_uno = 1;
$var_uno = 2;
$var_uno = 3;
?>
<html>
<body onload=func()>

</body>
</html>


########### file.js###########

function func(){
/* ??? */
}

anche solo per stamparle con una alert.....

MEMon
28-01-2007, 13:07
le devi stampare con un echo, e poi ti ritorneranno indietro dopo la chiamata AJAX e le potrai recuperare con responseText, come ti ho già detto due volte.
Rileggiti tutto

fifth
28-01-2007, 13:21
Se ho capito quello che mi dici, il valore della variabile lo fissi nel file js e poi lo passi al file php che lo usa per l'interrogazione, giusto? Io devo fare il contrario: il valore della variabile viene settato nel file php e devo poterlo passare così com'è al file js che lo deve usare per disegnare il grafico

MEMon
28-01-2007, 13:25
Puoi fare entrambe le cose, io ti ho detto che puoi mandare una variabile al file php per fare la query e poi puoi mandare il risultato della query al file js per utilizzarlo...

Comunque, se vuoi leggere una variabile php basta che ne fai l'echo, così quando fai la chiamata ajax al file php la puoi leggere.

file php

$pippo="ciao";
echo($pippo);


ora se fai la chiamata di questo file ti vedrai tornare "ciao".
readText=obj.responseText;
readText ora contiene "ciao".
capito ora?

MEMon
28-01-2007, 13:26
Semplice usi javascript inseme all'oggetto xmlhttp, e il tutto prende il nome di AJAX ( alla gente piace cambiare nome alle cose per farle sembrare più complicate e affiscinanti...).
Ecco un esempio di una richiesta http ad uno script php, utilizzando il metodo GET(ma si può fare anche con POST)



var myRequest=null;

function CreateXmlHttpObject(myFunction){
var xmlhttpObject=null;
try{
xmlhttpObject=new XMLHttpRequest();
}catch(e){
try{
xmlhttpObject=new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){
xmlhttpObject=new ActiveXObject("Microsoft.XMLHTTP");
}
}
xmlhttpObject.onreadystatechange=myFunction;
return xmlhttpObject;
}

function httpReturnResponse(){
if(myRequest.readyState==4&&myRequest.status==200){
var readText=myRequest.responseText;
}

function httpRequest(){
myRequest=CreateXmlHttpObject(httpReturnResponse);
myRequest.open("GET",php_link+"?variabile="+variabile,true);
myRequest.send(null);
}

E' semplicissimo, te chiami la funzione httpRequest, la quale crea un oggetto xmlHttp che si occupa di interrogare lo scritp php(link_php è l'indirizzo) passandogli la variabile tramite GET(variabile=12345).
Dopo tornerà indietro il codice della pagina web chiamata, quindi torna indietro tutto quello di cui nello script php ne fai l'echo.
Quindi se farai l'echo di un risultato ottenuto dal DB, in readText avrai quel risultato ;)
Comunque qui ho spiegato tutto...

fifth
28-01-2007, 14:13
scusa, ma ho le idee moooooolto confuse..... sto provando a programmare in ajax da poco......

avrei bisogno di un aiuto approfondito... :fagiano:

io ho scritto nel file php

<?php
$var = "ciao";
echo "var;
?>
<html>
<head>
<body onload=httpRequest()></body>
</head>
</html>

nel file js:

function httpRequest(){
readText=obj.responseText;
alert(readText);
}

e mi esce l'errore

'obj' non è definito

:muro: :muro: :muro:

MEMon
28-01-2007, 14:53
Ascolta ma ti ho scritto del codice funzionante perchè non provi?
Fai un bel copia-incolla del codice che ti ho scritto io.

var myRequest=null;
var php_link= //mettici l'indirizzo del tuo file.php

function CreateXmlHttpObject(myFunction){
var xmlhttpObject=null;
try{
xmlhttpObject=new XMLHttpRequest();
}catch(e){
try{
xmlhttpObject=new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){
xmlhttpObject=new ActiveXObject("Microsoft.XMLHTTP");
}
}
xmlhttpObject.onreadystatechange=myFunction;
return xmlhttpObject;
}

function httpReturnResponse(){
if(myRequest.readyState==4&&myRequest.status==200){
var readText=myRequest.responseText; //readText è la variabile che passi dal php a javascript
alert(readText);
}

function httpRequest(variabile){
myRequest=CreateXmlHttpObject(httpReturnResponse);
myRequest.open("GET",php_link+"?variabile="+variabile,true);
myRequest.send(null);
}

httpRequest("ciao"); //"ciao" è la variabile che passi al file php, mettici quello che vuoi


Ecco prova questo, copia e incollalo, poi definisci php_link con il percorso del file .php che vuoi interrogare.

fifth
01-02-2007, 09:30
Ciao. purtroppo non mi funziona...
la alert ReadText mi riporta una finestra con dentro tutto il codice della pagina link fino al messaggio di errore che ho inserito nel codice php e che faccio stampare io se non è riuscito ad eseguire la query

MEMon
02-02-2007, 09:38
ovvio è così che funziona, ti riporta il codice della pagina, per quello ti serve creare lo script php in modo che stampi solo il risultato della query... te l'ho scritto più volte eh.

fifth
03-02-2007, 09:05
azz....
comunque il fatto di fargli stampare il risultato era una prova che volevo fare di mio. il vero scopo è fargli creare un grafico a torta con i risultati della query... Per adesso ho fatto memorizzare i risultati della query in un array. Tu per caso conosci uno script che tramite ajax preleva i valori dell'array e mi costruisce il grafico?