in effetti ha ragione, ho provato io il suo script e semplicemente il js non parte, ho anche corretto gli errori che avevo fatto io e l'apice in più che aveva messo lui, ma niente, inoltre la pagina risulta pesantissima
in effetti ha ragione, ho provato io il suo script e semplicemente il js non parte, ho anche corretto gli errori che avevo fatto io e l'apice in più che aveva messo lui, ma niente, inoltre la pagina risulta pesantissima
Ho trovato l'errore.
Usi document.write all'interno della funzione. Quando la richiami la pagina è già carica (window.onload) il contenuto della pagina si svuota e allora perdi il suo vecchio contenuto (form, script).
strano però, la prova che ho fatto io non fa proprio partire lo script javscript, quindi oltre a quello ci deve essere altro
Ragazzi semplifichiamo le cose ;)
index.html:
elevato.js:Codice HTML:<HTML> <HEAD> <TITLE>X Javascripter</TITLE> <script src="elevato.js" type="text/javascript"></script> </HEAD> <BODY>Hello world :) <form name="f" action="database.php" method="post"> <input type="hidden" name="nome"> </form> </BODY> </HTML>
database.php:Codice HTML:function compilaForm() { var form = document.forms.f; nome=prompt("Come ti chiami?",""); form.nome.value = nome; form.submit(); } window.onload = compilaForm;
file.txt: vuotoCodice PHP:
<?php
$file = 'file.txt'; // specifica il percorso del file qui
$code = "{$_POST['nome']} \n---\n"; // specifica la riga da aggiungere al file
$fh = fopen($file, 'a');
if(fwrite($fh, $code))
echo 'Dati inseriti!';
else
echo 'Errore';
fclose($fh);
?>
-----
Provate con i vostri occhi e i vostri browser ;)
Pagina
TXT
Ha ragione Javascript il problema sono i documwnt.write...per qualche motivo quando li metto non passa al php...
Ultima modifica di bozzysblog : 23-06-2010 alle ore 13.46.25
Leggi il post sopra, il problema sono quelle dannate document.write ;) Perchè fanno questo scherzetto?
Interagiscono con il window.onload = compilaForm;?
ora che hai tolto tutta quella roba funziona, il motivo del malfunzionamento dei document.write, come ha detto javascripter, è che li usi quando il documento non si é ancora caricato, quindi cancella il form e per questo non funziona, prova a fare in un altreo modo:
nel file js, sostituisci tutti i document write con:Codice HTML:<body> testo<br/> <div id="testo"></div><br/> //Qui il form che c'é prima
così non sovrascrive il form ma "riempie" il divCodice:document.getElementById('testo').innerHTMl += "Il testo che vuoi tu<br/>";
Da quanto ho capito viene creata una variabile "testo" string che viene incollata nell'htm...
Interessante =D grazie worldpixel :)
Ma dovrò cambiarla ogni volta vero?
E poi per inserire qualche variabile tipo "nome" al testo come faccio?
Va bene tipo:
document.getElementById('testo').innerHTMl += "<p></p><p>COMMENTO SU SAPONETTA: <b>"+saponetta+"</b>";
O devo fare altro?
Ultima modifica di bozzysblog : 23-06-2010 alle ore 15.17.39
non è una variabile, ma un id!
Tipo
Ciao!Codice HTML:<div id='testo'></div>
Ultima modifica di alemoppo : 23-06-2010 alle ore 15.20.23
regolamento altervista_______________ regolamento forum
Non vedo gli id nel codice sorgente della pagina guardate:
index.php e comunque non funzia più...
Guardatevi la sorgente, dentro c'è anche il link di elevato.js...
Ma forse si deve aggiornare il server...
io li vedo, comunque non serve che metti un div per ogni testo, ne basta uno solo, perché l'operatore += accoda la nuova stringa alla precedente
poi sostituisci tutti gli <p></p> vuoti con il tag <br/> che serve per andare a capo
Ultima modifica di worldpixel : 23-06-2010 alle ore 16.30.59
No scherzavo non funziona:
Osservate attentamente il listato della index e della .js citati nella sorgente
http://bozzysblog.altervista.org/Prova/index.html se andate al link vi farà due finestrelle ma lasciatele perdere, osservate e vedrete che anche se c'è un id nell .js non viene scritto, e non perchè c'è lo sfondo nero ma perchè non funzia...che accade?
Questa è la linea trascurata dal browser: document.getElementById('testo').innerHTMl += "NOME UTENTE REGISTRATO CON SUCCESSO: "+nome+"</p>";
Ultima modifica di bozzysblog : 23-06-2010 alle ore 17.07.59
Ho guardato velocissimamente un po lo script e mi sono saltate all'occhio alcune cose:
1- si scrivenon come lo hai scritto tu!Codice HTML:document.getElementById('testo').innerHTML
2- sostituisciconCodice HTML:form.nome.value = nome;..se vuoi fare come hai fatto te, devi scrivereCodice HTML:document.f.nome.value = nome;!Codice HTML:var form = document.f;
3- saponetta che è?? Dove è inizializzata?? cosa vale?? dove è dichiarata???
Al massimo devi scrivere..prima di postare qui, cerca di cavartela da solo e non prendere la "pappa fatta"; lo dico soltanto per il tuo bene, altrimenti non imparerai mai. Impara anche ad usare la utilissima "console degli errori" (se usi firefox), meglio ancora se abbinata con firebug. La console la trovi sotto "strumenti", mentre firebug è un addons di firefoxCodice HTML:document.f.saponetta.value
A parte che, come detto prima, la L è maiuscola.. poi all'inizio il div con id testo non è inizializzato.. cioè la prima assegnazione è bene non farla con il "+=", ma soltanto con "="... so benissmo che funziona ugualmente, ma è una brutta abitudine (a mio avviso) non inizializzare le "variabili" (anche se in questo caso, ad alto livello, non è una vera e propria variabile)... Poi in altri linguaggi potreste ritrovarvi in sgradevoli situazioniOriginalmente inviato da worldpixel
Ciao!
Ultima modifica di alemoppo : 23-06-2010 alle ore 18.25.49
regolamento altervista_______________ regolamento forum
la l minuscola é un errore di battitura, la parte di:
é giusta, in quanto form é inizializzato come:Codice:form.nome.value = nome;
cosa intendi con il div con id testo non é inizializzato?Codice:var form = document.forms.f;
Mica non è inizializzato, in quel momento innerHTML è una stringa vuota.
E' come dire che:
è errato, quando è una procedura corretta!Codice:var pippo = ''; pippo += 'ciao';
Per quanto riguarda il form, è meglio abituarsi ad usare document.forms per accedere al form. ( e per essere ancora più pignoli document.forms.nome_form.elements per accedere ai suoi elementi )
Ultima modifica di javascripter : 23-06-2010 alle ore 18.52.31
Io nel sorgente vedo:
che è scorretto.Codice HTML:var form = document.forms.f; nome=prompt("Come ti chiami?","nome e cognome"); form.nome.value = nome;
Così è corretto:
Codice HTML:var form = document.f; nome=prompt("Come ti chiami?","nome e cognome"); form.nome.value = nome;
Intendo che all'inizio non sai dentro il div cosa c'é.. potrebbero esserci dei valori indesiderati (in HTML non accade, ma è bene prendere una buona abitudine ad inizializzare correttamente gli elementi...)
Ciao!
EDIT:
Nel caso nostro, non vedo dove fa il primo assegnamento .. e comunque non ho detto che è errato, nemmeno scorretto, ma è una buona abitudine inizializzare gli elementi prima di "aggiungere" qualcosa. Ho capito cosa intendi: il div è di per sé vuoto, perché è creato in questo modo:Originalmente inviato da javascripter
Ma è bene prendere abitudine di inizializzare sempre gli elementi... (anche se in questo caso è già inizializzato)Codice HTML:<div id='testo'></div>
ma forms[] è un array e andrebbe usato con le quadre, se non erro... (su questo non son molto sicuro )Originalmente inviato da javascripter
Ciao!
Ultima modifica di alemoppo : 23-06-2010 alle ore 19.02.57
regolamento altervista_______________ regolamento forum
Fossi in te proverei, prima di fare false affermazioni ;)
In realtà per javascript anche un array è un oggetto :)!
Le quadre si usano per qualcosa di dinamico!
Codice:var nome_dinamico = 'form', form = document.forms[nome_dinamico];
Ultima modifica di javascripter : 23-06-2010 alle ore 19.08.57
, ti ho risposto proprio per questo.
Un oggetto è accessibile in entrambi i modi sia con il . sia con le []
Accedere con le graffe serve per rendere tutto più dinamico, evitando di usare eval:Codice:var obj = { a: 'non lo so', b: '.....' }; alert(obj['a'] + ' - ' + obj.a);
Inoltre, typeof [] e typeof {} restituiscono entrambi object. Quindi la differenza tra array e object in realtà è minima, gli array vengono usati per creare semplici liste [1, 2, 3 ,4].Codice:var obj = {}; function assegna(nome, valore) { obj[nome] = valore; // con eval, qualcosa del genere: eval('obj.' + nome + '="' + valore + '"'); // orrendo :P }
Ultima modifica di javascripter : 23-06-2010 alle ore 19.44.41
Ragazzi eheh non litigate...e poi mi da fastidio che arriva il primo che passa, e solo perchè non ha letto tutti i post e trova una stringa intitolata "saponetta" mi dice che devo fare pratica...
ma per favore se proprio vuoi aiutarci leggiti tutto il problema e dacci una mano veramente ;)
Allora avete trovato un accordo per quale procedura è meglio utilizzare per mandare tante stringe inserite da prompt su un database? Potendo intanto ad interagire con delle scritture sulla html tra alcuni prompt senza interagire con il processo di invio dati al php?
1-
...dove ho scritto che devi far pratica?? Ho detto che, prima di prendere la pappa fatta, dovresti provare da solo a sbatterci la testa ... e poi ho visto che non hai usato il mio consiglio ..altrimenti non avresti scritto quello che ho quotato.
-----
2- non mi pare abbiamo litigato anzi... ho imparato qualcosa
Ciao!
EDIT:
Per la prima domanda, secondo me il modo migliore è l'utilizzo di ajax, nativo o tramite jQuery.Originalmente inviato da bozzysblog
La seconda domanda non l'ho capita
Ciao!
________________________
EDIT2:
@javascripter: una curiosità: in javascript anche un array è un oggetto ??? no, vero?
Ultima modifica di alemoppo : 23-06-2010 alle ore 20.55.40
regolamento altervista_______________ regolamento forum
Dunque ricominciamo dall'inizio ;)
Il mio progetto è un po' più lungo e c'era anche la stringa saponetta ma ho tolto il 90% per semplificare il progetto:
Creare una pagina interattiva con dei prompt che ti chiedano alcune domande, e tra un prompt e l'altro venga anche scritto del testo normale, sulla pagina mia index.html, con stringhe in mezzo...
E poi, alla fine della pagina, le stringhe vengano inviate ad un file di testo tramite un database.php...tutto qui ;)
Dunque avevo semplificato il mio progetto in questo modo:
File elevato.js:
File index.html:Codice HTML:function compilaForm() { var form = document.forms.f; nome=prompt("Come ti chiami?","nome e cognome"); form.nome.value = nome; document.getElementById('testo').innerHTMl += "<p>Commenta su facebook ;) </p>"; // invia il form form.submit(); } window.onload = compilaForm;
File database.php:Codice HTML:<html> <head> <title>SPAMMATAAA!!!</title> <script src="elevato.js" type="text/javascript"></script> </head> <body> Ciao qua dovrebbe comparire un Commenta su facebook ↓ <div id="testo"></div> <form name="f" action="database.php" method="post"> <input type="hidden" name="nome"> </form> </body> </html>
E poi il file.txt, che è vuoto...Codice PHP:
<?php
$file = 'file.txt'; // specifica il percorso del file qui
$code = "{$_POST['nome']}\n---\n"; // specifica la riga da aggiungere al file
$fh = fopen($file, 'a');
if(fwrite($fh, $code))
echo 'Dati inseriti!';
else
echo 'Errore';
fclose($fh);
?>
Allora, cosa devo fare per fare in modo che la pagina giri, tra le vostre tante proposte? ;)
Il tutto lo vedete qui ;)
Ultima modifica di bozzysblog : 23-06-2010 alle ore 22.14.30 Motivo: Modificato dopo risposta di Worldpixel grazie :)
c'é un errore nel body, non hai messo la parte <div id="testo"></div>
Giustissimo ora è corretto
Ma ora provo a mettere un prompt dopo il
Per farvi vedere che l'id non si vuole scrivere così com'è :)Codice HTML:document.getElementById('testo').innerHTMl += "<p>Commenta su facebook ;) </p>";
Quindi come va scritto?
url
Ultima modifica di bozzysblog : 23-06-2010 alle ore 22.43.10
nel file elevato.js metti questo codice:
in questo modo teoricamente aspetta 5 secondi prima di inviare il formCodice:function compilaForm() { var form = document.forms.f; nome=prompt("Come ti chiami?","nome e cognome"); form.nome.value = nome; document.getElementById('testo').innerHTMl += "<p>Commenta su facebook ;) </p>"; window.alert('Bene ora dovresti leggere "commenta su facebook ;)" e poi dovrebbe andare al php e scrivere "Dati inseriti"'); // invia il form setTimeout(form.submit, 5000); } window.onload = compilaForm;
Fico! Ma...la mia domanda rimane, come faccio a inserire del testo sulla pagina tra un prompt e l'altro? ;)
"Commenta su facebook ;)" non compare, eppure c'è tra le istruzioni, come devo modificare questa istruzione
?Codice HTML:document.getElementById('testo').innerHTMl += "<p>Commenta su facebook ;) </p>";
Grazie ;)
esattamente come ti ho detto poco fa, il prolema che c'é é che appena chiudi il prompt viene inviato il form e quindi finisci nella pagina database.php, prova a mettere il setTimeout (sempre che funzioni, non sono molto pratico con quello)
Ehm.. scusate se mi (ri)intrometto... sembrerò stressante ma....
Ho detto oggi che quello corretto è:Codice HTML:innerHTMl
...a volte mi sembra di parlare al ventoCodice HTML:innerHTML
Ciao!
EDIT:
Come ho detto oggi, la cosa più "giusta" sarebbe di inviare i dati tramite ajax (nativamente o con jQuery).Fico! Ma...la mia domanda rimane, come faccio a inserire del testo sulla pagina tra un prompt e l'altro? ;)
"Commenta su facebook ;)" non compare, eppure c'è tra le istruzioni, come devo modificare questa istruzione
Altrimenti un modo più semplice è quello di reindirizzare i dati nella stessa pagina ed aggiornando via via i campi... una cosa del genere:
Ecco qui un esempio --> Per uscire, premere "ok" lasciando "nome e cognome"Codice PHP:
<?php
if(isset($_POST['nome']))
{
$file = 'file.txt'; // specifica il percorso del file qui
$code = "{$_POST['nome']}\n---\n"; // specifica la riga da aggiungere al file
$fh = fopen($file, 'a');
if(fwrite($fh, $code))
echo 'Dati inseriti!'; #in questo sorgente non ha senso
else
echo 'Errore'; #in questo sorgente non ha senso
fclose($fh);
}
if(file_exists('file.txt'))
{
echo '
<html>
<head>
<title>SPAMMATAAA!!!</title>
<script src="elevato.js" type="text/javascript"></script>
</head>
<body>
Ciao qua dovrebbe comparire un Commenta su facebook ?';
$arr = file('file.txt');
foreach($arr as $valore)
echo '<div id="testo">'.$valore.'</div>';
echo '
<form name="f" action="" method="post">
<input type="hidden" name="nome">
</form>
</body>
</html>';
}
else
{
echo '
<html>
<head>
<title>SPAMMATAAA!!!</title>
<script src="elevato.js" type="text/javascript"></script>
</head>
<body>
Ciao qua dovrebbe comparire un Commenta su facebook ?
<div id="testo"></div>
<form name="f" action="" method="post">
<input type="hidden" name="nome">
</form>
</body>
</html>';
}
?>
NATURALMENTE E' soltanto una dimostrazione.... E' sicuramente da modificare
Ciao!
Ultima modifica di alemoppo : 24-06-2010 alle ore 00.18.20
regolamento altervista_______________ regolamento forum
c'é un problema nel tuo script, ovvero che la pagina continua a ripartire in un loop infinito, che é abbastanza scomodo