LORETTA B. forum

Linguaggi di programmazione => Javascript => Topic aperto da: micdas - Settembre 09, 2009, 21:07:47

Titolo: Validare un form di cui si ignorano i nomi dei campi
Inserito da: micdas - Settembre 09, 2009, 21:07:47
Ciao  :ciao:
I lavori continuano e con questi anche i problemi aumentano.
Recentemente per validare un form tramite JS comincio ad usare una cosa del genere:
Codice: Non sei autorizzato a vedere i links. Registrati o Login
function check_valid(form) {
// anagrafe
    if (form.nome.value == "") { // nome
        alert ("Il campo del nome è vuoto");
        form.nome.value = "";
        form.nome.focus();
        return false;
    }
    if (form.cognome.value == "") { // cognome
        alert ("Il campo del cognome è vuoto");
        form.cognome.value = "";
        form.cognome.focus();
        return false;
    }
    if (form.citta.value == "") { // città
        alert ( "Il campo della città è vuoto");
        form.citta.value = "";
        form.citta.focus();
        return false;
    }
    ..........................
    return true;
}

La form è costruita manualmente e posso richiamare la funzione JS in questo moso:
Codice: Non sei autorizzato a vedere i links. Registrati o Login
<form name="form1" method="post" action="invia_form.php" onsubmit="return check_valid(this)" id="form1">
<input type="text" name="nome" size="30" />
<input type="text" name="cognome" size="30" />
<input type="text" name="citta" size="30" />
.......................
</form>

Questa volta il problema è un altro.
Il form non lo scrivo manualmente ma usando semplicemente un ciclo dopo aver rilevato i campi dal DB con una Query e viene scritto in questo modo:
Codice: Non sei autorizzato a vedere i links. Registrati o Login
echo "<form id=\"form1\" name=\"form1\" method=\"post\" action=\"\"onsubmit=\"check(this);\">\n";
for ($i=1; $i < mysql_num_fields ($Result); $i++) {     // comincio da 1 perchè lo "0" è il campo ID
$colonna = mysql_field_name ($Result, $i);
if ($colonna == "note") {
echo "<textarea name=\"".$colonna."\" cols=\"33\" rows=\"5\"></textarea>\n";
} else {
echo "<input type=\"text\" name=\"".$colonna."\" size=\"44\" />\n";
}
}
....................................
echo "</form>\n";

In questo modo so solo che un campo si chiama "note", ma per il resto è tutto buio.
Io penso che ci dovrebbe essere un modo per leggere i controlli del form da JS e controllare se i dati sono validi.

Grazie dell'aiuto   :Party133:
Titolo: Re: Validare un form di cui si ignorano i nomi dei campi
Inserito da: HellDevil - Settembre 10, 2009, 09:34:32
Così al volo mi viene da dire:
Rendi dinamico anche il javascript leggendo dallo stesso db con la stessa query, così non hai problemi.

Potresti per esempio, anzichè stampare direttamente quello che leggi dal db metterlo in una variabile (tutto l'html che ti interessa in una variabile stringa). Inizializzi due variabili stringa, una per il form che ti sei costruito dinamicamente e una per il javascript che ti sei costruito dinamicamente anche quello. Dopodichè fai semplicemente due echo delle due variabili nella posizione della pagina che ti interessa.

Comunque esiste una soluzione alternativa, per evitare di scrivere del codice così lungo e esteticamente brutto (però non scorretto).

Più tardi ci penso e ti faccio sapere.

Saluti
HellDevil
Titolo: Re: Validare un form di cui si ignorano i nomi dei campi
Inserito da: HellDevil - Settembre 10, 2009, 09:44:55
Hai pubblicato la pagina come al solito?
Se si qual'è l'indirizzo?
Ho trovato la soluzione alternativa più pulita, la testo e se tutto funziona te la posto.
Titolo: Re: Validare un form di cui si ignorano i nomi dei campi
Inserito da: micdas - Settembre 10, 2009, 16:11:14
Ciao HellDevil  :ciao:
sì scusa la distrazione. La pagina ovviamente è pubblicata
Ovviamente ora nella pagina non ho alcun codice JS per cui non c'è alcun controllo.
Per la circostanza ho creato la pagina .php (http://mikevba.altervista.org/prova/db/input_con_js.php) per osservare il comportameto ed una pagina .txt (http://mikevba.altervista.org/prova/db/input_con_js.txt) per vedere il codice. Spero che sia sufficiente per eseguire dei test ed ho anche aggiunto anche 2 controlli non obbligatori da escludere nel processo al form. Ai campi obbligatori, se può servire, ho assegnato delle classi per distinguerli da quelli non obbligatori.

Codice: Non sei autorizzato a vedere i links. Registrati o Login
echo "<textarea name=\"".$colonna."\" class=\"si\" cols=\"33\" rows=\"5\"></textarea>\n";    \\ obbligatorio
echo "<input type=\"text\" name=\"".$colonna."\" class=\"si\" size=\"44\" />\n";                   \\ obbligatorio
..................
echo "<input type=\"text\" name=\"textfield\" />                                                             \\ non obbligatorio
echo "<textarea name=\"textarea\" id=\"textarea\" cols=\"33\" rows=\"5\"></textarea>          \\ non obbligatorio

Una mia idea è che se si riesce a creare il codice, questo può essere utilizzato anche nella maggior parte di altri form, dinamici e non.

Grazie ancora.

 :bye:
Titolo: Re: Validare un form di cui si ignorano i nomi dei campi
Inserito da: HellDevil - Settembre 11, 2009, 07:03:11
Ciao mic, :coffe: buongiorno.
Ho risolto il problema :vittoria: modificando la funzione js che usi tu di check. Praticamente mentre tu fai un controllo su ogni singolo campo, nella mia ho fatto ciclare tutti gli elementi della form che gli passi con il costrutto elements. Praticamente adesso il controllo è questo:
Codice: Non sei autorizzato a vedere i links. Registrati o Login
function check_valid(theForm) {
for (i=0; i < theForm.elements.length; i++) {
if (theForm.elements[i].value == "" && theForm.elements[i].className == "si") {
alert ("Il campo " + theForm.elements[i].name + " è vuoto");
         theForm.elements[i].value = "";
         theForm.elements[i].focus();
         return false;
}
}
return true;
}
Come puoi vedere il ciclo è semplicemente un ciclo for da 1 alla lunghezza del costrutto elements, poi ho aggiunto il controllo per vedere se il campo è vuoto e se ha la classe uguale a "si". Ovviamente puoi mettere quello che vuoi. L'ho testata sulla pagina che mi hai scritto e funziona. Poi fammi sapere se vuoi essere chiarito qualcosa e se funziona nelle tue pagine  :okkey:

Buona giornata.
HellDevil  :bye:
Titolo: Re: Validare un form di cui si ignorano i nomi dei campi
Inserito da: micdas - Settembre 11, 2009, 08:17:12
:Banane27:  :Banane27:  :Banane27:

eccolo modificato (http://mikevba.altervista.org/prova/db/input_con_js.php)

 :ciao: e alla prossima