[PHP] Pulsante SUBMIT per download diretto dei file

spider81man

Utente Attivo
7 Lug 2018
26
0
1
Roma
Ciao a tutti ragazzi,
ho bisogno che se clicco un pulsante di tipo submit mi parta una funzione che faccia poi partire il download.
Questo mi serve perchè così posso tracciare l'utente che ha scaricato il file mettendo il tutto in un DB.
Sapete aiutarmi?
Grazie
spider81man
 
Ultima modifica:
Quando chiami il submit, la funzione "finale" dovrebbe avere settato l'header in base al content type così da poter effettuare il download:
PHP:
header("Content-type:application/pdf");

// It will be called downloaded.pdf
header("Content-Disposition:attachment;filename='downloaded.pdf'");

// The PDF source is in original.pdf
readfile("original.pdf");
Preso da w3c https://www.w3schools.com/php/func_http_header.asp
 
Ciao,
guarda ho fatto cosi

PHP:
header("Content-Disposition:attachment;filename='$path_down'

dove $path_down è la variabile con il puntamento al file esatto. La cosa strana è che dentro la variabile vi è questo percorso ad esempio "uploadtest/treno.jpg" mentre se clicco su download mi da "uploadtest_treno.jpg" sostituisce la / con _ per questo no mi fa scaricare il file.
Sa dirmi come mai??
 
filename='$path_down'
In realtà qui andrebbe il nome del file e non il percorso...

Invece qui ci va il percorso!
PHP:
readfile("original.pdf");

Quindi ricapitolando;
PHP:
header("Content-type:application/pdf");

// It will be called downloaded.pdf
header("Content-Disposition:attachment;filename='SOLO_NOME_DEL_FILE.pdf'");

// The PDF source is in original.pdf
readfile("/VAR/WWW/DOVE/SI/TROVA/IL/FILE/FILE.pdf");
 
Grazie per la celere risposta,
ho scritto così
PHP:
// It will be called downloaded.pdf
    header("Content-Disposition:attachment;filename=$nome_file");
    
// The PDF source is in original.pdf
    readfile("/uploadtest");

Mi fa scaricare il file ma non me lo fa aprire e mi da la risposta che vedi nell'immagine, cioè "IMPOSSIBILE CARICARE L'IMMAGINE. Errore nell'interpretare la jpeg".
Sai dirmi come mai??
Grazie
 

Allegati

  • schermata.png
    schermata.png
    77,6 KB · Visite: 377
Lo script è tutto questo
PHP:
if (isset($_POST["Download"])) {
    $search_desc = $_REQUEST['search_desc'];
    $search_proc_pen = $_REQUEST['search_proc_pen'];
    $id_file = $_REQUEST['id_file'];
    $nome_file= $_REQUEST['nome_file'];
    $path_down=$_REQUEST['path'];
    $orario_download= date("d-m-Y H:i:s");
    $query_download = "INSERT into `download` (cip_down, id_file, nome_file , orario_download)
              VALUES ('$cip','$id_file','$nome_file', '$orario_download')";
    $result = mysqli_query($con,$query_download) or die(mysql_error());

// It will be called downloaded.pdf
    header("Content-Disposition:attachment;filename=$nome_file");
   
// The PDF source is in original.pdf
    readfile("/uploadtest");  

}

Il problema è che non mi inserisce neanche i dati nel DB se metto "header" è come se si bloccasse tutto e da li in avanti non legga più nulla.

EDIT:

Facendo delle prove ho notato che se commento SOLO

PHP:
header("Content-Disposition:attachment;filename=$nome_file");

Mi finisce la funzione e mi fa quindi l'inserimento nel DB quindi dive essere questa parte che lo manda in paranoia
1f603.png
 
Ultima modifica:
Spezza il flusso in 2 parti:

funzione per inserire i dati con valore di ritorno
Header per scaricare il file:
PHP:
function insert_in_db($data,$map){

try{

//mysql e ciò che vuoi che venga eseguito
   return TRUE;
  } catch(Exception $e){
     return FALSE;
}


}
if(insert_in_db(data,$map){

     header_etc....

    }else {
    //errore
}
Prova a strutturare un pò il codice, così hai i break point da poter analizzare e non tutto in IF!
 
per scaricare il file al click ho fatto cosi

HTML:
><a href="<?php echo $path?>" download="<?php echo $path?>" onclick="show_alert()"><?php echo $path?></a></td>

Mi scarica il file tranquillamente, ora sto facendo richiamare una funzione che mostra una alert box ma a questo punto potrei da li fare l'inserimento con sul DB? Come sarebbe la sintassi?
Grazie
 
Ragazzi buongiorno,
io non riesco a capire come mai se metto tutto il codice di cui sopra e commento la parte
/*
header("Content-type:application/pdf");
header("Content-Disposition:attachment;filename=$nome_file");
readfile("/uploadtest");
*/
Mi effettua tranquillamente la query e mi inserisce i dati nel DB, mentre se tolgo i commenti al CLICK mi parte il download del File, che mi dice essere danneggiato una volta scaricato, ma non mi fa la query.
Sto impazzendo!!!
 
Ho trovato una soluzione, non molto elegante lo so ma intanto per ora facciamocela bastare.
In praica alla fine dello script download metto

header("Location: uploadtest/"$nome_file");

così mi apre direttamente il file che sia IMG o PDF, visto che non riesco a scaricarlo almeno lo vedo sujl browser e poi lo scarico.
Ora la mia domanda è, come faccio a far aprire una NUOVA PAGINA con header?
Grazie
 

Discussioni simili