View Full Version : inserire testo in textarea tramite JS
bouncey2k
15-11-2006, 16:28
ho creato questo
<form name="upload" action="news.php" method="post">
<a href="javascript:;" onclick="seleziona(\'<b>CIAO</b>\'); return false;">ciao</a>
<textarea name="textarea" id="area" rows="20" cols="20"></textarea>
</form>
poi ho creato un JS inserendolo nell'head così <script type="text/javascript" src="select.js"></script>:
function seleziona(x) {
document.upload.area= x;
}
però non funziona. Come posso far sì che cliccando su "ciao" mi compaia la parola nella mia textarea? :muro:
PS: prima e dopo CIAO ci sono delle \ \ perché sopra c'è un echo del PHP.
document.upload.area= x;document.upload.area.value = ....
bouncey2k
15-11-2006, 18:01
document.upload.area.value = ....
ma il tag textarea non contiene il parametro value..
bouncey2k
15-11-2006, 18:24
ok. adesso con value funziona. Cmq c'è un'altro problema.
Se io aggiungo più opzioni, ad esempio:
<a href="javascript:;" onclick="seleziona(\'<b>CIAO</b>\'); return false;">ciao</a>
<a href="javascript:;" onclick="seleziona(\'<b>MIAO</b>\'); return false;">miao</a>
<a href="javascript:;" onclick="seleziona(\'<b>BAU</b>\'); return false;">bue</a>
..questi mi si sovrascrivono nella textarea.. io vorrei che si aggiungessero nel punto dove è il mio puntatore.
ok. adesso con value funziona.Certo, perché value è una proprietà dell'oggetto textarea. ;)
io vorrei che si aggiungessero nel punto dove è il mio puntatore.Adesso così su 2 piedi non mi ricordo se esiste una proprietà o metodo per sapere dove si trova il caret (il cursore all'interno del controllo).
Comunque se ti basta accodare il testo puoi semplicemente fare:
document.upload.area.value += ....
bouncey2k
15-11-2006, 20:45
grazie andbin sei stato utilissimo. Però dovrei chiedere un ultimo aiuto per completare la mia "opera".
Sotto la textarea, all'interno del form, ho messo un pulsante di submit e nel form ho messo:
<form name="upload" action="news.php" method="post">
..volevo fare in modo cioè che io possa scrivere attraverso la textarea all'interno della pagina "news.php", la quale non è altro che una pagina che viene richiamata tramite "include" da un'altra. Ma non funziona. Credo che non sia il metodo giusto... che devo fare?
<form name="upload" action="news.php" method="post">
..volevo fare in modo cioè che io possa scrivere attraverso la textarea all'interno della pagina "news.php", la quale non è altro che una pagina che viene richiamata tramite "include" da un'altra. Ma non funziona. Credo che non sia il metodo giusto... che devo fare?La pagina che specifichi nel "action" è quella che verrà caricata e a cui verranno passati i valori dei controlli nel form.
Visto che la textarea ha il nome "textarea" (nota che è l'attributo name dei vari controlli che conta), nella pagina php avrai ad esempio una variabile $_POST['textarea'] che contiene il testo.
bouncey2k
16-11-2006, 12:19
funziona, però c'è solo un problema, che con questo metodo non mi scrivi sulla pagina news.php, ma me lo stampa solo a video. Infatti se faccio un refresh sulla pagina news.php il testo che avevo mandato tramite POST scompare. Non c'è un metodo per scriverci?
funziona, però c'è solo un problema, che con questo metodo non mi scrivi sulla pagina news.php, ma me lo stampa solo a video. Infatti se faccio un refresh sulla pagina news.php il testo che avevo mandato tramite POST scompare. Non c'è un metodo per scriverci?Come ho detto, all'interno dello script PHP hai una variabile $_POST['textarea'] che contiene il testo. Cosa nei fai di questa variabile, ovviamente dipende da te e da cosa vuoi fare con il testo.
Se vuoi visualizzare il testo nella nuova pagina, da qualche parte ci dovrà essere un codice PHP del tipo:
echo htmlspecialchars ($_POST['textarea'], ENT_QUOTES);
bouncey2k
16-11-2006, 12:51
ok, htmlspecialcharts può essere utile, anche se non ho capito a cosa serva ENT_QUOTES.
Cmq il problema non è risolto, in quel modo me lo visualizza soltanto il testo. Io vorrei poterci scrivere nella pagina, in modo che, se refresho, il testo rimane. E' possibile?
ok, htmlspecialcharts può essere utile, anche se non ho capito a cosa serva ENT_QUOTES.ENT_QUOTES indica alla htmlspecialchars di traslare sia gli apici singoli che quelli doppi.
Cmq il problema non è risolto, in quel modo me lo visualizza soltanto il testo. Io vorrei poterci scrivere nella pagina, in modo che, se refresho, il testo rimane. E' possibile?Se per refresh intendi il classico F5 per ricaricare la pagina, devi fare molta attenzione. Se la pagina è stata generata a seguito di un POST, facendo il refresh in pratica fai il re-invio dei dati del POST appena fatto. Anzi, il browser te lo segnala pure che stai per fare il re-invio dei dati!!
bouncey2k
16-11-2006, 13:11
per refresh intendo F5, ma fatto in news.php non nella pagina dove c'è la textarea. Ciò che io scrivo e invio tramite la textarea alla pagina news.php vorrei che potesse essere leggibile da tutti. Invece se faccio un refresh in news.php sparisce tutto.
per refresh intendo F5, ma fatto in news.php non nella pagina dove c'è la textarea. Ciò che io scrivo e invio tramite la textarea alla pagina news.php vorrei che potesse essere leggibile da tutti. Invece se faccio un refresh in news.php sparisce tutto.Allora il testo devi metterlo su un database o su un file!
bouncey2k
16-11-2006, 13:29
posso cioè inviare i dati ad un news.txt? Se si, che sintassi devo usare nel txt?
posso cioè inviare i dati ad un news.txt? Se si, che sintassi devo usare nel txt?Devi usare le funzioni fopen(), fwrite(), ecc...
Vedi <qui> (http://it2.php.net/manual/en/function.fopen.php) la documentazione di fopen().
Comunque c'è da tenere in considerazione una cosa importante. Non so su che tipo di hosting stai lavorando ma la maggior parte degli hosting "reali" (commerciali e non) disabilitano (per ovvi motivi di sicurezza) la scrittura su file.
bouncey2k
16-11-2006, 13:51
ma le operazioni di fopen() e fwrite() le posso scrivere solo su php, non su txt. Quindi cos'è che devo fare? do i comandi di fopen(), ecc. su news.php? ma se li do lì come faccio a scrivere su un file di testo?
PS: attualmente lavoro su altervista ma dovrei prendermi un dominio
PS: preferisco non utilizzare database al momento (tipo MySql) perché è come usare un transatlantico per una persona sola.
bouncey2k
16-11-2006, 14:06
forse sto semplificando il problema. Mi basta poter scrivere su un file.txt tramite la textarea. :) Non so però se bisogna passare prima per un file.php o si può scrivere diretti su file.txt...
ma le operazioni di fopen() e fwrite() le posso scrivere solo su php, non su txt. Quindi cos'è che devo fare? do i comandi di fopen(), ecc. su news.php? ma se li do lì come faccio a scrivere su un file di testo?Nel sorgente della pagina news.php devi scrivere il codice php che utilizza fopen(), fwrite(), ecc...
Un qualcosa del tipo:
<?php
...
if (($handle = fopen ("news.txt", "a")) !== FALSE)
{
fwrite ($handle, $_POST['textarea']);
fclose ($handle);
}
...
?>
A parte come fare tecnicamente la scrittura su file, c'è un'altra cosa: quel file news.txt cosa deve contenere?? Più news una dietro l'altra?? E come le separi (se vuoi separarle) l'una dall'altra??
perché è come usare un transatlantico per una persona sola. :D
bouncey2k
16-11-2006, 14:28
ora provo il codice e ti fo sapere. Cmq per quanto riguarda le news, mi basta anche si sovrascrivano, certo.. se poi mi dici il "trucco" per farne una dietro l'altra meglio :D Cioè avevo pensato ad un metodo (solo teorico) che sarebbe quello che inserire un textfield dove mettere il nome del file txt da creare con relativa textbox.. ma boh! :p
ora provo il codice e ti fo sapere. Cmq per quanto riguarda le news, mi basta anche si sovrascrivano, certo.. se poi mi dici il "trucco" per farne una dietro l'altra meglio :D Cioè avevo pensato ad un metodo (solo teorico) che sarebbe quello che inserire un textfield dove mettere il nome del file txt da creare con relativa textbox.. ma boh! :pPotresti decidere di avere N news (magari ognuna con titolo, data, ecc...) memorizzate in un unico file di testo oppure potresti avere più news ma ognuna in un file separato. Oppure ancora potresti decidere di gestire le news come un blocco unico. Un unico file di testo che leggi, scrivi e aggiorni in toto.
È solo questione di stabilire come vuoi gestire la cosa.
bouncey2k
16-11-2006, 14:37
ho scoperto che le news le inserisce una dopo l'altra.. ottimo! ma come faccio - volendo - a mettere la più recente in alto..? eheh :sofico:
ho scoperto che le news le inserisce una dopo l'altra.. Sono inserite una dietro l'altra perché nella fopen ho messo il modo di apertura "a" (append, aggiunge al fondo).
ma come faccio - volendo - a mettere la più recente in alto..? eheh :sofico:Eh no, questo non è (facilmente) fattibile.
In generale, in un file non puoi "inserire" dei dati in mezzo/all'inizio.
Dovresti ogni volta creare un file temporaneo, scrivere subito la nuova news e poi leggere e ricopiare dietro le altre news. Poi muovere il file temporaneo nel file effettivo.
Lungo e noioso .... per questo infatti si usano i database. ;)
bouncey2k
16-11-2006, 15:05
ho letto che la funzione "w+" in pratica sovrascrive quello che c'era prima se non erro. Ed inoltre dice che se non trova il file, lo crea. Quindi volendo se creo un campo di testo posso dare ad ogni news un nuovo nome e mi crea così un nuovo file da mettere in testa. A parte che non ho capito come possa finire poi "in testa"..
PS: è possibile migliorare questo codice? La classe del <p> deve dargli noia e me lo legge strano nella pagina:
<a href="javascript:;" onclick="select(\'<p class="title">miao</p>\'); return false;">miao</a>
bouncey2k
16-11-2006, 15:13
problema risolto, ho usato "
ho letto che la funzione "w+" in pratica sovrascrive quello che c'era prima se non erro. Ed inoltre dice che se non trova il file, lo crea. Esatto, w+ apre in lettura/scrittura, si posiziona all'inizio, tronca il file se c'è e lo crea se non c'è. (è tutto spiegato nella documentazione di fopen() ).
Quindi volendo se creo un campo di testo posso dare ad ogni news un nuovo nome e mi crea così un nuovo file da mettere in testa. A parte che non ho capito come possa finire poi "in testa"..Ad un certo punto avrai nella directory N file di testo. Come decidi e in base a cosa che un file deve essere visualizzato prima di un altro???
Si può fare, comunque, anche se in modo un po' articolato, ecco una idea: usi un file di testo (di nome fisso) che contiene solo il nome dell'ultimo file di news. Dentro ogni file di news metti (all'inizio/fine o come vuoi) il nome del file relativo alla news precedente.
Quando li visualizzi, parti dall'ultimo e in catena leggi man mano i file precedenti. Non è il massimo, lo so ....
bouncey2k
16-11-2006, 15:36
a dir la verità ho capito poco.. cioè, avevo intuito che la cosa era poco fattibile perché non potevo stabilire come porre all'inizio una news invece che un'altra.
ma nel caso avessi MySql, sarebbe fattibile e semplice? Tu sapresti farlo? :help:
a dir la verità ho capito poco.. cioè, avevo intuito che la cosa era poco fattibile perché non potevo stabilire come porre all'inizio una news invece che un'altra.Non è impossibile. Hai un file di testo di nome fisso, es. "ultimo.txt". Immagina questa situazione:
ultimo.txt
2.txt
2.txt
1.txt
blablabla news 2
1.txt
-
blablabla news 1
Se vuoi aggiungere un terzo file di news, fai:
- prendi il contenuto di ultimo.txt ("2.txt")
- crei un nuovo file 3.txt in cui scrivi 2.txt e poi il resto.
- aggiorni ultimo.txt mettendoci 3.txt
Certo ... non è il massimo lo so, ma in questo momento mi viene in mente solo questo.
ma nel caso avessi MySql, sarebbe fattibile e semplice? Tu sapresti farlo? :help:Tecnicamente sì, in passato ho già avuto modo di usare MySQL da PHP.
Ma ti assicuro che non è difficilissimo, ovvio, devi avere qualche nozione di SQL e conoscere le funzioni PHP per il MySQL.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.