- Home
- Categorie
- Coding e Sistemistica
- PHP
- Problema con update file
-
Problema con update file
Ciao a tutti, vi posso chiedere se trovate l'errore in questo script, deve inserire il nome del file nel database e copiare il file nella cartella, non funziona neanche il controllo valore passoto se e vuoto o piene
metto il form che invia i dati e i script per inserire i dati nel database
ps per form.php metto solo input file che e quello che non funziona
form.php
[html]
<form method="post" name="agg" onsubmit="return(controllo());" enctype="multipart/form-data" action="db_videos.php">
<div class="controll_text">
<div class="text_title"><strong>Aggiungi Video</strong></div>
<div class="text_left"><strong>Titolo Video *</strong></div>
<div class="text_right"><input class="input" type="text" name="titolo" size="30" /></div>
<br class="clearfloat" />
<div class="text_left"><strong>Video *</strong></div>
<div class="text_right"><input class="input" type="file" name="videos" size="27" />
<input type="hidden" name="MAX_FILE_SIZE" value="850000" /></div>
</form>
[/html]db_video.php
[php]
<div class="controll_text">
<?php include ("../../config.php");
$link=mysql_connect ("$db_host","$db_user","$db_pass") or die ("Errore di Connessione" .mysql_error());
mysql_select_db ($db_name, $link) or die ("Errore Tabella non trovata" .mysql_error());$titolo_ = addslashes(ltrim(rtrim(strip_tags(stripslashes($POST['titolo'])))));
if ( !empty ($titolo)) { $titolo = addslashes(ltrim(rtrim(strip_tags(stripslashes($POST['titolo'])))));}
elseif (empty ($titolo)){die ( "<p style="font-weight:bold; text-align:center;">Errore nella compilazione dei dati. <br />Non hai indicato il titolo.<br /><br />
<a href="javascript:history.go(-1)" title="Torna indietro">Torna indietro.</a></p>");}$descrizione = addslashes(ltrim(rtrim(strip_tags(stripslashes($_POST['elm1'])))));
$patologia_ = addslashes(ltrim(rtrim(strip_tags(stripslashes($POST['patologia'])))));
if ( !empty ($patologia)){
$patologia = addslashes(ltrim(rtrim(strip_tags(stripslashes($POST['patologia'])))));
$sezione_patologia = addslashes(ltrim(rtrim(strip_tags(stripslashes($POST['sezione_patologia'])))));
}
elseif (empty ($patologia)){$sezione_patologia = 0;}
$metodo = addslashes(ltrim(rtrim(strip_tags(stripslashes($POST['metodo'])))));
if ( !empty ($metodo)) {
$metodo = addslashes(ltrim(rtrim(strip_tags(stripslashes($_POST['metodo'])))));
$sezione_metodo = addslashes(ltrim(rtrim(strip_tags(stripslashes($POST['sezione_metodo'])))));
}
elseif (empty ($metodo)){$sezione_metodo = 0;}$terapia_ = addslashes(ltrim(rtrim(strip_tags(stripslashes($POST['terapia'])))));
if ( !empty ($terapia)) {
$terapia = addslashes(ltrim(rtrim(strip_tags(stripslashes($_POST['terapia'])))));
$sezione_terapia = addslashes(ltrim(rtrim(strip_tags(stripslashes($POST['sezione_terapia'])))));
}
elseif (empty ($terapia)){$sezione_terapia = 0;}
include("update_video.php");htmlentities ($titolo, $descrizione, ENT_NOQUOTES );
$strsql = "INSERT INTO tabella_dati (titolo, video, descrizione, patologia, metodo, terapia, sezione_patologia, sezione_metodo, sezione_terapia) VALUES ('$titolo', '$video', '$descrizione', '$patologia','$metodo','$terapia', '$sezione_patologia', '$sezione_metodo', '$sezione_terapia')";
$rs=@mysql_query ("$strsql") or die ("Errore di Connessione" .mysql_error());
header("location: ../index.php");
[/php]update_video.php
[php]
<?php
$size = $_FILES['videos'];
$type = $_FILES['videos']['type'];
if(!isset($type) || $size==0){
echo ("Nessun file selezionato per l'upload");
}
elseif(isset($type) || $size!=0){
$array_estensioni_ammesse=array('mp4','wmv','flv'); //estensioni ammesse
$dimensione_massima=800000; //dimensione massima consentita per file in byte -> 1024 byte = 1 Kbif($size>$dimensione_massima){
echo "Il file selezionato per l'upload supera la dimensione massima di 80Mb";}
else{
$timestamp = time();
$file = time() .'-'.move_uploaded_file($_FILES['videos']['name']);
$dir ="../../videos/";
$urlvideo = $dir.$file;
copy($_FILES['videos']['tmp_name'], $urlvideo);
$video = $file;
}
}
?>
[/php]grazie a tutti.
-
Ciao Spirit19,
ad occhio mi sembra che sia tutto giusto,
per facilitare le ricerche dell'errore potresti però riscrivere il codice in maniera più 'umana'.Usi tante variabili 'xxxx_' che rendono solo più complessa la lettura.
e poi usi if/else if in maniera non completa:se devi fare un test true o false usa if/else;
se il test che devi eseguire prevede più di due esiti allora usa if/else if/else.Nei test che fai potrebbe succedere che l'elaborazione dello script non entri nè nel ramo if nè nel ramo else if.
Ti faccio un esempio di come potresti scrivere il test che dici non funzionare:
[php]
if (isset($_POST['titolo'])){
$titolo = addslashes(ltrim(rtrim(strip_tags(stripslashes($_POST['titolo'])))));
}
else{
die("<p style="font-weight:bold; text-align:center;">Errore nella compilazione dei dati. <br />Non hai indicato il titolo.<br /><br />");
}
[/php]Secondo me poi ti sarà molto più facile capire dove sbagli, o essere aiutato.
-
Grazie della risposta, ho fato il ramo if/else completo
pero update_video non funziona per niente non entra nei rami if/else
come mai?, se non passo il video allora $_file e vuoto giusto?
quindi if(empty $_file) o if(!isset $_file) è vera e perchè non entra?
e anche else non va perchè, un script simile lo uso per le foto e va bene, poi per salvare il collegamento nel database che uso, un blob o un vachar?codice update_video.php
[php]
<?php
$size = $_FILES['videos'];
$type = $_FILES['videos']['type'];
if(!isset($type) || $size==0){
echo ("Nessun file selezionato per l'upload");
}
elseif(isset($type) || $size!=0){
$array_estensioni_ammesse=array('mp4','wmv','flv'); //estensioni ammesse
$dimensione_massima=800000; //dimensione massima consentita per file in byte -> 1024 byte = 1 Kbif($size>$dimensione_massima){
echo "Il file selezionato per l'upload supera la dimensione massima di 80Mb";}
else{
$timestamp = time();
$file = time() .'-'.$_FILES['videos']['name'];
$dir ="../../videos/";
$urlvideo = $dir.$file;
copy($_FILES['videos']['tmp_name'], $urlvideo);
$video = $file;
}
}
?>
[/php]
rigrazie per l'aiuto.
-
Ciao anche qui c'è un test che potrebbe sfuggirti.
[php]
if(!isset($type) || $size==0)
.......
elseif(isset($type) || $size!=0)
............
[/php]E se $type è valorizzato ma $size è 0 ?Purtroppo, visto che cerchiamo un errore non possiamo dare niente per scontato: questo sarebbe il primo grave errore.
Mi sono permesso di ritoccare il codice che hai postato:
in questa maniera puoi capire immediatamente se il problema si verifica nella parte precedente a questo script (si verificherà die ("Nessun file selezionato per l'upload");) oppure se l'errore è nella parte dove prepari e copi il file.[php]
$size = $_FILES['videos'];
$type = $_FILES['videos']['type'];if(!isset($type) || $size==0){
die ("Nessun file selezionato per l'upload");
}$array_estensioni_ammesse=array('mp4','wmv','flv'); //estensioni ammesse
$dimensione_massima=800000; //dimensione massima consentita per file in byte -> 1024 byte = 1 Kbif($size>$dimensione_massima){
echo "Il file selezionato per l'upload supera la dimensione massima di 80Mb";
}
else{
$timestamp = time();
$file = time() .'-'.$_FILES['videos']['name'];
$dir ="../../videos/";
$urlvideo = $dir.$file;
copy($_FILES['videos']['tmp_name'], $urlvideo);
$video = $file;
}
[/php]Fammi sapere
-
Ho provato il tuo e non va, quindi ho pensato, sarà il form? e ho fatto questa prova e non va cmq,
[php]
<?php
$size = $_FILES['videos'];
$type = '2';
if($type==2){
echo ("Nessun file selezionato per l'upload");
}$array_estensioni_ammesse=array('mp4','wmv','flv'); //estensioni ammesse
$dimensione_massima=800000; //dimensione massima consentita per file in byte -> 1024 byte = 1 Kbif($size>$dimensione_massima){
echo "Il file selezionato per l'upload supera la dimensione massima di 80Mb";}
else{
$timestamp = time();
$file = time() .'-'.$_FILES['videos']['name'];
$dir ="../../videos/";
$urlvideo = $dir.$file;
copy($_FILES['videos']['tmp_name'], $urlvideo);
$video = $file;
}
?>
[/php]
-
Ciao,
cosa intendi con non va?Cosa ti aspettavi dopo il tuo test con $type = '2'?
'2' non è 2: una è una stringa, l'altro è un numero.
Tu dirai:
Ma il cast non è automatico in PHP?Risposta:
Dovrebbe esserlo, ma a volte ho dovuto eseguire cast 'manuali'.Comunque,
nei logs del web server non trovi nessun errore?
-
Scusa, ho copiato male, ho provato sia come strnga e che numero
$type=2; if($type==2) e $type='2'; e if($type=='2')
No il server non da errori.
-
Mi sa allora che l'elaborazione si blocca prima, lì mi sa che non ci arrivi proprio.
Se vuoi sul mio sito, precisamente qui, ho messo a disposizione una classe per eseguire dei log su file durante il funzionamento dell'applicazione.
E' nata proprio per eseguire il debug applicativo in fase di test: direi la tua situazione.
Se ti va,
preleva pure il codice della classe ed utilizzala.Nell'articolo, alla fine, ci sono degli esempi che mostrano come utilizzarla.
Io la ho usata parecchio e mi è servita. Spero serva anche a te.
Buon debug.
-
Grazie dell'aiuto la provo subito, anche perchè io non sarò un grande di php pero if so come funziona:x
-
Ciao ho trovato il problema erano i file temp di windows. Comunque lo cambiata un pò questa e quello che uso
[php]
<?php
$video = $_FILES['video']['type'];
$video_size = $_FILES['video'];
if(empty($video)){
die ( "<p style="font-weight:bold; text-align:center;">Errore nella compilazione dei dati. <br />Nessun file selezionato per l'upload.<br /><br />
<a href="javascript:history.go(-1)" title="Torna indietro">Torna indietro.</a></p>");
return false;
}
else{
$dimensionimax =800000;
$timestamp = time();
$file = time() .'-'.$_FILES['video']['name'];
$video = array("mp4","avi", "image/png","image/pjpeg","image/jpeg", "image/jpg");
if(!in_array($_FILES['video']['type'],$video))
{
die ("<p style="font-weight:bold; text-align:center;">Il file non è di un tipo consentito, sono ammessi solo i seguenti: ". implode("," , $video) ."<br /><br />
<a href="javascript:history.go(-1)" title="Torna indietro">Torna indietro.</a></p>");
}if ($video_size>$dimensionimax)
{
die ("<p style="font-weight:bold; text-align:center;">Errore: Il Video supera il limite di 80Mb ".mysql_error()."<br /><br />
<a href="javascript:history.go(-1)" title="Torna indietro">Torna indietro.</a></p>");
exit;
}else{
$dir ="../../videos/";
$urlvideo = $dir.$file;
copy($_FILES['video']['tmp_name'], $urlvideo);
$video_file = $file;
}
}
?>
[/php]Devo fare delle modifiche o va bene cosi?
Poi mi da un problema con il formati io vorrei caricare un video.mp4 pero mi da l'avviso del formato non consentito come mai?
Ciao.
-
Ciao spirit19,
mi fa piacere che sei riuscito a trovare il problema.Dunque,
per quanto riguarda l'estensione non accettata,
la segnalazione ti appare perchè hai invertito il test.Tu testi:
se è falso che 'mp4' è presente nell'array delle estensioni consentite
allora segnala 'estensione non consentita'.Mentre vorresti assicurarti che sia vero invece che 'mp4' sia presente nell'array, giusto?
Ti è servita la classe MaLogger?
-
La classe ancora non lo usata, comunque uso questo per il controllo formato
[php]
$video = array("mp4","avi", "image/png","image/pjpeg","image/jpeg", "image/jpg");
if(!in_array($_FILES['video']['type'],$video))
{
die ("<p style="font-weight:bold; text-align:center;">Il file non è di un tipo consentito, sono ammessi solo i seguenti: ". implode("," , $video) ."<br /><br />
<a href="javascript:history.go(-1)" title="Torna indietro">Torna indietro.</a></p>");
}
[/php]
-
Ciao,
prova così:
[php]if(!in_array(strtolower ($_FILES['video']['type']),$video)) [/php]
-
Ciao del tuo aiuto;),
ho provato come dici tu non va,
ho inserito altri formati, ma ancora non riconosce mp4
[php]
$video = array(" mp4", " mpeg-4", " mpeg", " mpg", " avi", " wmv", " flv", " divx", " avi", " image/png", " image/pjpeg", " image/jpeg", " image/jpg");
if(!in_array(strtolower ($_FILES['video']['type']),$video))
{
die ("<p style="font-weight:bold; text-align:center;">Il file non è di un tipo consentito, sono ammessi solo i seguenti:<br /> ". implode("," , $video) ."<br /><br />
<a href="javascript:history.go(-1)" title="Torna indietro">Torna indietro.</a></p>");
}
[/php]P.S. Ho provato con varii video .mp4, flv, avi nada non va il controllo.:?
-
Ciao,
ho notato che aggiungi uno spazio bianco prima dell'estensione:
' mp4',' mpeg' ecc...Rimuovi li spazi bianchi,
e per sicurezza trimma l'estensione che ricavi dal file uploadato.
-
Ciao scusa che vuoi dire con" e per sicurezza trimma l'estensione che ricavi dal file uploadato" come si fa in php?
Grazie del tuo aiuto.
-
Ciao Spirit19,
intendevo questo:[PHP]
$video = array("mp4", "mpeg-4", "mpeg", "mpg", "avi", "wmv", "flv", "divx", "avi", "image/png", "image/pjpeg", "image/jpeg", "image/jpg");
if(!in_array(strtolower (trim($_FILES['video']['type'])),$video))
{
die ("<p style="font-weight:bold; text-align:center;">Il file non è di un tipo consentito, sono ammessi solo i seguenti:<br /> ". implode("," , $video) ."<br /><br />
<a href="javascript:history.go(-1)" title="Torna indietro">Torna indietro.</a></p>");
}
[/PHP]come noterai, ho rimosso lo spazio bianco che precedeva ogni estensione in $video, e ho 'trimmato' l'estensione del file uploadato.
-
Ciao ho provato come dici tu e non funziona, poi ho provato cosi
[php]
$video = array("mp4", "mpeg-4", "mpeg", "mpg", "avi", "wmv", "flv", "divx", "avi", "image/png", "image/pjpeg", "image/jpeg", "image/jpg");
if(!in_array(strtolower(ltrim(rtrim(trim($_FILES['video']['type'])))),$video))
{
die ("<p style="font-weight:bold; text-align:center;">Il file non è di un tipo consentito, sono ammessi solo i seguenti:<br /> ". implode("," , $video) ."<br /><br />
<a href="javascript:history.go(-1)" title="Torna indietro">Torna indietro.</a></p>");
}
[/php]
e continua a non funzionare:bho:
-
Ma provare a debuggare?
Se non ti va di utilizzare la via che ti ho detto,
puoi sempre creare commenti HTML nella pagina:[PHP]
$video = array("mp4", "mpeg-4", "mpeg", "mpg", "avi", "wmv", "flv", "divx", "avi", "image/png", "image/pjpeg", "image/jpeg", "image/jpg");echo '<!-- ESTENSIONE FILE UPLOADATO = "' . trim($_FILES['video']['type']) . '" -->';
if(!in_array(strtolower(trim($_FILES['video']['type']))),$video))
{
die ("<p style="font-weight:bold; text-align:center;">Il file non è di un tipo consentito, sono ammessi solo i seguenti:<br /> ". implode("," , $video) ."<br /><br />
<a href="javascript:history.go(-1)" title="Torna indietro">Torna indietro.</a></p>");
}[/PHP]
Cosa ti traccia il commento nel codice HTML?
-
Grazieee dei consigli
ho stampato [php]$_FILES['video']['type'][/php]
inpratica mette video/ prima del formato video e image/ prima del formato immagine
cosi funziona
[php]
$video = array("video/mp4", "video/mpeg-4", "video/mpeg", "video/mpg", "video/avi", "video/wmv", "video/flv", "video/divx");
if(!in_array(strtolower (trim($_FILES['video']['type'])),$video))
{die ("<p style="font-weight:bold; text-align:center;">Il file non è di un tipo consentito, sono ammessi solo i seguenti:<br /> ". implode("," , $video) ."<br /><br />
<a href="javascript:history.go(-1)" title="Torna indietro">Torna indietro.</a></p>");
}
[/php]
Graziee.:)