Visualizzazione dei risultati da 1 a 6 su 6

Discussione: Form HTML

  1. #1

    Form HTML

    Ciao a tutti.. io sto creando un sito in HTML e JSP e devo fare un form però è un po' particolare.. perchè praticamente io vorrei crare una tabella in cui l'utente inserisce il nome del prodotto, e ogni volta che ne inserisce uno si crea in automatico un altra riga dove gli viene richiesto nuovamente di inserire il nome del prodotto.. Questo perchè ci potrebbe essere l'utente che inserirà un prodotto, ma anche l'utente che ne inserirà 10, e dato che io non so quanti ne vuole inserire vorrei creare questa tabella che si incrementa in automatico..

    Es.

    inserire il nome del prodotto: art. HCR
    inserire il nome del prodotto: art. DRF
    inserire il nome del prodotto:

    l'utente alla terza opzione non inserisce nulla, quindi vuol dire che vuole richiedere solo quei due prodotti..

    Come faccio???????

  2. #2
    Ciao,
    per poterti aiutarti occorre qualche chiarimento, intanto ti posto un primo codice, molto grezzo, su cui cominciare a ragionare.

    codice:
    <html>
    <head>
       <script type="text/javascript">
          num_righe = 1;
          function aggiungi_riga() {
             num_righe++;
             document.getElementById('prodotti').innerHTML += "
    <input type='text' id='_" + num_righe + "'/>";
          }
       </script>
    </head>
    <body>
       <div id='prodotti'>
          <input type='text' id='_1'/>
       </div>
       <input type='button' value='aggiungi riga' onclick='aggiungi_riga();'/>
    </body>
    </html>
    Come vedi non ho utilizzato una tabella ma una <div> che inizialmente contiene un solo campo a cui vengono aggiunti nuovi campi ad ogni click del pulsante.

    Non so che conoscenze hai e se il codice ti è chiaro comunque, in breve, il click sul pulsante richiama una funzione javascript che individua la <div> (con getElementById), ne preleva il contenuto (con innerHTML) e gli accoda (operatore +=) un
    e un nuovo tag <input>.

    Un primo punto da chiarire è se ti serve proprio una tabella o se ti può andar bene una struttura come quella che ti ho proposto. Il fatto è che la tabella complica un po' la vita quindi sarebbe meglio farne a meno, però dipende dai dati che hai. Non sono molto esperto di questo ma credo che sostanzialmente si tratti di capire se i tuoi dati costituiscono un elenco, una lista, una tabella o se non rientrano in nessuna di queste categorie.

    Bisogna poi individuare esattamente l'evento che deve provocare l'inserimento della riga. Nel mio esempio l'evento è il click sul pulsante ma non so se ti può andare bene, dipende da cosa intendi con "ogni volta che ne inserisce uno".
    In altre parole bisogna capire se l'inserimento di un prodotto si considera concluso quando sono stati digitati tre caratteri oppure quando è stata inserita una stringa che corrisponde ad uno dei prodotti validi oppure quando il campo perde il focus o quando lo riceve oppure... dimmelo tu.
    Tieni presente, ovviamente, che l'utente potrebbe inserire un prodotto e poi ripensarci e cancellarlo o modificarlo. E magari inserire un prodotto inesistente. Che deve succedere in questi casi?

    C'è poi il problema del mantenimento dei valori già inseriti, infatti, come vedrai, il codice che ti ho postato (come ti dicevo è molto grezzo) svuota tutti i campi già caricati quando se ne inserisce uno nuovo. Per risolvere questo problema occorre memorizzare i dati in un array e ricaricarli ogni volta. Ma questo lo possiamo vedere dopo, per ora comincia a darmi qualche indicazione più precisa sulle cose che ti ho detto.

    Ah già, tieni presente un'altra cosa, che tutto quello che ho detto presuppone che tu voglia fare tutta questa elaborazione lato client e inviare i dati al server solo alla fine ma questo non è così scontato, potresti invece aver bisogno di controllare e validare i dati via via che vengono inseriti. Per far questo bisognerebbe inviare ogni singolo prodotto al server e a quel punto sarebbe il server ad occuparsi di rimandare al client la pagina con gli eventuali messaggi d'errore e/o il nuovo campo vuoto per l'inserimento di un altro prodotto.

    E aggiungo ancora una cosa, se i prodotti sono in numero finito e individuabili a priori, potresti fare una casella a discesa (una tendina) che li contiene tutti in modo che l'utente possa sceglierli senza dover digitare nulla e senza poter commettere errori. I prodotti così scelti verrebbero via via "trasferiti" in una textarea posta affianco alla tendina e inviati al server alla fine. Sarebbe molto più semplice, che ne pensi?
    La democrazia rappresentativa ha fatto il suo tempo, è ora di passare alla democrazia diretta.
    www.beppegrillo.it

  3. #3
    ciao.. ti rispondo dopo un bel po' in effetti xkè ho avuto parecchio da fare in questi ultimi giorni.. comunque ti ringrazio per il consiglio che mi hai dato.. si è rivelato utilissimo..

    ora questo sarebbe il mio codice html per il form di inserimento dati:
    codice:
     
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//IT">
    <html>
    <head>
    
     <script type="text/javascript">
          num_righe = 1;
          function aggiungi_riga() {
             num_righe++;
             document.getElementById('prodotti').innerHTML += "
    <input type='text' id='_" + num_righe + "'/>";
          }
       </script>
    
    <script type="text/javascript">
          num_righe = 1;
          function aggiungi_rig() {nome p
             num_righe++;
             document.getElementById('materie').innerHTML += "
    <input type='text' id='_" + num_righe + "'/>";
          }
       </script>
    
    <title> Tesina </title>
    
    </head>
    <body>
    <font face="verdana"> 
    
    <form method="post" action="insDatiIpotizzati.jsp">
    
    
    
    <table align="center" cellpadding="20">
       <tr>
    	<td align="center"><h2>INSERIRE I DATI IPOTIZZATI RICHIESTI</h2>
    </td>
       </tr>
    
       <tr>
    	<td>
    	Inserire il nome di tutti gli articoli da produrre: <div id='prodotti'>
    
    	<input type="text" name="nomeProd" size="10" maxlenght="10" id='_1'/></div>
    
    	<input type='button' value='aggiungi riga' onclick='aggiungi_riga();'/>
    
    	</td>
       </tr>
    
       <tr>
    	<td>
    	Inserire il nome di tutte le materie prime da utilizzare nella produzione: <div id='materie'>
    
    	<input type="text" name="nomeMat" size="10" maxlenght="10" id='_1'/></div>
    
    	<input type='button' value='aggiungi riga' onclick='aggiungi_rig();'/>
    
    	</td>
       </tr>
    
    
       <tr>
    	<td align="center">
    	<input type="submit" value="AVANTI">
    
    	</td>
       </tr>
    	
    </table>
    </font>
    </body>
    </html>
    8

    Come puoi vedere ho dovuto ripete la funzione aggiungi riga perchè altrimenti quando cliccavo aggiungi riga per le materie aggiungeva le righe ai prodotti xD.. Comunque ora si presentano alcuni problemi..

    1° piccolo problema antiestetico:
    lo spazio per inserire il nome del primo prodotto o della prima materia è più piccolo rispetto agli spazi per inserire il secondo, terzo, quarto nome e così via.. se ti copi il codice capirai meglio cosa intendo..

    Poi 2° problema:
    Vorrei poter creare anche un pulsante elimina riga così se l'utente per errore inserisce campi in più ha la possibilità di eliminarli..

    Grazieeee =)=)=)=)=)

  4. #4
    Aaaaaah e poi cosa importantissima.. Come posso fare per acquisirli nel mio DB? perchè se il campo che l'utente inserisce è uno solo allora diventa molto semplice, ma dal momento che potrebbe inserirne più di uno diventa un casino.. Come posso fare?

    Grazie 1000 =)=)=)=)=)

  5. #5
    Ciao Sonia,
    devo doverosamente premettere che in questo forum non si fanno i compiti per gli altri e questa, come mi hai detto in privato, è proprio una tesina scolastica, d'altra parte è anche vero che siamo stati tutti studenti e tutti ci siamo ridotti all'ultimo e poi comunque non sei completamente passiva ad aspettare l'aiuto ma ci stai provando a metterci del tuo quindi facciamo così, ti do un po' di spunti ma il lavoro vero lo lascio a te.

    Tieni presente inoltre che questo per me è un periodo piuttosto pieno quindi non avrò molto tempo per il forum.

    Detto questo facciamo qualche passo avanti:

    codice:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//IT">
    <html>
    <head>
    
    <script type="text/javascript">
       num_righe_art = 1;
       num_righe_mat = 1;
    
       function aggiungi_riga_art() {
          num_righe_art++;
          document.getElementById('articoli').innerHTML += "
    <input type='text' id='art_" + num_righe_art + "'/><input type='button' value='X' onclick='elimina_riga_art(\"" + num_righe_art + "\");'/>";
       }
    
       function aggiungi_riga_mat() {
          num_righe_mat++;
          document.getElementById('materie').innerHTML += "
    <input type='text' id='mat_" + num_righe_mat + "'/><input type='button' value='X' onclick='elimina_riga_mat(\"" + num_righe_mat + "\");'/>";
       }
    </script>
    
    <title> Tesina </title>
    
    </head>
    
    <body>
    
    <font face="verdana">
    
    <form method="post" action="insDatiIpotizzati.jsp">
    
    
    
    <table align="center" cellpadding="20">
    <tr>
    <td align="center"><h2>INSERIRE I DATI IPOTIZZATI RICHIESTI</h2>
    </td>
    </tr>
    
    <tr>
    <td>
    Inserire il nome di tutti gli articoli da produrre:
    <div id="articoli">
       <input type="text" name="nomeArt" maxlenght="10" id="art_1"/><input type='button' value='X' onclick='elimina_riga_art("1");'/>
    </div>
    
    
    <input type="button" value="aggiungi articolo" onclick="aggiungi_riga_art();"/>
    
    </td>
    </tr>
    
    <tr>
    <td>
    Inserire il nome di tutte le materie prime da utilizzare nella produzione:
    <div id="materie">
       <input type="text" name="nomeMat" maxlenght="10" id="mat_1"/><input type='button' value='X' onclick='elimina_riga_mat("1");'/>
    </div>
    
    
    <input type="button" value="aggiungi materia" onclick="aggiungi_riga_mat();"/>
    
    </td>
    </tr>
    
    
    <tr>
    <td align="center">
    <input type="submit" value="AVANTI">
    
    </td>
    </tr>
    
    </table>
    </font>
    </body>
    </html>
    Ti spiego cosa ho fatto e cosa c'è ancora da fare.

    Per prima cosa ho riunito le due function in un unico tag script e le ho differenziate utilizzando "art" o "articoli" per la prima e "mat" o "materie" per la seconda, in modo che non si crei confusione.

    Ho poi aggiunto un pulsante con una croce affianco ad ogni casella di testo. Questo pulsante servirà per eliminare la casella ma non è ancora attivo, bisognerà fare le function per gestirlo e poi non essendo attivo non ho potuto provarlo e non escludo che possa esserci qualche errore.

    Nota la differenza fra il pulsante di inserimento riga e quello di cancellazione, l'inserimento è uno solo per ciascuna sezione (articoli e materie) perché inserisce una riga in fondo mentre i pulsanti di cancellazione sono uno per ogni casella di testo e devono puntare a quella casella specifica. Questo è il motivo per cui quando si chiama la funzione di inserimento non è necessario passare dei parametri mentre quando si chiama la funzione di cancellazione bisogna passare il numero di riga che si vuole cancellare e questo numero vale 1 per la prima casella di testo, quella inserita direttamente nel body mentre vale num_righe per quelli inseriti dalle function.

    Il problema della larghezza diversa dei campi era dovuto alla size che avevi inserito solo nel primo tag (quello del body) e non anche nei tag creati dalle function quindi succedeva che il primo aveva una larghezza specifica mentre gli altri prendevano la larghezza di default. Io ho tolto le size ma se vuoi rimetticele, però mettile in tutti i tag.

    Riguardo alla lettura dei dati dalla tua pagina jsp non ti posso aiutare perché non conosco il jsp però esisterà sicuramente qualche istruzione che faccia riferimento agli id dei tag inviati ed è per questo che ho dato ai tag degli id specifici (art_1, art_2, art_3 ecc... e mat_1, mat_2, mat_3 ecc...). Non dovrebbe essere difficile prelevarli e caricarli sul DB ma per questo ti rinvio alla sezione del forum sul jsp.

    Quello che resta da fare, e non è poco, è la gestione dei dati inseriti per evitare che vadano persi quando si inserisce una nuova riga e le funzioni di cancellazione della riga.

    Su questo prova a lavorare un po' da te, io cercherò di trovare un po' di tempo nei prossimi giorni.

    Comunque bisognerà modificare la funzione di inserimento in modo che non si limiti a inserire una casella ma memorizzi in un array il contenuto delle caselle presenti e poi faccia un ciclo in cui rigeneri tutte le caselle inserendo in ciascuna la value corrispondente ai valori dell'array e, alla fine, un ulteriore casella vuota.

    Ci sentiamo nei prossimi giorni e se qualcun altro ha più tempo di me e vuole intervenire è il benvenuto.

    Ciao
    La democrazia rappresentativa ha fatto il suo tempo, è ora di passare alla democrazia diretta.
    www.beppegrillo.it

  6. #6
    Ciao.. ho provato e funziona.. grazie =)=)=)=)

    Per quel che riguarda l'inserimento ho trovato uno che conosce bene il linguaggio jsp e mi può aiutare..
    Ti ringrazio comunque per l'aiuto.. =)

    Alla prossima

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.