Ciao Dementialsite
grazie per la risposta.
Non ho avuto modo di testare la tua soluzione nel frattempo avevo già fatto questo (posto l'intera pagina che invia i dati, articoli.html):
Codice:
<html>
<head>
<title>Form dati</title>
<SCRIPT LANGUAGE='JavaScript'>
<!--
function validate_form()
{
if (document.art.codice.value==document.art.codice.defaultValue ||
document.art.codice.value.indexOf(' ',0)==0)
{
alert('\nNessun codice inserito.')
document.art.codice.select()
document.art.codice.focus()
return false
}
if ((isNaN(document.art.codice.value)) || document.art.codice.value.indexOf('-',0)==0 || document.art.codice.value.indexOf('+',0)==0) {
alert("Codice non valido.");
document.art.codice.value = "";
document.art.codice.focus();
return false;
}
if (document.art.descrizione.value==document.art.descrizione.defaultValue ||
document.art.descrizione.value.indexOf(' ',0)==0)
{
alert('\nNessuna descrizione inserita.')
document.art.descrizione.select()
document.art.descrizione.focus()
return false
}
if (document.art.quantita.value==document.art.quantita.defaultValue ||
document.art.quantita.value.indexOf(' ',0)==0)
{
alert('\nNessuna quantità inserita.')
document.art.quantita.select()
document.art.quantita.focus()
return false
}
if (document.art.quantita.value.substring(1,2) == "," ||
document.art.quantita.value.substring(2,3) == "," ){
alert("Per i decimali utilizzare il punto, es: 4 chili e mezzo= 4.5");
document.art.quantita.value = "";
document.art.quantita.focus();
return false;
}
if ((isNaN(document.art.quantita.value))|| document.art.quantita.value.indexOf('-',0)==0 || document.art.quantita.value.indexOf('+',0)==0) {
alert("Quantità non valida.");
document.art.quantita.value = "";
document.art.quantita.focus();
return false;
}
if (document.art.prezzo.value==document.art.prezzo.defaultValue ||
document.art.prezzo.value.indexOf(' ',0)==0)
{
alert('\nNessun prezzo inserito.')
document.art.prezzo.select()
document.art.prezzo.focus()
return false
}
if (document.art.prezzo.value.substring(1,2) == "," ||
document.art.prezzo.value.substring(2,3) == "," ){
alert("Per i decimali utilizzare il punto, es: 3 euro e 55 cent = 3.55");
document.art.prezzo.value = "";
document.art.prezzo.focus();
return false;
}
if ((isNaN(document.art.prezzo.value))|| document.art.prezzo.value.indexOf('-',0)==0 || document.art.prezzo.value.indexOf('+',0)==0) {
alert("Prezzo non valido.");
document.art.prezzo.value = "";
document.art.prezzo.focus();
return false;
}
}
//----------------------------------------
// -->
</SCRIPT>
</head>
<body bgcolor="#DAB88B" onload="document.art.codice.focus();" >
<TABLE border=0 width=100% cellpadding=3>
<tr>
<td width=100% colspan=2>
<p align=center><b>Inserisci Articoli
<form method=POST action="fatt1.php" target= "fatt1" name = "art" onSubmit="return validate_form()">
</b></td>
</tr>
<tr>
<td width=18%><b>Codice</b></td>
<td width=82%><input type=text name="codice" size=10></td>
</tr>
<tr>
<td width=18%><b>Descrizione</b></td>
<td width=72%><textarea name="descrizione" cols="23"></textarea></td>
</tr>
<tr>
<td width=18%><b>Quantità</td>
<td width=82%><input type=text name="quantita" size=10></td>
</tr>
<tr>
<td width=18%><b>Prezzo Un.</td>
<td width=82%><input type=text name="prezzo" size=10></td>
</tr>
<tr>
<tr>
<td width=18%><b>IVA</td>
<td width=82%><select size="1" name="iva" size=10>
<option> 4</option>
<option> 10</option>
</select></td>
</tr>
<tr>
<td width=18%><b><input type="submit" name="invia" value="Inserisci"></td>
</tr>
</table>
</form>
</body>
</html>
In pratica con il javascript controllo:
1) se tutti i campi sono stati compilati;
2) per quelli numerici se si tratta effettivamente di un numero e visto che
possono essere inseriti anche numeri negativi faccio fare un ulteriore controllo sul simbolo - e + che non servono.
3) ho preferito, visto che con i valori con la virgola (la mia prima soluzione) era un casino e poi
è più facile inserire i valori numerici dalla tastierina numerica che riporta solo il punto, fare un controllo sull'inserimento della virgola e suggerire di usare solo il punto (tanto il db li accetta così) e tanto nella pagina php
inserisco un bel: ".number_format($prezzo_uni, 2, ',', '.')."</td>
4) if (document.art.prezzo.value.substring(1,2) == "," ||
document.art.prezzo.value.substring(2,3) == "," ){
qui ci sarebbe un problema in quanto un prezzo potrebbe essere anche superiore a 1.50 o 20.58 ad esempio e dovrei quindi inserire ulteriori controlli per le centinaia, migliaia ecc ecc e così anche per le quantità ma
dovresti consigliarmi tu una soluzione più professionale.
Ho notato che a volte (diciamo raramente) forse per qualche problema del browser o nel codice, nel campo descrizione pur non inserendovi nessun dato riesco ad inviare i dati ritrovandomi nella pagina php la riga senza descrizione cosa che non dovrebbe succedere. Che ne pensi?
In una funzione volevo adottare una soluzione alternativa concatenando gli if.
Visto che è possibile in javascript utilizzare il simbolo ||
(per o) pensavo alla possibiltà di usare anche && (per e come per le query mysql) ed ottenere
controllo di condizioni più complicate e performanti..ma non funziona.
Sbaglio?
Ok penso di avere detto tutto. Aspetto i tuoi preziosi suggerimenti per migliorare la pagina e rendere i controlli sicuri. Inoltri potresti integrare la tua soluzione con questa pagina eliminado quello che secondo te non serve più?
grazie
ps: in un secondo momento vorrei usare anche l'autocompletamento
(credo con ajax). Vorrei che inserendo il codice prodotti il campo descrizione richiami automaticamente (e gradualmente) il nome del prodotto dal db e viceversa inserendo il nome del prodotto (che dovrebbe
gradualmente comparire digitando progressivamente le lettere) sia inserito automaticamente il codice relativo.
Pensi che come è strutturata la pagina sopra si possono creare conflitti con il resto del codice javascript usando ajax?