Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Не отрабатывает код! (https://javascript.ru/forum/dom-window/45285-ne-otrabatyvaet-kod.html)

RAPOS 21.02.2014 22:21

Не отрабатывает код!
 
Проблема решена самым элементарным способом! Создал ещё одну таблицу, в неё записывается выбранная сейчас дата! После идёт к ней запрос, узнаём дату, фильтруем, и выводим аяксом (подгружаем).
----------------------------------
ТЕМУ МОЖНО ЗАКРЫВАТЬ!
----------------------------------

Доброй ночи коллеги! Столкнулся с проблемой на аяксе!
Вот о чудо тестовая вещь! Для дальнейшего понимания о чём идёт речь, перейдите пожалуйста на сайт! И выполните инструкцию!

По умолчанию в селекте стоит "Работа", нажмите "показать".
Перед вами откроется табличка! Рядом с к нопкпой "показать" появиться фильтр" по дате начала (колонка подписана в таблице)! Если мы кликаем на кнопку "фильтр" и оба поля пусты, то нам выдаст "alert" что вы не заполнили дату! Если заполнить хоть одно поле или оба "С (дата) по (дата)", то нам выдаёт такое сообщение:

Код:

Notice: Undefined index: in_filter
in /var/www/levili/data/www/***/ajax.php on line 6

Notice: Undefined index: out_filter
in /var/www/levili/data/www/***/ajax.php on line 7

Notice: Undefined variable: q
in /var/www/levili/data/www/***/ajax.php on line 14

Warning: mysql_fetch_assoc() expects parameter 1 to be resource, null given
in /var/www/levili/data/www/***/ajax.php on line 14

Вот вам предоставляю куски скриптов которые выполняют эти действия!
В js строка alert(data) показывает, что фильтр работает нормально, так как в дата приходит ответ отфильтрованый, но вот беда, подгрузка не выполняется, а выводит выше предоставленные ошибки! Я понимаю, что это за ошибки но как этого избежать?
И так js:
//---Фильтр работ по дате
		$( "#date_filter input" ).datepicker({
		   dateFormat: 'dd.mm.yy',
		});
		$('.filter').click(function(){
			start = $('#in_filter').val();
			finish = $('#out_filter').val();
			if((start == '') && (finish == '')){
				alert('Вы не выбрали дату!');
			}else{
				$.post("ajax.php",
					  {
						filter_date: "date",
						in_filter: start,
						out_filter: finish
					  },
					  onAjaxSuccess
					);
					 
					function onAjaxSuccess(data)
					{
					  $('#work').load('ajax.php', {filter_date:"date"});
					   alert(data);
					}
			}
		});
//---Фильтр работ по дате


А теперь PHP:
<?php
require $_SERVER['DOCUMENT_ROOT'].'/config.php';
$other = new Other;
//Филтр по дате начала!
if(isset($_POST['filter_date']) && $_POST['filter_date']=='date'){
	$in_filter = $_POST['in_filter'];
	$out_filter = $_POST['out_filter'];
		if(($in_filter != '') && ($out_filter == '')){
			$q = mysql_query("SELECT * FROM work WHERE datestart >= '".$in_filter."'");}
		elseif(($in_filter == '') && ($out_filter != '')){
			$q = mysql_query("SELECT * FROM work WHERE datestart <= '".$out_filter."'");}
		elseif(($in_filter != '') && ($out_filter != '')){
			$q = mysql_query("SELECT * FROM work WHERE datestart >= '".$in_filter."' AND datestart <= '".$out_filter."'");}
			while($row = mysql_fetch_assoc($q)){
?>
				<tr>
					<td><?=$row['id']?></td>
					<td><?=$row['name']?></td>
					<td><?=$row['stage']?></td>
					<td><?=$row['plot']?></td>
					<td><?=$row['face']?></td>
					<td><?=$row['datestart']?></td>
					<td><?=$row['datefinish']?></td>
					<td><input type="checkbox" name="work[]" value="<?=$row['id']?>"></td>
				</tr>
<?
			}
}

kostyanet 21.02.2014 22:33

Вам же английским языком написали

Undefined index: in_filter

нет такого индекса в посте

kostyanet 21.02.2014 22:34

Ну вот же оно:

if(isset($_POST['filter_date']) && $_POST['filter_date']=='date'){
  $in_filter = $_POST['in_filter'];


Это называется: а и б сидели на трубе, а курило, б дымило, что др....ло на трубе?

Следующие строки сообщений сервера попросту вытекают из первого после которого скрипт продолжает молотить себе по яйцам, потому что нет нигде проверок на ошибку и нет эксепшнов.

kostyanet 21.02.2014 22:41

ПО ходу ведения

Чтобы не маятся с массивом, при условии нежирных зависимостей, пишите кложу в которой раскидываете массив на обычные переменные.

$save_req = function() use($config) {

 extract($_POST); // все что там есть - высыпалось идентификаторами

   if(isset($in_filter, $out_filter, get_filter, $set_filter, take_filter, $bring_filter) {
  // blah-blah-blah
  }

};

да иссет как и унсет принимает список аргументов и нул для него - не сет.

Пустые строки запросам не страшны. ПРосто ничего не найдется.

ЗЫ Без кложи (которая для защиты namespace) можно юзать префикс в экстракте или натурально namespace

RAPOS 21.02.2014 22:44

Народ, да это я в курсе, но вы логику понять можете, что когда выполняется эта строка
$('#work').load('ajax.php', {filter_date:"date"});
то это не работает
if(isset($_POST['filter_date']) && $_POST['filter_date']=='date'){
  $in_filter = $_POST['in_filter'];

kostyanet 21.02.2014 22:50

Вы сначала провереку поставьте и направляйте в алерт причинный текст заголовка (который ежу понятно надо прописать) и тогда найдете что где отвалилось и вообще ваш ява-скрипт ничтожен. Проверять все надо на сервере. Любой дятел в лесу отгрузит вам что хочет из консоли или плагина.

$('#work').load('ajax.php', {filter_date:"date"});


По этому поводу ничего не могу посоветовать, потому что смысла криптографии не улавливаю.

kostyanet 21.02.2014 22:59

Цитата:

Сообщение от RAPOS
что когда выполняется эта строка
...
то это не работает

Вроде дошло. Функция на суксесе не может оказывать влияния на отгрузку данных, потому что суксесь еще впереди и он не наступает.

Я не понимаю что в терминах аякса и тем более живерного является successful элементом, но, если вот тут

14 in_filter: start,

у вас null, или там undefined, или false - то в посте in_filter не будет ВООБЩЕ как такового.

Почитайте что такое successful элемент form-data

danik.js 21.02.2014 23:00

Цитата:

Сообщение от RAPOS
function onAjaxSuccess(data)

Function Definition внутри if/else - плохая примета. Не к добру оно.

kostyanet 21.02.2014 23:01

В форме:

<input type="checkbox" name="checkbox"/>

чек бокс не нажат, форма отправлена. Будет в $_POST элемент 'checkbox'?

Нет. И это хорошо. Нет checkbox значит НЕ нажат. А чтобы это понять надо проверить

if(isset($_POST['checkbox']))//

А вы не проверяете.

Ы: Нажал я таки ссылку и что же - там туча этих самых чекбоксов которые я взял для примера как самый типичный глюк программистов не знакомых с глюкавостью веба.

Если чекбокс не нажат на сервер никакого FALSE, или 0, или NULL не придет. Ничего не придет и все. Исходя из заведомости знания что должно прийти можно сделать вывод что было, а что не было нажато.


Часовой пояс GMT +3, время: 22:28.