Verificare il doqnolad di un file per una sola volta

Monital

Utente Attivo
15 Apr 2009
778
2
18
Salve a tutti e ben trovati, credo dia vere un problema che solo voi potete risolvere.
Ho creato una pagina epr fare il downolad di un buono sconto, ho inserito la verifica che permette il download solo agli utenti registrati ma vorrei intanto assicurarmi che il download sia andato a buon fine e poi inserire nel database il downolad effettuato cosi da permettere los tesso una sola volta.

pensate sia possibile?

Grazie
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
per la verifica se il download sia andato a buon fine non saprei come fare, per la verifica che sia scaricato una volta sola potresti fare qualcosa del genere
ti schematizzo
PHP:
<?php
session_start();
/* immagino che essendo una pagina riservata agli iscritti tu abbia all'inizio
qualcosa del genere che permette l'accesso solo agli iscritti
*/
if(!isset($_SESSION['utente'])){
	//la sessione non esiste quindi un tentativo di accesso non consentito
	header("location: dove_vuoi.php");
	exit();
}else(
	//la sessione esiste: l'utente è un iscritto
	//dati di connessione al db
	/*in una tabella a parte o nella tabella utenti verifichi il valore un campo chiamato es dow che può essere
	0 se non fatto mai il dwnload o 1 se dowload gia stato fatto*/
	$query=mysqli_query($conn,"SELECT dow FROM verifica_down WHERE utente ='".$_SESSION['utente']."'");
	$riga=mysqli_fetch_array($query);
	if($riga['dow'] ==  1){//se 1 il down è gia stato fatto una volta dall'utente
		echo "down gia fatto";
		// e rimandi dove wuoi
		exit();
	}else{
		//fai scaricare il buono e uppi la tabella
		$query=mysqli_query($conn,"UPDATE verifica_down SET dow= 1 WHERE utente ='".$_SESSION['utente']."'");
		/* e rimandi dove vuoi eventualmente con un avviso
		che se ci sono stati problemi nel down di scrivere al webmaster*/
		exit();
	}
)
?>
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
scusa dimenticavo
se usi per la verifica del down la stessa tabella utenti in cui hai il campo down devi upparla
sue usi una tabella diversa devi fare l'insert
PHP:
<?php
//....
	$query= mysqli_query($conn,"INSERT INTO verifica_down(utente,down) VALUES('".$_SESSION['utente']."', 1)");
//...
?>
 

Rikk73

Utente Attivo
7 Apr 2015
134
6
18
Arezzo
Esistono dei modi per controllare se il download di un file (di solito quelli di grandi dimensioni) si è interrotto e quindi farlo poi ripartire dal punto di interruzione e non dall'inizio, anche se io personalmente ammetto che non ci ho capito molto... prova a dare un'occhiata qui
http://www.icosaedro.it/articoli/php-file-download.html

http://www.pixelstech.net/article/1357732373-Output-a-file-with-HTTP-range-header-in-PHP

se riesci ad usare questo $_SERVER['HTTP_RANGE'] lo puoi utilizzare per scrivere nel db la dimensione in bytes del file scaricato, che se è presente ed uguale al file in questione vuol dire che è già stato scaricato.


Un'altro accorgimento potrebbe essere quello di far aprire una nuova finestra al click sul link del file, dove ricordi che il documento è scaricabile una sola volta...., qui metti il link vero e proprio per il download ed alla chiusura della pagina setti il db come suggerito da borgo italia