• User

    Upload controllato

    Ciao, conoscete uno script possibilmente in PHP che eviti di re-inviare dati al database (modulo method="POST" e MYSQL) semplicemente con il reload della pagina o rientrando nella pagina che contiene il form?
    Spero di essere stato abbastanza chiaro, il modulo che utilizzo funziona bene ed è in pagina protetta con sessione session_start();
    Non riesco ad evitare l'invio di record al Dbase al solo caricamento della pagina.
    Prima di scrivervi ho consultato decine di siti e provato altrettanti codici senza trovarne uno chiaro (per me) e affidabile.
    Grazie


  • ModSenior

    Ciao rolandopalinoi,
    è sufficiente inserire un IF per controllare se il modulo è stato inviato e fare dopo le operazioni.
    Se posti il codice php potrò essere più chiaro su come fare, ma è semplicissimo.


  • User

    Grazie Thedarkita, quando dici che è semplicissimo mi sento un verme :).
    Volentieri invio il codice.
    Struttura:
    -Include sessione di protezione
    -codice caricamento immagini in directory
    -Pagina html
    -codice caricamento dati in DB
    -incluso form upload dati in mysql e immagini in directory

    Codice di protezione.php (incluso all'inizio della pagina)
    [PHP]
    session_start();
    $var = $_SESSION['id_utente'];
    $var2 = $_SESSION['nome_utente'];
    if ( $var == "" && $var2 == "" ){
    echo "Please login";
    <meta hp-equiv="refresh" content="1; url=login.php "/>
    exit();
    }
    [/PHP]

    Codice generale
    [PHP] include('protezione.php'); [/PHP]
    [PHP]
    error_reporting(0);
    $change="";
    $abc="";
    define ("MAX_SIZE","1024");
    function getExtension($str) {
    $i = strrpos($str,".");
    if (!$i) { return ""; }
    $l = strlen($str) - $i;
    $ext = substr($str,$i+1,$l);
    return $ext;
    }
    $errors=0;
    if($_SERVER["REQUEST_METHOD"] == "POST")
    {
    $image =$_FILES["file"]["name"];
    $uploadedfile = $_FILES['file']['tmp_name'];
    if ($image)
    {
    $filename = stripslashes($_FILES['file']['name']);

    	$extension = getExtension($filename);
    	$extension = strtolower($extension);
    

    if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png") && ($extension != "gif"))
    {
    $change='<div class="msgdiv">Unknown Image extension </div> ';
    $errors=1;
    }
    else
    {
    $size=filesize($_FILES['file']['tmp_name']);
    if ($size > MAX_SIZE1024)
    {
    $change='<div class="msgdiv">You have exceeded the size limit!</div> ';
    $errors=1;
    }
    if($extension=="jpg" || $extension=="jpeg" )
    {
    $uploadedfile = $_FILES['file']['tmp_name'];
    $src = imagecreatefromjpeg($uploadedfile);
    }
    else if($extension=="png")
    {
    $uploadedfile = $_FILES['file']['tmp_name'];
    $src = imagecreatefrompng($uploadedfile);
    }
    else
    {
    $src = imagecreatefromgif($uploadedfile);
    }
    echo $scr;
    list($width,$height)=getimagesize($uploadedfile);
    $newwidth=800;
    $newheight=($height/$width)
    $newwidth;
    $tmp=imagecreatetruecolor($newwidth,$newheight);
    $newwidth1=100;
    $newheight1=($height/$width)*$newwidth1;
    $tmp1=imagecreatetruecolor($newwidth1,$newheight1);
    imagecopyresampled($tmp,$src,0,0,0,0,$newwidth,$newheight,$width,$height);
    imagecopyresampled($tmp1,$src,0,0,0,0,$newwidth1,$newheight1,$width,$height);
    $filename = "images/". $_FILES['file']['name'];
    $filename1 = "images/small/". $_FILES['file']['name'];
    imagejpeg($tmp,$filename,100);
    imagejpeg($tmp1,$filename1,100);
    imagedestroy($src);
    imagedestroy($tmp);
    imagedestroy($tmp1);
    }}
    }
    if(isset($_POST['Submit']) && !$errors)
    {
    $change=' <div>Image Uploaded Successfully!</div>';
    }
    [/PHP]

    [HTML]
    <head>

    </head>
    <body>
    <div id="all"> <!-- inizioall -->
    <div id="content"><!-- iniziocontent -->
    [PHP]
    include 'config.php';
    include 'opendb.php';
    $userid= $var;
    $username= $var2;
    $claim_level=$_POST['claim_level'];
    $claim_level = htmlentities($claim_level); //nuovo inserimento di prova
    $model=$_POST['model'];
    $model = htmlentities($model); //nuovo inserimento di prova
    $serial_number=$_POST['serial_number'];
    $serial_number = htmlentities($serial_number); //nuovo inserimento di prova
    $damaged_component_code=$_POST['damaged_component_code'];
    $damaged_component_code = htmlentities($damaged_component_code);
    mysql_query("INSERT INTO dbase VALUES ('id', '$userid', '$username', '$claim_level', '$model', '$serial_number', '$damaged_component_code ' )") ;
    include 'closedb.php';
    [/PHP]
    <div style='background-image: url( /eventi/images/); border:2px solid #880808; margin:10px;
    padding:10px; width:95%; align:center; border: 2px solid #882222; '>
    <div style=' border:3px solid #666666; margin:10px; padding:10px; width:90%; float="left" '>
    <form method="post" action="" enctype="multipart/form-data" name="form1">
    <div align="left">
    Level of claim <br/>
    <input type=radio name="claim_level" value="low" checked> <font color="green">Low</font> <br>
    <input type=radio name="claim_level" value="medium"> <font color="orange">Medium</font><br>
    <input type=radio name="claim_level" value="hight"> <font color="red">Hight</font><br>
    </div>
    <div align="left">
    <INPUT type=text size="10" name="model" > Model<br/>
    <INPUT type=text size="10" maxlength="25" name="serial_number" > Serial Number <br/>
    <INPUT type=text size="10" maxlength="25" name="damaged_component_code" > component code <br/>
    </div>
    </div>
    Insert Claim and Damage Description<br/>
    <textarea name="description" rows="10" cols="70" wrap="physical" maxlength="500" >Insert Claim and Damage Description</textarea><br/>
    <div align="left">
    <input type="file" size="25" name="file" style="font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10pt" />
    Attach file (JPG-GIF-PDF) Image maximum size <b>1 </b>Mb <br/>
    </div>
    <div> <input type="submit" id="mybut" value="Send to me" name="Submit"/></div>
    </form>
    </div>
    <!-- finecontent --></div>
    <div id="footer"><font size="2">© 2012.</font></div>
    <!-- fineall --> </div>
    </body>

    [/HTML]

    Un po' troppo lungo?
    Intanto ti ringrazio per l'aiuto.


  • ModSenior

    Serve solo esperienza, col tempo vedrai migliorerai. 🙂

    Allora, un pò di codice mi sembra confuso, sicuramente a causa del copia incolla sul forum, devi modificare questa parte:
    [php]
    include 'config.php';
    include 'opendb.php';
    $userid= $var;
    $username= $var2;
    $claim_level=$_POST['claim_level'];
    $claim_level = htmlentities($claim_level); //nuovo inserimento di prova
    $model=$_POST['model'];
    $model = htmlentities($model); //nuovo inserimento di prova
    $serial_number=$_POST['serial_number'];
    $serial_number = htmlentities($serial_number); //nuovo inserimento di prova
    $damaged_component_code=$_POST['damaged_component_code'];
    $damaged_component_code = htmlentities($damaged_component_code);
    mysql_query("INSERT INTO dbase VALUES ('id', '$userid', '$username', '$claim_level', '$model', '$serial_number', '$damaged_component_code ' )") ;
    include 'closedb.php';
    [/php]

    In:
    [php]
    include 'config.php';
    include 'opendb.php';
    if(isset($_POST['claim_level']))
    {
    $userid= $var;
    $username= $var2;
    $claim_level=$_POST['claim_level'];
    $claim_level = htmlentities($claim_level); //nuovo inserimento di prova
    $model=$_POST['model'];
    $model = htmlentities($model); //nuovo inserimento di prova
    $serial_number=$_POST['serial_number'];
    $serial_number = htmlentities($serial_number); //nuovo inserimento di prova
    $damaged_component_code=$_POST['damaged_component_code'];
    $damaged_component_code = htmlentities($damaged_component_code);
    mysql_query("INSERT INTO dbase VALUES ('id', '$userid', '$username', '$claim_level', '$model', '$serial_number', '$damaged_component_code ' )") ;
    }
    include 'closedb.php';
    [/php]

    Se non fai altro uso del database, come penso sia, potresti inserirlo nell'if anche quello ed evitare la connessione inutilmente.


  • User

    Grazie 1000+1.
    Efficace e semplice.
    Mi stupisce di non aver trovato questo suggerimento semplice in nessuno dei forum e pagine che ho consultato e provato... e sono state tantissime.
    ciao