|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Sep 2006
Messaggi: 154
|
[PHP + AJAX] Modifica variabile
Volevo sapere se è normale questo problema:
Tramite ajax lancio la richiesta ad una pagina php. Nel fil php c'è una variabile $accesso e 3 funzioni. La variabile $accesso è dichiarata globale all'interno delle funzioni visto che deve essere modificata. Le funzioni girano, infatti quando tramite ajax (richiesta.responseText Il mio problema è che la variabile $accesso non viene modificata.. E' normale? Cioè con un responseText ovviamente ricevo solo una stringa, ma la funzione nel file PHP è cmq eseguita e se la variabile globale all'interno di quella funzione viene modificata, perchè non dovrebbe farlo? E' un problema che mi sta facendo impazzire...
__________________
www.zeldalegend.it |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Ci vuole il codiceeeeeeeeeeeee, altrimenti se vuoi tiro a indovinare!!
Dai provo, mmm vediamo...c'è un errore da qualche parte!!! Forse ci ho preso. |
|
|
|
|
|
#3 | |
|
Member
Iscritto dal: Sep 2006
Messaggi: 154
|
Quote:
Questo è un frammento della pagina php: Codice PHP:
Questo è il frammento Ajax che chiama la pagina: Codice:
function controllo(div,campo,input,input2){
//Assegno alla variabile div_esito il valore della variabile div che INSPIEGABILMENTE non può essere riutilizzata (per la funzione asincrono();
div_esito = div;
document.getElementById(div).innerHTML = "controllo...";
server = 'sys/controllodati.php?campo=' + campo + '&input=' + input + '&input2=' + input2;
richiesta = new XMLHttpRequest();
richiesta.onreadystatechange = updateasincrono;
richiesta.open("GET", server, true);
richiesta.send(server);
}
function updateasincrono()
{
if ((richiesta.readyState == 4) && (richiesta.status == 200))
{
var esito = richiesta.responseText;
document.getElementById(div_esito).innerHTML = esito;
}
}
Codice HTML:
<td><label for="email"><?php voc($l,20)?>:</label></td> <td colspan="3"><div class="form_text"><div><input type="text" name="email" id="email" size="40" onBlur="controllo('avvisomail','mail',this.value);"/></div></div></td> <td colspan="3"><div class="avviso"><div id="avvisomail"></div></div></td>
__________________
www.zeldalegend.it |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Ma come fai a dire che non viene modificata visto che nel codice che hai postato non la controlli?
|
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Sep 2006
Messaggi: 154
|
Ovviamente la controllo con degli alert(), in un altro frammento.
__________________
www.zeldalegend.it |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
|
|
|
|
|
|
#7 | |
|
Member
Iscritto dal: Sep 2006
Messaggi: 154
|
Quote:
Solo se chiamo la funzione dal php controllamail($input) allora ovviamente mi modifica $accesso, ma chiamando il file con ajax no...
__________________
www.zeldalegend.it |
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Si ma fammi capire, tu controlli la variabile richiamando tutto il file?
Se è così è ovvio che stampi sempre il valore alla quale la inizializzi...il file php ha vita e vibilità a se stante, ogni volta che lo "esegui" lo spazio di lavoro si ricrea. |
|
|
|
|
|
#9 | |
|
Member
Iscritto dal: Sep 2006
Messaggi: 154
|
Quote:
Vuoi che ti posto gli interi files? tutti e tre?
__________________
www.zeldalegend.it |
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
si dai posta tuuto, incluso dove fai il controllo della variabile globale così ci capiamo meglio.
|
|
|
|
|
|
#11 |
|
Member
Iscritto dal: Sep 2006
Messaggi: 154
|
Questo è il file registrazione:
Codice HTML:
<form name="registrazione" method="post"> <fieldset> <legend><?php voc($l,19)?></legend> <table class="rec"> <tr> <td><label for="email"><?php voc($l,20)?>:</label></td> <td colspan="3"><div class="form_text"><div><input type="text" name="email" id="email" size="40" onBlur="controllo('avvisomail','mail',this.value);"/></div></div></td> <td colspan="3"><div class="avviso"><div id="avvisomail"></div></div></td> </tr> <tr> <td><label for="pw"><?php voc($l,21)?>:</label></td> <td colspan="3"><div class="form_text"><div><input type="password" name="password" id="pw" size="40" onKeyUp="controllo('avvisopassword','password',this.value);"/></div></div></td> <td colspan="3"><div id="avvisopassword"></div></td> </tr> <tr> <td><label for="pw"><?php voc($l,62)?>:</label></td> <td colspan="3"><div class="form_text"><div><input type="password" name="passwordCorrispondenza" id="pwCorrispondenza" size="40" onChange="controllo('avvisocorrispondenza','passwordCorrispondenza',this.value,pw.value);"/></div></div></td> <td colspan="3"><div id="avvisocorrispondenza"></div></td> </tr> </table> </fieldset> <fieldset> <legend><?php voc($l,22)?></legend> <table class="rec"> <tr> <td><label for="nome"><?php voc($l,23)?>:</label></td> <td colspan="3"><div class="form_text"><div><input type="text" name="nome" id="nome" size="40"/></div></div></td> </tr> <tr> <td><label for="cognome"><?php voc($l,24)?>:</label></td> <td colspan="3"><div class="form_text"><div><input type="text" name="cognome" id="cognome" size="40"/></div></div></td> </tr> <tr> <td><label><?php voc($l,25)?>:</label></td> <td><label for="giorno" class="sx"><?php voc($l,26)?></label> <div class="form_text"><div> <select name="giorno" id="giorno"> <?php for($i=1; $i<=31; $i++) { echo "<option value='".$i."'>".$i."</option>"; }?> </select> </div></div> </td> <td><label for="mese" class="sx"><?php voc($l,27)?></label> <div class="form_text"><div> <select name="mese" id="mese"> <?php for($i=1; $i<=12; $i++) { echo "<option value='".$i."'>".voc_cal($l, $i)."</option>"; }?> </select> </div></div> </td> <td><label for="anno" class="sx"><?php voc($l,28)?></label> <div class="form_text"><div> <select name="anno" id="anno"> <?php for($i=date("Y",time()); $i>=1900; $i--) { if ($i==date("Y",time())){ echo "<option selected value='".$i."'>".$i."</option>"; } else{ echo "<option value='".$i."'>".$i."</option>"; } }?> </select> </div></div> </td> <td colspan="3"><div id="avvisodata"></div></td> </tr> </table> </fieldset> <fieldset id="immagine"> <legend><?php voc($l,29)?></legend> <p class="verifica"><?php voc($l,30)?>:</p> <table class="rec"> <tr> <td> <div id="sfondocodice" style="background:#fff url('sys/image.php') center center;"> <img src="images/sfondocodice.png"/> </div> <a class="minipul" href="javascript:void(0);" onClick="immagine();"><span><?php voc($l,33)?></span></a> </td> <td> <table id="codcol"> <tr> <td><label for="codice"><?php voc($l,31)?>:</label></td> <td><div class="form_text"><div><input type="text" name="codice" id="codice" size="40" onBlur="controllocodice(this.value,'<?php echo $testo?>');"/></div></div></td> <td><div id="avvisocodice"></div></td> </tr> <tr> <td><label for="colore"><?php voc($l,32)?>:</label></td> <td><div class="form_text"><div> <select name="colore" id="colore" onChange="controllocolore(this.value, '<?php echo $colore?>');"> <option value="">Seleziona il colore</option> <?php for($i=39;$i<=42;$i++) {?> <option value="<?php voc($l,$i)?>"><?php voc($l,$i)?></option> <?php }?> </select> </div></div></td> <td><div id="avvisocolore"></div></td> </tr> </table> </td> </tr> <tr> <td></td> </tr> </table> </fieldset> <div class="centrato"> <center> <table class="rec"> <tr> </tr> <td><div class="pulsante"><div><input type="button" value="<?php voc($l,35)?>" onClick="invioform(<?php echo "'".$accesso."'";?>);" /></div></div></td> <td><div class="pulsante"><div><input type="button" value="<?php voc($l,36)?>" onClick="javascript:history.go(-1);"/></div></div></td> </tr> </table> </center> </div> </form> </body> Codice PHP:
Codice:
var accesso = false;
function controllo(div,campo,input,input2){
//Assegno alla variabile div_esito il valore della variabile div che INSPIEGABILMENTE non può essere riutilizzata (per la funzione asincrono();
div_esito = div;
document.getElementById(div).innerHTML = "controllo...";
server = 'sys/controllodati.php?campo=' + campo + '&input=' + input + '&input2=' + input2;
richiesta = new XMLHttpRequest();
richiesta.onreadystatechange = updateasincrono;
richiesta.open("GET", server, true);
richiesta.send(server);
}
function updateasincrono()
{
if ((richiesta.readyState == 4) && (richiesta.status == 200))
{
var esito = richiesta.responseText;
document.getElementById(div_esito).innerHTML = esito;
}
}
function invioform(accesso1) {
alert(accesso1);
if (accesso == true && accesso1 == 0) {
document.registrazione.submit();
} else if (accesso1==1 && accesso==false){
document.getElementById('esito_registrazione').innerHTML="<h3>Attenzione: codice o colore di sicurezza e dati inseriti scorretti (controllare i suggerimenti accanto ai campi).</h3>";
}else if(accesso ==false){
document.getElementById('esito_registrazione').innerHTML="<h3>Attenzione: Codice o colore di sicurezza errato.</h3>";
} else if (accesso1==1){
document.getElementById('esito_registrazione').innerHTML="<h3>Attenzione: dati inseriti scorretti (controllare i suggerimenti accanto ai campi).</h3>";}
}
__________________
www.zeldalegend.it |
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
La variabile che passi a invioForm() è la variabile $accesso nel momento in cui hai caricato la pagina, inoltre quella non verra mai modificata fuori dal file registrazione.html.
|
|
|
|
|
|
#13 | |
|
Member
Iscritto dal: Sep 2006
Messaggi: 154
|
Quote:
La soluzione quale sarebbe? Grazie mille
__________________
www.zeldalegend.it |
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Spiegati meglio, scrivi codice vero per favore.
|
|
|
|
|
|
#15 |
|
Member
Iscritto dal: Sep 2006
Messaggi: 154
|
Credo di avere capito il problema: ogni volta che il file ajax chiama quella pagina php la variabile $accesso torna al valore 2 vero? (dichiarazione iniziale).
Il mio obbiettivo è lasciare invariate le modifiche a quella variabile (se un utente inserisce tutti i campi corretti, la variabile $accesso sarà 0). C'è un modo per fare questo? tu come procederesti?
__________________
www.zeldalegend.it |
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Quando fai la chiamata ajax, fai in modo che il valore di ritorno comprenda la variabile $accesso.
|
|
|
|
|
|
#17 | |
|
Member
Iscritto dal: Sep 2006
Messaggi: 154
|
Quote:
Mi posteresti un frammento di codice esemplificativo?
__________________
www.zeldalegend.it |
|
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Ti basta fare un echo della variabile
Codice PHP:
|
|
|
|
|
|
#19 | |
|
Member
Iscritto dal: Sep 2006
Messaggi: 154
|
Quote:
Senti e se io volessi ritornare sia $accesso che il messaggio html? E' possibile? Una soluzione sarebbe concatenarle nell'echo, ma poi dovrei splittarle (ad esempio le concateno $accesso+html, mi prendo il primo carattere del responseText ed ho il valore della variabile accesso).
__________________
www.zeldalegend.it |
|
|
|
|
|
|
#20 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Esattamente come hai detto, considera che sarà poi una stringa e non un valore numerico.
Sarebbe comunque una cosa un pò "sporca". |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:06.




















