• User

    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 Kb

    if($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.


  • User Attivo

    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.

    :ciauz:


  • User

    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 Kb

    if($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.


  • User Attivo

    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 Kb

    if($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
    :ciauz:


  • User

    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 Kb

    if($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]


  • User Attivo

    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?

    :ciauz:


  • User

    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.


  • User Attivo

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


  • User

    Grazie dell'aiuto la provo subito, anche perchè io non sarò un grande di php pero if so come funziona:x


  • User

    Ciao ho trovato il problema 😉 erano i file temp di windows. :dull: 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.


  • User Attivo

    Ciao spirit19,
    mi fa piacere che sei riuscito a trovare il problema. :vai:

    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?

    :ciauz:


  • User

    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]


  • User Attivo

    Ciao,
    prova così:
    [php]if(!in_array(strtolower ($_FILES['video']['type']),$video)) [/php]:ciauz:


  • User

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


  • User Attivo

    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.

    :ciauz:


  • User

    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.


  • User Attivo

    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.

    :ciauz:


  • User

    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:


  • User Attivo

    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?

    :ciauz:


  • User

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