PHP nie wykonuje zapytania do bazy

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.

A może sprawdź co Ci odpowiada serwer?

$sql1 = "UPDATE tokeny SET uzyty='tak' WHERE id='$id'" ;

$poloczenie ->query( $sql1 );

Zgaduję, bo interpretera w oczach nie mam, że problemem jest to, że przesyłasz id jako stringa, a nie inta.

Włączyłem raportowanie błędów a serwer nie mówi kompletnie nic. Plik pobiera ale w bazie nic nie zmienia.

Czy chodziło o te apostrofy ‘$id’ ? Usunąłem je ale to nic nie pomogło.

Co Ci zwraca DB jak wykonasz zapytanie, w ogóle tego nie sprawdzasz/nie kontrolujesz w swoim kodzie.

Na moje to na aktualnych wersjach PHP to nawet ten kod nie zadziała to tak po pierwsze.
Po drugie grozi to dużym kuku, lepiej przejdź na PDO i zacznij bindować parametry.

Raportowanie błędów serwera tak. Ale raportowania błędów bazy już nie sprawdzasz. @Fizyda dobrze podpowiada, a ja jeszcze od siebie dodam - jak chcesz sprawdzić jakie zapytanie zostanie wysłane do serwera, debugując podejrzyj sobie zawartość $sql1 albo jeśli nie używasz debuggera (a warto!) zrób var_dump($sql1) i zobacz co jest w środku a następnie uzyskane w ten sposób zapytanie wykonaj ręcznie na bazie przez phpmyadmina czy konsolę czy czego tam używasz.