- Home
- Categorie
- Coding e Sistemistica
- PHP
- Convalida form
-
Convalida form
Ciao a tutti ho un form
[PHP]<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">[/PHP]
che permette l'inserimento di una foto.
Ora prima di fare l'inserimento nel database voglio controllare le dimensioni.
[PHP] $size= getimagesize($file['tmp_name']);
list($width, $height, $type, $attr) = $size;
if($width>120 && $height>160)
[/PHP]Se supera le dimensioni ammesse, non deve salvare sul database e deve tornarmi al form in modo che l'utente può sostituire la foto.
come faccio?
-
Potresti procedere così:
- individua la cartella dei file temporanei del tuo server php;
- [PHP]$filename = $temp_dir.basename($_FILES['file']['tmp_name']);[/PHP]
Così individui il nome del file nella cartella temporanea; - [PHP]list($width, $height) = getimagesize($filename);[/PHP]
Così ottieni le due variabili per fare i controlli che ti occorrono.
Sono sicuro che c'è una funzione per ottenere la directory temporanea del server, ma se non dovessi trovarla puoi sempre prenderla da [PHP]phpinfo();[/PHP]
Tienici informati.
-
aspetta aspetta forse hai capito male....le dimensioni le riesco a controllare...
ma vorrei che in caso di dimensioni in eccesso mi spunti un messaggio di errore e mi torni sul form COMPILATO....
-
Scusami, allora usa il reindirizzamento di php, cambiando l'header:
[PHP]header("Location: pagina_del_form.html");[/PHP]Se vuoi recuperare i dati del form, per non farlo ricompilare da capo, ti consiglio di salvarli nella sessione.
-
se ho 3000 campi mi devo salvare tutti e 3000 campi??
-
Beh, puoi copiare "rozzamente" la variabile "$_POST" nella variabile "$_SESSION['form']" per esempio, e tenere tutti i campi di quel posto a portata di mano.
-
mi fai un esempio per favore?
-
Se usi il metodo "post" per mandari i dati del form, allora potresti usare:
[php]$_SESSION['form'] = $_POST;[/php]
e nella pagina html che contiene il form, puoi scrivere qualcosa del genere per ogni campo (nell'esempio text):
[html]<input type="text" name="campo1" value="<?php echo $_SESSION['form']['campo1']; ?>" />[/html]Nel caso di checkpoint (e nel caso radio):
[html]<input type="checkpoint" name="check1" value="si" <?php if ($_SESSION['form']['check1'] != '') echo " checked"; ?> />[/html]Per le select puoi scrivere così:
[HTML]<select name="tendina1">
<option value="1" <?php if ($_SESSION['form']['tendina1'] == "1") echo " selected"; ?>>Uno</option>
.
.
.
</select>[/HTML]Spero sia chiaro.
-
ma come faccio a convalidarlo? cioè a controllare che abbia riempito determinati campi?
perchè io uso:[PHP]if(!isset($_POST['nome']) || !isset($_POST['cognome']) || !isset($_POST['societa']) || !isset($_POST['privacy'])){
echo "errore"
}else
//fai quello che devi fare
[/PHP]ma così facendo, appena apro la pagina siccome quei post non sono settati mi da subito errore :S
-
Se usi questo metodo, prima di controllare "nome", "cognome", eccetera metti il controllo di una variabile apposita per capire se stai controllando i dati del form o li devi ancora inserire.
-
@momino said:
Se usi il metodo "post" per mandari i dati del form, allora potresti usare:
[php]$_SESSION['form'] = $_POST;[/php]
e nella pagina html che contiene il form, puoi scrivere qualcosa del genere per ogni campo (nell'esempio text):
[html]<input type="text" name="campo1" value="<?php echo $_SESSION['form']['campo1']; ?>" />[/html]Nel caso di checkpoint (e nel caso radio):
[html]<input type="checkpoint" name="check1" value="si" <?php if ($_SESSION['form']['check1'] != '') echo " checked"; ?> />[/html]Per le select puoi scrivere così:
[HTML]<select name="tendina1">
<option value="1" <?php if ($_SESSION['form']['tendina1'] == "1") echo " selected"; ?>>Uno</option>
.
.
.
</select>[/HTML]Spero sia chiaro.
tutto chiaro...ma non funziona!!
non mi rimette tutto nei campi.....
-
e se salvi il modulo html in un file diverso ?
[PHP]
if($errore[])
{
extract($_POST)
include('form.inc');
}[/PHP]
-
ma mi sono accorto di una cosa...
se dopo che invio il modulo senza riempire alcuni campi mi torna sul modulo senza farmi vedere i dati precedentemente passati. se aggiorno la pagina me li fa vedere....
è grave?