Skrypt pobiera plik ale nie zmienia wartości uzyty w bazie msql
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.