Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.03.2019, 01:15
Аспирант
Отправить личное сообщение для Alessio18911 Посмотреть профиль Найти все сообщения от Alessio18911
 
Регистрация: 18.06.2017
Сообщений: 83

Некорректно работает условие
Привет всем! У меня есть кусочек кода, Данная форма должна выводить список задач в зависимости от того, найдёт ли она совпадения по слову в названии задачи.
<form class="search-form" action="index.php" method="get">
    <input class="search-form__input <?= empty($tasks_for_category) ? 'form__input--error': ''; ?>" type="text" name="search" value="" placeholder="Поиск по задачам">
    <input class="search-form__submit" type="submit" name="" value="Искать">
    <p class="form__message"><?= empty($tasks_for_category) ? "По Вашему запросу ничего не найдено" :''; ?></p>
</form>

К ней есть код:
$show_completed = $_GET['show_completed'] ?? '';
$user = isset($_SESSION['user']) ? $_SESSION['user'] :'';
$user_id = isset($_SESSION['user_id']) ? $_SESSION['user_id'] : 0;
$term = isset($_GET['term']) ? $_GET['term'] : 'all';
$category_id = isset($_GET['category']) ? (int)$_GET['category'] : 0;
$tasks_for_category = getAllTasksForCategory($connection, $user_id, $category_id, $term);
$category_list = getCategories($connection, $user_id);
$task_list = getTasks($connection, $user_id);


if(isset($_GET['task_id']) && isset($_GET['check'])) {
    $task_id = (int)$_GET['task_id'];
    toggleTaskStatus($connection, $task_id, $user_id);
    header('Location: /');
    exit();
}

if($_SERVER['REQUEST_METHOD'] === 'GET') {
    $search = isset($_GET['search']) ? $_GET['search'] :'' ;
    $tasks_for_category = getTasksBySearch($connection, $user_id, $search);
}

if(!$user) {
    $content = include_template('guest.php', []);
} else {
    $content = include_template('index.php', [
        'show_completed'=> $show_completed,
        'tasks_for_category' => $tasks_for_category,
        'category_id' => $category_id,
        'term' => $term
    ]);
}

$layout_content = include_template('layout.php', [
    'content' => $content,
    'page_title' => 'Дела в порядке',
    'isSignInOrRegister' => false,
    'user' => $user,
    'user_id' => $user_id,
    'category_list' => $category_list,
    'term' => $term,
    'task_list' => $task_list
]);

print($layout_content);

Проблема в следующем: при загрузке страницы должен выводиться список всех задач, это переменная
$tasks_for_category = getAllTasksForCategory($connection, $user_id, $category_id, $term);

Если же была нажата кнопка поиска, input type="submit", то должна сработать другая функция, но результат которой присвоится той же переменной:
$tasks_for_category = getTasksBySearch($connection, $user_id, $search);


Обе функции - getAllTasksForCategory(...) и getTasksBySearch(...) 100% рабочие. Но проблема в следующем: получается, что условие $_SERVER['REQUESTED_METHOD'] === 'GET' всегда true, даже когда кнопка ещё не нажималась. И, следовательно, даже при первичной загрузке страницы всегда активна только 2-я функция ((( Подскажите, чего я опять не понимаю?
Ответить с цитированием
  #2 (permalink)  
Старый 12.03.2019, 02:06
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 10,427

Сообщение от Alessio18911
получается, что условие $_SERVER['REQUESTED_METHOD'] === 'GET' всегда true
А почему оно должно быть иным, если страница запрашивается методом GET и форма отправляется этим же методом?
Ответить с цитированием
  #3 (permalink)  
Старый 12.03.2019, 03:20
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 799

Сообщение от Alessio18911
даже при первичной загрузке страницы всегда активна только 2-я функция
Может тогда стоит оправлять форму при помощи метода POST? (И соответственно обрабатывать на сервере)
Ответить с цитированием
  #4 (permalink)  
Старый 12.03.2019, 09:02
Аспирант
Отправить личное сообщение для Alessio18911 Посмотреть профиль Найти все сообщения от Alessio18911
 
Регистрация: 18.06.2017
Сообщений: 83

laimas, это я впервые сталкиваюсь
Сообщение от laimas Посмотреть сообщение
А почему оно должно быть иным, если страница запрашивается методом GET и форма отправляется этим же методом?
с php и формами, только начал учить этот язык. Проект учебный, до я этого я сталкивался с POST-формами, никаких проблем не было. Там действительно при нажатии на кнопку только срабатывали эти условия. С GET сталкивался только, если, скажем, кнопка была представлена ссылкой. Тогда в href дописывалось необходимый параметр после "?", и после клика по этой кнопке-ссылке он попадал в GET. Думал, что по GET формы работают аналогично. Но в данном случае кнопка - это input, никуда параметр запроса не пропишешь. По условию задания форма "должна работать по методу GET". Вот и ломаю голову, как этого достичь.
Ответить с цитированием
  #5 (permalink)  
Старый 12.03.2019, 09:04
Аспирант
Отправить личное сообщение для Alessio18911 Посмотреть профиль Найти все сообщения от Alessio18911
 
Регистрация: 18.06.2017
Сообщений: 83

Да, Malleys, сегодня с POST получилось.
Сообщение от Malleys Посмотреть сообщение
Может тогда стоит оправлять форму при помощи метода POST? (И соответственно обрабатывать на сервере)
Но это учебный проект и в задании сказано "форма должна работать по методу GET". Но не могу догадаться пока, как сделать, чтобы условие срабатывало только по кнопке, а не всегда.
Ответить с цитированием
  #6 (permalink)  
Старый 12.03.2019, 09:31
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 2,943

Сообщение от Alessio18911
не могу догадаться пока, как сделать, чтобы условие срабатывало только по кнопке, а не всегда.
Проверяйте не метод запроса, а наличие данных в get-параметрах.
Т.е. в форму можно добавить скрытое поле с каким-нибудь уникальным названием, например "process_form" и любым значением, тогда на сервере определить нужно ли обрабатывать форму можно так:
$needFormProcessing=isset($_GET['process_form']);
Ответить с цитированием
  #7 (permalink)  
Старый 12.03.2019, 09:37
Аспирант
Отправить личное сообщение для Alessio18911 Посмотреть профиль Найти все сообщения от Alessio18911
 
Регистрация: 18.06.2017
Сообщений: 83

Nexus, да Вы просто волшебник!!
Сообщение от Nexus Посмотреть сообщение
Проверяйте не метод запроса, а наличие данных в get-параметрах.
Т.е. в форму можно добавить скрытое поле с каким-нибудь уникальным названием, например "process_form" и любым значением, тогда на сервере определить нужно ли обрабатывать форму можно так:
$needFormProcessing=isset($_GET['process_form']);
Действительно, всё заработало. Спасибо большое!!!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скрипт некорректно работает в IE Nataly12 Мобильный JavaScript 0 01.10.2015 10:40
Не работает ajax при OnClick по ссылке firefox govorusha AJAX и COMET 8 06.06.2015 14:34
fancybox работает некорректно. ILL-JAH Angular.js 1 09.04.2015 22:41
JQuery в IE некорректно работает VaiZerD jQuery 10 20.11.2011 19:18
Некорректно работает хинт exec Internet Explorer 4 02.06.2010 18:12