Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.02.2014, 22:21
Интересующийся
Отправить личное сообщение для RAPOS Посмотреть профиль Найти все сообщения от RAPOS
 
Регистрация: 20.07.2013
Сообщений: 25

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

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

По умолчанию в селекте стоит "Работа", нажмите "показать".
Перед вами откроется табличка! Рядом с к нопкпой "показать" появиться фильтр" по дате начала (колонка подписана в таблице)! Если мы кликаем на кнопку "фильтр" и оба поля пусты, то нам выдаст "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>
<?
			}
}

Последний раз редактировалось RAPOS, 22.02.2014 в 03:50.
Ответить с цитированием
  #2 (permalink)  
Старый 21.02.2014, 22:33
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

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

Undefined index: in_filter

нет такого индекса в посте
Ответить с цитированием
  #3 (permalink)  
Старый 21.02.2014, 22:34
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Ну вот же оно:

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


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

Следующие строки сообщений сервера попросту вытекают из первого после которого скрипт продолжает молотить себе по яйцам, потому что нет нигде проверок на ошибку и нет эксепшнов.
Ответить с цитированием
  #4 (permalink)  
Старый 21.02.2014, 22:41
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

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

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

$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
Ответить с цитированием
  #5 (permalink)  
Старый 21.02.2014, 22:44
Интересующийся
Отправить личное сообщение для RAPOS Посмотреть профиль Найти все сообщения от RAPOS
 
Регистрация: 20.07.2013
Сообщений: 25

Народ, да это я в курсе, но вы логику понять можете, что когда выполняется эта строка
$('#work').load('ajax.php', {filter_date:"date"});
то это не работает
if(isset($_POST['filter_date']) && $_POST['filter_date']=='date'){
  $in_filter = $_POST['in_filter'];
Ответить с цитированием
  #6 (permalink)  
Старый 21.02.2014, 22:50
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

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

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


По этому поводу ничего не могу посоветовать, потому что смысла криптографии не улавливаю.
Ответить с цитированием
  #7 (permalink)  
Старый 21.02.2014, 22:59
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

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

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

14 in_filter: start,

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

Почитайте что такое successful элемент form-data
Ответить с цитированием
  #8 (permalink)  
Старый 21.02.2014, 23:00
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от RAPOS
function onAjaxSuccess(data)
Function Definition внутри if/else - плохая примета. Не к добру оно.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #9 (permalink)  
Старый 21.02.2014, 23:01
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

В форме:

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

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

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

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

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

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

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

Последний раз редактировалось kostyanet, 21.02.2014 в 23:06.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает код Kendrick Internet Explorer 5 12.09.2012 16:14
Требуется выводить код рекламного блока Adsense из файла JavaScript??? speedflow Элементы интерфейса 0 26.05.2012 15:50
Запуск кода с фрейма, код в родительском окне - КАК ? lamer Javascript под браузер 7 06.05.2012 15:15
Как создать bodyclick код royksopp Общие вопросы Javascript 8 14.10.2011 16:39
код странно отрабатывает комбинацию клавиш ffx Общие вопросы Javascript 4 20.01.2011 10:58