Skrypt pobiera plik ale nie zmienia zawartości uzyty w bazie mysql
skrypt:
<?php
if (! empty ( $_GET [ "token" ]))
{
require_once "connect.php" ;
$poloczenie = @ new mysqli( $host , $db_user , $db_pass , $db_name );
if ( $poloczenie ->connect_errno!=0)
{
echo "Error!" ;
}
else
{
$tokenurl = $_GET [ "token" ];
$sql = "SELECT * FROM tokeny WHERE token='$tokenurl'" ;
if ( $rezultat = @ $poloczenie ->query( $sql ))
{
$ile_tokenow = $rezultat ->num_rows;
if ( $ile_tokenow >0)
{
$wiersz = $rezultat ->fetch_assoc();
$token = $wiersz [ 'token' ];
$uzyty = $wiersz [ 'uzyty' ];
$id = $wiersz [ 'id' ];
$rezultat ->close();
if ( $uzyty == "nie" )
{
if ( $tokenurl == $token )
{
//wybieramy plik do ściągnięcia
$filename = 'coś.txt' ;
//ustawiamy mu uniwersalny typ mime
header( 'Content-Type:application/force-download' );
//tutaj podajemy nazwę pliku - domyślnie ustawiłem, aby plik nazywał się tak jak oryginał
header( 'Content-Disposition: attachment; filename=' . basename ( $filename ). ';' );
//dodajemy wielkość pliku
header( 'Content-Length:' .@ filesize ( $filename ));
//czytamy plik
@readfile( $filename ) or die ( 'File not found.' );
$sql1 = "UPDATE tokeny SET uzyty='tak' WHERE id='$id'" ;
$poloczenie ->query( $sql1 );
}
}
else
{
echo "Plik został już pobrany!" ;
}
}
else
{
echo "Niepoprawny link!" ;
}
}
$poloczenie ->close();
}
}
else
{
echo "Niepoprawny link!" ;
}
?>
Działanie skryptu:
Skrypt sprawdza czy zmienna GET nie jest pusta. Jeżeli nie, jest łączy się z bazą, sprawdza czy link nie został użyty. Jeżeli nie został użyty pobiera plik i ma zmienić dane w bazie żeby uzyty=tak gdzie id = $id wyciągniętej z bazy tak aby po ponownym uruchomieniu skryptu nie dało się już pobrać pliku.