• User Newbie

    Script PHP per caricare immagini inserisce due volte lo stesso record in database

    Salve a tutti!
    Sono nuovo del forum e ho un problema con uno script PHP per caricare su server delle immagini e, ad ogni immagine, associare una riga in database che ne contenga la path (per recuperarla in una altra parte del sito) e alcune informazioni su di essa.
    In pratica, lo script carica e copia la immagine della giusta cartella sul server MA mi scrive due record identici nel database...
    Qui c'è il HTML:
    [HTML] <form enctype="multipart/form-data" class="upload-form"> <div class="left"><p>Seleziona Foto</p></div><div class="right"><label for="photo"><span><p>Seleziona...</p></span></label><input type="file" name="photo" id="photo"></div> <div class="left"><p>Titolo</p></div><div class="right"><input type="text" name="title" id="title"></div> <div class="left"><p>Fotocamera</p></div><div class="right"><div class="styled-select"> <select name="photocamera" id="photocamera"> <option value="Olympus OM-D E-M1 II">Olympus OM-D E-M1 II</option> <option value="Olympus OM-D E-M10 III">Olympus OM-D E-M10 III</option> <option value="Olympus OM-D E-M10">Olympus OM-D E-M10</option> <option value="Canon EOS 6D">Canon EOS 6D</option> <option value="Canon EOS 7D Mark II">Canon EOS 7D Mark II</option> <option value="Canon EOS 50D">Canon EOS 50D</option> </select></div></div> <div class="left"><p>Obiettivo</p></div><div class="right"><div class="styled-select"> <select name="obiettivo" id="obiettivo"> <option value="Zuiko ED 7-14mm f/2.8 Pro">Zuiko ED 7-14mm f/2.8 Pro </option> <option value="Zuiko ED 9-18mm f/4.0-5.6">Zuiko ED 9-18mm f/4.0-5.6</option> <option value="Zuiko ED 12-50mm F3.5-6.3 EZ">Zuiko ED 12-50mm F3.5-6.3 EZ</option> <option value="Zuiko ED 12-100 mm f/4.0 IS">Zuiko ED 12-100 mm f/4.0 IS</option> <option value="Zuiko ED 40‑150 mm f/2.8 PRO">Zuiko ED 40‑150 mm f/2.8 PRO</option> <option value="Zuiko 17mm f/1.8">Zuiko 17mm f/1.8</option> <option value="Zuiko 45mm f/1.8">Zuiko 45mm f/1.8</option> <option value="Zuiko ED 60mm f/2.8 Macro">Zuiko ED 60mm f/2.8 Macro</option> <option value="Panasonic Lumix G Vario 14-140mm f/3.5-5.6 ASPH OIS">Panasonic Lumix G Vario 14-140mm f/3.5-5.6 ASPH OIS</option> <option value="Panasonic Lumix G Vario 14-140mm f/3.5-5.6 ASPH OIS">Panasonic Lumix G Vario 14-140mm f/3.5-5.6 ASPH OIS</option> <option value="Panasonic Leica DG Summilux 25mm f/1.4 ASPH"> Panasonic Leica DG Summilux 25mm f/1.4 ASPH</option> <option value="Canon EF 24-105mm f/4 L IS USM"> Canon EF 24-105mm f/4 L IS USM</option> <option value="Canon EF 70-200mm f/4 L IS USM"> Canon EF 70-200mm f/4 L IS USM</option> <option value="Sigma 85mm f/1.4 EX DG HSM"> Sigma 85mm f/1.4 EX DG HSM</option> <option value="Sigma 150-600mm f/5-6.3 DG OS HSM C"> Sigma 150-600mm f/5-6.3 DG OS HSM C</option> <option value="Sigma 500mm f/4.5 EX DG HSM"> Sigma 500mm f/4.5 EX DG HSM</option> </select></div></div> <div class="left"><p>Estensione</p></div><div class="right"><div class="styled-select"> <select name="extension" id="extension"> <option value="">nessuna</option> <option value="Canon Extender 1.4x II">Canon Extender 1.4x II</option> <option value="Kenko Pro 300 DGX 1.4x">Kenko Pro 300 DGX 1.4x</option> </select></div></div> <div class="left"><p>Specifiche</p></div><div class="right"><p class="specs-p">f.</p><input type="text" name="fspec" id="fspec" class="specs"><p class="specs-p">1/</p><input type="text" name="time" id="time" class="specs"><p class="specs-p">ISO</p><input type="text" name="iso" id="iso" class="specs"></div>
    <div class="left"><p>Categoria</p></div><div class="right"><div class="styled-select"> <select name="cat" id="cat"> <option value="paesaggi">Paesaggi</option> <option value="animali">Animali</option> <option value="macro">Macro</option> <option value="architettura">Architettura</option> <option value="ritratti">Ritratti</option> <option value="eventi">Eventi</option> <option value="reportage">Reportage</option> </select></div></div> <div class="left"><p>Sottocategoria</p></div><div class="right"><div class="styled-select"><select name="subcat" id="subcat"></select></div></div> <div class="left"></div><div class="right"><input type="button" name="upload" value="Carica Fotografia" id="upload"></div> <div class="data"></div> <div class="progress"></div> </form>
    [/HTML]

    Qui c'è la parte più importante, lo jQuery script:

    	$("#upload").on('click', function () {
    
    		if ($("#photo").val() == "") { $(".data").html("<p>Selezionare una fotografia</p>"); }
    		else if ($("#title").val() == "") { $(".data").html("<p>Inserire un titolo</p>"); }
    		else if ($("#photocamera").val() == "") { $(".data").html("<p>Selezionare una Fotocamera</p>"); }
    		else if ($("#obiettivo").val() == "") { $(".data").html("<p>Selezionare un Obiettivo</p>"); }
    		else if ($("#fspec").val() == "") { $(".data").html("<p>Inserire la apertura focale</p>"); }
    		else if ($("#time").val() == "") { $(".data").html("<p>Inserire il tempo di aperrura</p>"); }
    		else if ($("#iso").val() == "") { $(".data").html("<p>Inserire gli ISO</p>"); }
    		else if ($("#cat").val() == "") { $(".data").html("<p>Inserire una categoria</p>"); }
    		else {
    
    
    			var form = $(".upload-form")[0];
    			var formData = new FormData(form);
    
    
    			$.ajax({
    				url: 'php/upload.php',
    				type: 'POST',
    
    
    				data: formData,
    
    
    				cache: false,
    				contentType: false,
    				processData: false,
    
    
    				xhr: function () {
    					var myXhr = $.ajaxSettings.xhr();
    					if (myXhr.upload) {
    						myXhr.upload.addEventListener('progress', function(e) {
    							if (e.lengthComputable) {
    								$(".data").html("<p>Percentuale di upload: " + parseInt((e.loaded / e.total) * 100) + "%" + "</p>");
    								$(".progress").css('width', (e.loaded / e.total) * 100 + "%");
    							}	
    						}, false);
    					}
    					return myXhr;
    				}
    			}).done( function(data) {
    				$(".progress").css('width', '100%');
    				$(".data").html("<p>" + data + "</p>");
    				window.location.href = "galleria.php";
    			});
    		}
    	});
    
    

    Questo mi permette di serializzare la form, inviare i dati al PHP e infine controllare una progressbar per il caricamento della immagine.
    In fine il PHP:

    [PHP]
    <?phpif (!isset($_POST['title']) || !isset($_POST['photocamera']) || !isset($_POST['obiettivo']) || !isset($_POST['fspec']) || !isset($_POST['time']) || !isset($_POST['iso']) || !isset($_POST['cat']) ) { echo 'Compilare completament la form...'; exit;}
    include 'config.php';
    $conn = new mysqli($servername, $username, $password, $dbname);
    $title = mysqli_real_escape_string($conn, $_POST['title']);$photocamera = mysqli_real_escape_string($conn, $_POST['photocamera']);$obiettivo = mysqli_real_escape_string($conn, $_POST['obiettivo']);$fspec = mysqli_real_escape_string($conn, $_POST['fspec']);$time = mysqli_real_escape_string($conn, $_POST['time']);$iso = mysqli_real_escape_string($conn, $_POST['iso']);$cat = mysqli_real_escape_string($conn, $_POST['cat']);
    if (isset($_POST['extension'])) { $extension = mysqli_real_escape_string($conn, $_POST['extension']);} else { $extension = "";}
    if (isset($_POST['subcat'])) { $subcat = mysqli_real_escape_string($conn, $_POST['subcat']);} else { $subcat = "";}
    if (!isset($_FILES['photo']) || !is_uploaded_file($_FILES['photo']['tmp_name'])) { echo 'Non hai inviato nessun file...'; exit; }
    $uploaddir = '../foto/';
    $userfile_tmp = $_FILES['photo']['tmp_name'];
    $userfile_name = $_FILES['photo']['name'];
    $is_img = getimagesize($_FILES['photo']['tmp_name']);
    if (!$is_img) { echo 'Puoi inviare solo immagini'; exit; }
    if (move_uploaded_file($userfile_tmp, $uploaddir . $userfile_name)) { if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); }
    $path = 'foto/' . $userfile_name; $specs = "f." . $fspec . ", 1/" . $time . ", ISO " . $iso;
    $sql = "INSERT INTO foto (title, photocamera, obiettivo, extension, specs, cat, subcat, path) VALUES ('$title', '$photocamera', '$obiettivo', '$extension', '$specs', '$cat', '$subcat', '$path')"; $result = $conn->query($sql);
    if ($conn->query($sql) === TRUE) { echo "Fotografia inserita con successo"; } else { echo 'Errore: ' . $sql . '<br>' . $conn->error; }
    } else { echo 'Impossibile inviare il file...'; }
    $conn->close();
    ?>[/PHP]

    Scusate se irrompo così nel forum, ma è una cosa che proprio non capisco...
    Se qualcuno ha qualche idea, ringrazio in anticipo per l'attenzione.
    Buone Feste!