Witam. Piszę program który łączy się z forum phpbb3.
Wszystko jest ok dopóki nie próbuję wysłać posta.
Dostaje błąd: Wysłany formularz był nieprawidłowy. Spróbuj wysłać ponownie.
Pogrzebałem w pliku posting.php i znalazłem skrawek kodu:
// check form
if (($submit || $preview) && !check_form_key('posting'))
{
$error[] = $user->lang['FORM_INVALID'];
}
Usunąłem z warunku ! i wysyłanie postu się powiodło. Jednak to nie rozwiązuje mojego problemu ponieważ skoro tam jest ! to widocznie musi tam być.
Wie ktoś dlaczego spełniam ten warunek i pokazuje mi się błąd?
Funkcja check_form_key() z pliku includes/functions.php
function check_form_key($form_name, $timespan = false, $return_page = '', $trigger = false)
{
global $config, $user;
if ($timespan === false)
{
// we enforce a minimum value of half a minute here.
$timespan = ($config['form_token_lifetime'] == -1) ? -1 : max(30, $config['form_token_lifetime']);
}
if (isset($_POST['creation_time']) && isset($_POST['form_token']))
{
$creation_time = abs(request_var('creation_time', 0));
$token = request_var('form_token', '');
$diff = time() - $creation_time;
// If creation_time and the time() now is zero we can assume it was not a human doing this (the check for if ($diff)...
if ($diff && ($diff <= $timespan || $timespan === -1))
{
$token_sid = ($user->data['user_id'] == ANONYMOUS && !empty($config['form_token_sid_guests'])) ? $user->session_id : '';
$key = sha1($creation_time . $user->data['user_form_salt'] . $form_name . $token_sid);
if ($key === $token)
{
return true;
}
}
}
if ($trigger)
{
trigger_error($user->lang['FORM_INVALID'] . $return_page);
}
return false;
}
Podejrzewam że nie spełniam tego warunku:
if ($key === $token)
{
return true;
}
ale o co w nim chodzi?