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.