[Aiuto] Problema con form.submit() dentro un ciclo.

venerdì 28 febbraio 2014 - 12.52
Tag Elenco Tags  Windows 7  |  MySQL 5.1  |  Chrome  |  Firefox  |  Javascript  |  HTML 5

Math01 Profilo | Newbie

[RISOLTO]Ciao a tutti, ho il seguente problema in cui mi arrovello da giorni:

devo recuperare dei dati da una tabella html che ho prelevato da una sito esterno con "file_get_contents($url)" tramite php lato server, lato client ho creato uno script java che legge i dati dalla tabella, una riga alla volta, li memorizza negli input di form, già predisposto alla cosa, e quindi con il comando "form.submit();" dovrebbe inviare la riga ad una pagina php che memorizza i dati in un server sql.
[ERRORE] cosa succede invece : lo script lavora iterativamente come voluto ma il comando .submit() viene eseguito solo alla fine dello script inviando solo l'ultima riga letta.(che viene memorizzata correttamente). Qualcuno ha idee su come risolvere?

function load(tab) { var i=0; var j=0; var x=0; var y=0; with(document) { while (typeof getElementsByTagName('td')[j] !=='undefined'){ for (i=0;i<=3;i++) { x=i+1; str=getElementsByTagName('td')[j+i].textContent; if (getElementById('in'+(x+y)).name.indexOf('Var')!==-1){ if (str.indexOf("UP")!==-1){ getElementById('in'+(x+y)).value="UP"; str=str.replace("UP",""); }else if (str.indexOf("DOWN")!==-1){ getElementById('in'+(x+y)).value="DOWN"; str=str.replace("DOWN",""); } y++; } str=str.replace(/\s+$|^\s+/g,""); getElementById('in'+(x+y)).value=str; } getElementById('form'+tab).submit(); // return true; j=j+4; y=0; } }

alx_81 Profilo | Guru

>Ciao a tutti, ho il seguente problema in cui mi arrovello da giorni:
ciao e benvenuto su dotnethell.it

>devo recuperare dei dati da una tabella html che ho prelevato
>da una sito esterno con "file_get_contents($url)" tramite php
>lato server, lato client ho creato uno script java che legge
>i dati dalla tabella, una riga alla volta, li memorizza negli
>input di form, già predisposto alla cosa, e quindi con il comando
>"form.submit();" dovrebbe inviare la riga ad una pagina php che
>memorizza i dati in un server sql.
>[ERRORE] cosa succede invece : lo script lavora iterativamente
>come voluto ma il comando .submit() viene eseguito solo alla
>fine dello script inviando solo l'ultima riga letta.(che viene
>memorizzata correttamente). Qualcuno ha idee su come risolvere?
in generale non seguirei proprio la strada che proponi, perchè la submit è all'interno del ciclo e quindi, dopo che la pagina si ricarica non hai lo stato del ciclo a cui sei arrivato.
Perchè invece non usi ajax? Siccome hai a server la get dell'html, fai un altro metodo che, oltre che fare la lettura della tabella, fa anche l'iterazione per fare le insert u sql..
Da js chiami solamente il metodo lato server, nulla di più..
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

Math01 Profilo | Newbie

Grazie, ma mi toccherà imparare Ajax, avevo anche pensato di usare 'innerHtml', e creare tanti form quanti sono le righe della tabella, che verranno eseguiti tutti insieme. che ne pensate?

alx_81 Profilo | Guru

So che è dura guardarsi qualcosa di nuovo, ma eviterei accrocchi fatti tanto per far andare le cose.
quello è un lavoro da fare a server, e credimi che se installo jquery, fare Ajax è una cavolatina..
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

Math01 Profilo | Newbie

Come tu mi hai fatto notare l'url di partenza c'è l'ho già lato server, cosi ho pensato di trattare tutto in php, l'idea era di applicare
$r=preg_match_all("|<tr.*?>(.*?)<\/tr>|", $ar,$match); $ex=explode("</td>",$match );
ma preg_match_all restituisce sempre un array del tipo array([0]=>array(), ... ,[29]=>array()) , ho verificato la regex su vari siti e funziona, provato con altre varianti ma nulla, preg_match_all non funziona.
Comunque ho risolto cosi: essendo che le tabelle html hanno una struttura simile alla funzione array(); ho pensato di sostituire i tag tabella con la sintassi di array(), poi ho scritto la stringa ottenuta in un file .php tramite fopen, infine includo il file nel mio script ed il gioco è fatto, tabella trasformata in array.
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

il fatto che se trovassi il modo di far funzionare preg_match_all, tutto questo sarebbe molto piu semplice, e poi perchè non funziona?

alx_81 Profilo | Guru

>il fatto che se trovassi il modo di far funzionare preg_match_all,
>tutto questo sarebbe molto piu semplice, e poi perchè non funziona?
mi piacerebbe aiutarti, ma di php in generale non so praticamente nulla.
Mi spiace veramente tanto..

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

Math01 Profilo | Newbie

Grazie comunque, lo segnalo come risolto e poi magari apro un altra discussione su preg_match_all.

alx_81 Profilo | Guru

>Grazie comunque, lo segnalo come risolto e poi magari apro un
>altra discussione su preg_match_all.
ciao, oltre che mettere [RISOLTO] puoi premere cortesemente il pulsante ACCETTA dedicato?
Così compare come risolto anche dal feed a monte

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5