- Home
- Categorie
- Coding e Sistemistica
- PHP
- Upload controllato
-
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
-
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.
-
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 directoryCodice 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.
-
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.
-
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