• User Attivo

    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?


  • User Attivo

    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.


  • User Attivo

    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....


  • User Attivo

    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.


  • User Attivo

    se ho 3000 campi mi devo salvare tutti e 3000 campi??


  • User Attivo

    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.


  • User Attivo

    mi fai un esempio per favore?


  • User Attivo

    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.


  • User Attivo

    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


  • User Attivo

    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.


  • User Attivo

    @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.....


  • User Attivo

    e se salvi il modulo html in un file diverso ?

    [PHP]
    if($errore[])
    {
    extract($_POST)
    include('form.inc');
    }[/PHP]


  • User Attivo

    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?