Entra

View Full Version : [script] restituire un valore


iforumdelcarlo.salva
16-11-2005, 09:49
ciao,
io ho una pagina php in cui ho un ciclo for in cui all'interno del ciclo richiamo una funzione in javascript, a questa funzione dovrei fargli restituire un valore ma non so come fare, qualcuno può aiutarmi?


ciao e grazie

andbin
16-11-2005, 11:07
ciao,
io ho una pagina php in cui ho un ciclo for in cui all'interno del ciclo richiamo una funzione in javascript, a questa funzione dovrei fargli restituire un valore ma non so come fare, qualcuno può aiutarmi?


ciao e grazie
No no ... alt! php e javascript sono due cose ben diverse. php è un linguaggio "lato server" mentre javascript è un linguaggio "lato client". Se ti spieghi meglio (con un esempio) posso provare ad aiutarti. Ciao.

iforumdelcarlo.salva
16-11-2005, 11:16
<script>
function c()
{ somma = somma + 100; }
</script>
<?
for ($i = 0; $i < $n; $i++)
for ($k = 1; $k < 54; $k++)
{
?>
<script>
c();
</script>
<? } ?>

alla funzione c() ogni volta che la esegue devo fargli restituire il valore della variabile somma

(è un esempio stupido e senza senso)

0rph3n
16-11-2005, 11:37
in javascript per ritornare un valore si usa banalmente l'istruzione: return [valore];
nel caso del tuo esempio:

function c()
{
somma = somma + 100;
return somma;
}

comunque traduci quella funzione da javascript a PHP!

'iao

andbin
16-11-2005, 11:43
<script>
function c()
{ somma = somma + 100; }
</script>
<?
for ($i = 0; $i < $n; $i++)
for ($k = 1; $k < 54; $k++)
{
?>
<script>
c();
</script>
<? } ?>

alla funzione c() ogni volta che la esegue devo fargli restituire il valore della variabile somma

(è un esempio stupido e senza senso)
No, non funziona così. Permettimi di chiarirti alcune cose su php e javascript.
Quello che c'è tra <? e ?> è codice php e viene eseguito lato server, cioè dal server che ospita il sito. Il risultato, cioè tutto quello generato "dinamicamente" dal php più tutto il resto fuori dal <? ?>, viene spedito al browser. Quest'ultimo, elaborando la pagina, se javascript è abilitato, eseguirà l'eventuale codice javascript presente nella pagina.

Con il tuo codice succederebbe questo. Il browser riceverebbe una pagina con dentro:

<script>
function c()
{ somma = somma + 100; }
</script>
<script>
c();
</script>
<script>
c();
</script>
<script>
c();
</script>

... ecc.. ripetuto molte volte ...


Che ovviamente non è quello che ti aspetti.
Se non ti è chiaro, dimmelo. Ciao.

iforumdelcarlo.salva
16-11-2005, 13:48
si è quello che voglio io, richiamare una serie di volte la funzione c(); e assegnare il valore che mi dovrebbe restituire ad una variabile php

andbin
16-11-2005, 14:03
si è quello che voglio io, richiamare una serie di volte la funzione c(); e assegnare il valore che mi dovrebbe restituire ad una variabile php
Ma è proprio questo che non puoi fare. Una volta che il browser ha ricevuto la pagina html con dentro lo script per la funzione c() e la sequenza di N script che richiamano la funzione c(), tutto questo "vive" all'interno del browser. A questo livello, il php non esiste più.

iforumdelcarlo.salva
16-11-2005, 14:09
io devo eseguire una funzione javascript ogni volta che arrivo alla fine di un ciclo for, come faccio?

andbin
16-11-2005, 14:19
io devo eseguire una funzione javascript ogni volta che arrivo alla fine di un ciclo for, come faccio?
Sì, ma non riesco a capire perché dovresti usare un mix di php e javascript.
Perché non puoi fare una cosa del tipo?

<?
function c()
{
// fai quello che vuoi
return qualcosa;
}

for (...blah...)
for (...blah...)
{
c();
}
?>

Così sarebbe tutto in php.

iforumdelcarlo.salva
16-11-2005, 14:21
perchè devo usare un ocx e non so come mettere l'ocx dentro gli script oppure come posso prendere un valore che mi restituisce l'ocx da php.

andbin
16-11-2005, 14:58
perchè devo usare un ocx e non so come mettere l'ocx dentro gli script oppure come posso prendere un valore che mi restituisce l'ocx da php.
Premetto che non sono esperto di ocx (e degli ActiveX in generale). Comunque un controllo ActiveX lo si inserisce in una pagina html usando il tag "object". Una cosa del tipo:

<object id="miocontrollo" ...altri parametri dell'ocx...></object>
e poi da javascript:

<script>
...
miocontrollo.metodo ();
...
</script>

Premesso questo, resta il fatto che non puoi mixare php e javascript così banalmente. Prima ti ho chiesto se non potevi fare tutto in php. Ora, alla luce dell'ocx, mi chiedo se tu non possa "spostare" tutta l'elaborazione sul lato client e quindi in javascript.
Cioè la questione è la seguente: cosa devi fare di così importante in php (quindi sul server) con i dati che (in linea teorica) dovresti ricevere dall'ocx sul lato client???

iforumdelcarlo.salva
16-11-2005, 15:03
<object id="miocontrollo" ...altri parametri dell'ocx...></object>

questa riga non so come si mette negli script

andbin
16-11-2005, 15:36
<object id="miocontrollo" ...altri parametri dell'ocx...></object>

questa riga non so come si mette negli script
Uhm ... allora forse dovrei mostrarti un esempio di uso di controllo ActiveX. Purtroppo io non ne ho e quando cerchi qualcosa non la trovi mai!! Però però ho trovato adesso un esempietto sull'ActiveX del Macromedia Flash.

Vai a questo indirizzo:

Comunicazione da JavaScript e Flash (http://www.macromedia.com/it/support/flash/ts/documents/javascript_comm.htm#jtfc)

C'è un link a un file javascript_to_flash.zip. In quel pacchetto c'è un esempio di scripting di controllo ActiveX.
Spero di esserti stato di aiuto. Ciao.

iforumdelcarlo.salva
16-11-2005, 15:44
grazie ma anche qui fa già come faccio io, un po' script e un po' php

andbin
16-11-2005, 15:56
grazie ma anche qui fa già come faccio io, un po' script e un po' php
Guarda che nel file .zip che ti ho indicato ci sono 3 file: un .fla, un .html e un .swf e funziona tutto lato client (niente php!!).

iforumdelcarlo.salva
16-11-2005, 16:09
comunque se guardi il codice della pagina html il tag <object></object> viene messo nel codice html e non nello script, io ho bisogno di metterlo in uno script.

andbin
16-11-2005, 16:17
comunque se guardi il codice della pagina html il tag <object></object> viene messo nel codice html e non nello script, io ho bisogno di metterlo in uno script.
In che senso "metterlo in uno script"?? Non ho capito. Sai ... a quest'ora inizio sempre ad essere un po' fuso. ;)

iforumdelcarlo.salva
16-11-2005, 16:35
nel senso che io devo fare:
<script>
<object..>......</object>
</script>

andbin
16-11-2005, 16:57
nel senso che io devo fare:
<script>
<object..>......</object>
</script>
Continuo a non capire perché devi metterlo proprio all'interno di un blocco <script>. Normalmente il tag object lo puoi mettere dove vuoi, purché sia dentro il tag head oppure dentro il tag body.
Ovviamente se il controllo ActiveX fa qualcosa a video lo metti, giustamente, nel punto della pagina dove ti serve. Se invece è non visuale (fa solo calcoli o altro, ecc...) è, appunto, indifferente.
Ma in ogni caso il tag <script> si aspetta del codice e non un altro tag (non ho mai provato eh!, e non so cosa succederebbe).

iforumdelcarlo.salva
16-11-2005, 17:03
lo devo mettere nel blocco script perchè lo script deve eseguire delle operazioni, far partire l'ocx e poi fare altre operazioni nello script.

ciao

andbin
16-11-2005, 20:14
lo devo mettere nel blocco script perchè lo script deve eseguire delle operazioni, far partire l'ocx e poi fare altre operazioni nello script.

ciao
Ciao, allora, come premesso prima non sono esperto di controlli ActiveX, per cui non vorrei dire cavolate. Ho capito che il tuo script deve eseguire delle operazioni con il controllo ActiveX ma non per questo sei obbligato a metterlo dentro il tag script!
Mi sembra (non vorrei sbagliare) che il browser attivi i controlli ActiveX durante il caricamento della pagina e solo dopo averla caricata tutta (quando cioè avviene l'evento "onload") i controlli ActiveX sia "scriptabili" cioè gestibili da script.

Giusto per mia curiosità personale ho preso quell'esempio di script per il Macromedia Flash ed ho provato a "incapsulare" il tag <object> dentro un tag <script>. Risultato ... Internet Explorer, quando carico la pagina, mi fornisce l'errore: Errore durante l'esecuzione. Eseguire il debug? ecc...
Segno che evidentemente non "digerisce" bene il fatto di trovare un <object> dentro uno script.

iforumdelcarlo.salva
17-11-2005, 09:54
function c(numerodirecord)
{
dati = "";
for (i = 0; i < numerodirecord; i++)
{
for (k = 1; k < 54; k++)
{
document.write("<object classid=clsid:7EE27ED9-5062-4FCE-8585-E67C70C475BA id=EsportaDati1>");
document.write("<param name=NumRec value=" + i + ">");
document.write("<param name=Campo value=" + k + ">");
document.write("<param name=Tabella value=Ordini.tdb>");
document.write("</object>");
dati = dati + "×" + EsportaDati1.Valori + "×;";
}
dati = dati + "\n";
}
SetCookie("elencoordini", dati, null, null, null, false);
}


così facendo mi esegue n volte lo script però solo alla prima volta mi restituisce il valore mentre le altre volte mi dice "undefined"


ciao e grazie

andbin
17-11-2005, 10:23
function c(numerodirecord)
{
dati = "";
for (i = 0; i < numerodirecord; i++)
{
for (k = 1; k < 54; k++)
{
document.write("<object classid=clsid:7EE27ED9-5062-4FCE-8585-E67C70C475BA id=EsportaDati1>");
document.write("<param name=NumRec value=" + i + ">");
document.write("<param name=Campo value=" + k + ">");
document.write("<param name=Tabella value=Ordini.tdb>");
document.write("</object>");
dati = dati + "×" + EsportaDati1.Valori + "×;";
}
dati = dati + "\n";
}
SetCookie("elencoordini", dati, null, null, null, false);
}

Ciao, naturalmente sono del tutto ignaro su che cosa è e fa il tuo controllo. Però, a prima vista, posso dirti questo: nel tuo loop vedo che scrivi in modo dinamico sulla pagina una serie di <object>. Però ogni volta metti sempre id=EsportaDati1. Tieni presente che in una pagina html un "id" deve essere univoco! Non so se è questo il motivo per cui alla seconda volta non ti fornisce il risultato voluto.

iforumdelcarlo.salva
17-11-2005, 11:06
grazie del consiglio, ma come faccio a fare dinamico il numero dell'ocx?

per il primo punto (nell'object) non c'è problema ma nel secondo, quando riprendo i dati non so come far diventare dinamico l'ocx.

ciao

andbin
17-11-2005, 11:28
grazie del consiglio, ma come faccio a fare dinamico il numero dell'ocx?

per il primo punto (nell'object) non c'è problema ma nel secondo, quando riprendo i dati non so come far diventare dinamico l'ocx.

ciao
Certo, per l'id non è un gran problema, usi "... id=EsportaDati" + k ...
Quando invece devi fare EsportaDati1.Valori, puoi usare la funzione eval di javascript:

eval ("EsportaDati" + k + ".Valori")

(spero di averlo scritto giusto, provalo!)

iforumdelcarlo.salva
17-11-2005, 11:33
grazie mille scusa per il disturbo ma finalmente sono riuscito a risolvere il problema, ora funziona correttamente.


ciao e grazie mille.