Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.01.2016, 17:06
Аватар для AciDWarrioR
Кандидат Javascript-наук
Отправить личное сообщение для AciDWarrioR Посмотреть профиль Найти все сообщения от AciDWarrioR
 
Регистрация: 11.11.2015
Сообщений: 136

JS + PHP - не могу подружить их.
Всем доброго времени суток!
Ситуация следующая. Есть база данных, которая хранит список снимков с различных спутников и + много ещё инфы по этим спутникам. Реализовал поиск по БД при помощи веб-интерфейса, но вот с выводом адекватным что-то не получается. Когда прост смотрел как все это должно работать создавал таблицы из php, которая была слишком чопорная. Сейчас пытаюсь сделать это приятным на вид. Выдает вот такие ошибки от различных моих подходов к тому как сделать:
Unexpected number (тут я как понял ругается на число, так как это дата, там месяц был 09 и походу ему не нравится ноль в начале).
Или просто тупо не понимает, что это за переменная, хотя по идеи надо чтобы это было просто строковым типом без всякой шелухи, но все никак не могу это сделать. В общем код (начальную страницу поиска выкладывать не буду, так как с ней все в порядке):
?php
   $dbconn = pg_connect("host=192.168.255.197 port=5432 dbname=geoportal user=warden password=blockade") or die('Could not connect' . pg_last_error());
    if($_POST[sat] == "empty"){
   		$_POST[sat] = '';
    }
    if($_POST[device] == "empty"){
    	$_POST[device] = '';
    }
    if($_POST[station] == "empty"){
    	$_POST[station] = '';
    }
    if($_POST[dateAt]==''){
    	$_POST[dateAt]='1950-01-01';
}
	if($_POST[dateTo]==''){
		$_POST[dateTo]='2100-12-31';
	}
	if($_POST[timeAt]==''){
    	$_POST[timeAt]='00:00';
}
	if($_POST[timeTo]==''){
		$_POST[timeTo]='23:59';
	}
    $start_time= $_POST[dateAt] ." ". $_POST[timeAt] . ":00";
    $end_time= $_POST[dateTo] ." ". $_POST[timeTo] . ":59";
    if ($_POST[minLat]== ''){
    	$_POST[minLat]="-90";
    }
    if ($_POST[maxLat]== ''){
    	$_POST[maxLat]="90";
    }
    if ($_POST[minLon]== ''){
    	$_POST[minLon]="-180";
    }
    if ($_POST[maxLon]== ''){
    	$_POST[maxLon]="180";
    }
    $query= "SELECT filename_raw, link_raw, size_raw, satellite, device, station, start_time, end_time, geo, min_lat, max_lat, min_lon, max_lon, filename_l1b, link_l1b, size_l1b, filename_parametr, link_parametr, file_txt, link_txt, adding_time FROM snapshotkppo WHERE satellite LIKE '%".$_POST[satellite]."%' AND device LIKE '%".$_POST[device]."%' AND station LIKE '%".$_POST[station]."%' AND start_time BETWEEN '$start_time' AND '$end_time' AND end_time<='$end_time' AND min_lat>='$_POST[minLat]'  AND max_lat<='$_POST[maxLat]' AND min_lon >='$_POST[minLon]' AND max_lon<='$_POST[maxLon]'";
   $result= pg_query($query); 
    echo '
   			<!DOCTYPE html>
			<html lang="en">
			<head>
				<meta charset="UTF-8">
				<link href="css/main.css" rel="stylesheet">
				<script src="http://code.jquery.com/jquery-1.11.1.js"></script>
				<script src="js/KPPO.js"></script>
				<title>KPPO</title>
			</head>
			<body>
			<div id="struct">
				<div id="header">
					<img src="css/img/Gazprom-SpaceSystems.JPG" alt="Логотип">
				</div>
				<div class="sat_table">
					<table class="table1" style="border-spacing: inherit;">
						<th>
							<td>Имя файла</td>
							<td>Размер(Mb)</td>
							<td>Спутник</td>
							<td>Прибор</td>
							<td>Станция</td>
							<td>Время начала съемки</td>
							<td>Время конца съемки</td>
							<td>Геопривязка</td>
							<td>Мин широта</td>
							<td>Мах широта</td>
							<td>Мин долгота</td>
							<td>Мах долгота</td>
							<td>Файл L1B</td>
							<td>Размер(Mb)</td>
							<td>Файл параметров</td>
							<td>Файл метаданных</td>
							<td>Послед. редактирование</td>
						</th>
					</table>
				</div>
				';
   while($row=pg_fetch_array($result))
   	{ 
   		echo '
   		<script>
   			var tab = document.getElementsByClassName("table1");
			var newRow = document.createElement("tr");
			newRow.classList.add("row");
   			var newCell1 = document.createElement("td");
			var newCell2 = document.createElement("td");
			var newCell3 = document.createElement("td");
			var newCell4 = document.createElement("td");
			var newCell5 = document.createElement("td");
			var newCell6 = document.createElement("td");
			var newCell7 = document.createElement("td");
			var newCell8 = document.createElement("td");
			var newCell9 = document.createElement("td");
			var newCell10 = document.createElement("td");
			var newCell11 = document.createElement("td");
			var newCell12 = document.createElement("td");
			var newCell13 = document.createElement("td");
			var newCell14 = document.createElement("td");
			var newCell15 = document.createElement("td");
			var newCell16 = document.createElement("td");
			var newCell17 = document.createElement("td");
			newCell1.innerHTML = '.$row['filename_raw'].';
			newCell2.innerHTML = '.$row['size_raw'].';
			newCell3.innerHTML = '.$row['satellite'].';
			newCell4.innerHTML = '.$row['device'].';
			newCell5.innerHTML = '.$row['station'].';
			newCell6.innerHTML = '.$row['start_time'].';
			newCell7.innerHTML = '.$row['end_time'].';
			newCell8.innerHTML = '.$row['geo'].';
			newCell9.innerHTML = '.$row['min_lat'].';
			newCell10.innerHTML = '.$row['max_lat'].';
			newCell11.innerHTML = '.$row['min_lon'].';
			newCell12.innerHTML = '.$row['max_lon'].';
			newCell13.innerHTML = '.$row['filename_l1b'].';
			newCell14.innerHTML = '.$row['size_l1b'].';
			newCell15.innerHTML = '.$row['filename_parametr'].';
			newCell16.innerHTML = '.$row['file_txt'].';
			newCell17.innerHTML = '.$row['adding_timed'].';
			newRow.appendChild(newCell1);
			newRow.appendChild(newCell2);
			newRow.appendChild(newCell3);
			newRow.appendChild(newCell4);
			newRow.appendChild(newCell5);
			newRow.appendChild(newCell6);
			newRow.appendChild(newCell7);
			newRow.appendChild(newCell8);
			newRow.appendChild(newCell9);
			newRow.appendChild(newCell10);
			newRow.appendChild(newCell11);
			newRow.appendChild(newCell12);
			newRow.appendChild(newCell13);
			newRow.appendChild(newCell14);
			newRow.appendChild(newCell15);
			newRow.appendChild(newCell16);
			newRow.appendChild(newCell17);
			tab[0].appendChild(newRow);
   		</script>';
   	}
   	echo '</body>';

 	pg_close($dbconn);
?>

Вот какие данных содержатся в ответе от запроса:
Прикреплю картинку, чтобы долго не писать.


PS: в newCell17 тоже данные в виде даты, там просто опечатка в коде)
Ответить с цитированием
  #2 (permalink)  
Старый 19.01.2016, 17:12
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сначала бы РНР код привести в порядок, у вас же дыра в запросе, и почему LIKE, что в базе это строки с прочей смесью кроме указанных формой параметров, в которой и ищется?
Ответить с цитированием
  #3 (permalink)  
Старый 19.01.2016, 17:17
Аватар для AciDWarrioR
Кандидат Javascript-наук
Отправить личное сообщение для AciDWarrioR Посмотреть профиль Найти все сообщения от AciDWarrioR
 
Регистрация: 11.11.2015
Сообщений: 136

Сообщение от laimas Посмотреть сообщение
Сначала бы РНР код привести в порядок, у вас же дыра в запросе, и почему LIKE, что в базе это строки с прочей смесью кроме указанных формой параметров, в которой и ищется?
По конкретнее пожалуйста. Не вижу, что там не так. Этот запрос работает так как надо. Критериев для поиска у пользователя много, в этом запросе они все учитываются. Насчет LIKE не понял, что там не так.

Если вы подразумевали, что там есть переменные для поиска не только $_POST, то это потому что формат даты, которая хранится в БД, составной, то есть самой даты плюс время, а для пользователя реализовано, что он может искать по дате, а может по времени (смысл в том, что может Вам понадобятся чисто снимки дневные или же за какое то число без разницы в какое время снимались).

Последний раз редактировалось AciDWarrioR, 19.01.2016 в 17:25.
Ответить с цитированием
  #4 (permalink)  
Старый 19.01.2016, 17:33
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от AciDWarrioR
По конкретнее пожалуйста.
Да пожалуйста:

if($_POST[sat] == "empty"){
$_POST[sat] = '';
}

Это к чему? А если $_POST[sat] это пробел/пробелы, тогда что?

$post = array_map('trim', $_POST)


и выбросить из кода никчемыне

if($_POST[sat] == "empty"){
$_POST[sat] = '';
}

LIKE '%".$_POST[satellite]."%' и др. - подстановка в запрос необработанных данных извне, это дыра. Они у вас обрабатываются?

Что содержат поля satellite, device, station? Это строки в которых действительно есть совпадения введенные в форму или же ввод в форму определяет непосредственно формат хранимых данных?
Ответить с цитированием
  #5 (permalink)  
Старый 19.01.2016, 17:44
Аватар для AciDWarrioR
Кандидат Javascript-наук
Отправить личное сообщение для AciDWarrioR Посмотреть профиль Найти все сообщения от AciDWarrioR
 
Регистрация: 11.11.2015
Сообщений: 136

Цитата:
Это к чему? А если $_POST[sat] это пробел/пробелы, тогда что?
Пробелов не будет. Поиск по полям device, station, satellite, сделан выпадающим списком. Либо будем empty либо какое то из значений заранее мною предоставленных.


Цитата:
Они у вас обрабатываются?
Да.

Цитата:
Что содержат поля satellite, device, station?
Это поля Наименования спутника, которые пользователь может выбрать из списка, свои придуманные или те, которые мы не поддерживаем естественно нету и ввести он не сможет, так что насчет дыр, я думаю вопрос закрыт. device - прибор которым сделан снимок. station - станция приема.

Я наверное для понимания прикреплю вот такие вещи
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<link href="css/main.css" rel="stylesheet">
	<script src='http://code.jquery.com/jquery-1.11.1.js'></script>
	<script src='js/KPPO.js'></script>
	<title>KPPO</title>
</head>
<script type="text/javascript">
	function change_select(elem) {
  		switch (elem.value) {
  			case 'empty':
  				document.getElementsByClassName('device')[0][0].disabled=false;
  				document.getElementsByClassName('device')[0][1].disabled=false;
  				document.getElementsByClassName('device')[0][2].disabled=false;
  				document.getElementsByClassName('device')[0][3].disabled=false;
  				break;
  			case 'Terra':
  			case 'Aqua':
  				document.getElementsByClassName('device')[0][0].disabled=true;
  				document.getElementsByClassName('device')[0][1].disabled=false;
  				document.getElementsByClassName('device')[0][1].selected=true;
  				document.getElementsByClassName('device')[0][2].disabled=true;
  				document.getElementsByClassName('device')[0][3].disabled=true;
  				break;
  			case 'Suomi NPP':
  				document.getElementsByClassName('device')[0][0].disabled=true;
  				document.getElementsByClassName('device')[0][1].disabled=true;
  				document.getElementsByClassName('device')[0][2].disabled=true;
  				document.getElementsByClassName('device')[0][3].disabled=false;
  				document.getElementsByClassName('device')[0][3].selected=true;
  				break;
  			case 'NOAA-18':
  			case 'NOAA-19':
  			case 'MetOp-A':
  			case 'MetOp-B':
  				document.getElementsByClassName('device')[0][0].disabled=true;
  				document.getElementsByClassName('device')[0][1].disabled=true;
  				document.getElementsByClassName('device')[0][2].disabled=false;
  				document.getElementsByClassName('device')[0][2].selected=true;
  				document.getElementsByClassName('device')[0][3].disabled=true;
  				break;
   		}

	}
</script>
<body>
	<div id="struct">
		<div id="header">
			<img src="css/img/Gazprom-SpaceSystems.jpg" alt="Логотип">
		</div>
		<form id="searchDB" action="http://192.168.255.197/searchSnapshot.php" method="post">
			<div class="search">
				 &nbsp;&nbsp;Спутник:<select name="sat" class="sat" onchange="change_select(this)">
					<option value="empty"></option>
					<option value="Terra">Terra</option>
					<option value="Aqua">Aqua</option>
					<option value="Suomi NPP">Suomi NPP</option>
					<option value="NOAA-18">NOAA-18</option>
					<option value="NOAA-19">NOAA-19</option>
					<option value="MetOp-A">MetOp-A</option>
					<option value="MetOp-B">MetOp-B</option>
				</select> 
				  Прибор:<select name="device" class="device">
					<option value="empty"></option>
					<option value="MODIS">MODIS</option>
					<option value="AVHRR">AVHRR</option>
					<option value="VIIRS">VIIRS</option>
				</select>
				  Станция:<select name="station" class="station">
					<option value="empty"></option>
					<option value="КППО">КППО</option>
				</select>
				<p>&nbsp;&nbsp;Период Съемки:</p>
				<p>&nbsp;&nbsp;От <input name="dateAt" type="date" атрибуты><input name="timeAt" type="time"></p>
				<p>&nbsp;&nbsp;До <input name="dateTo" type="date" атрибуты><input name="timeTo" type="time"></p>
				<div class="geo">
				<hr>
				&nbsp;&nbsp;Поиск по координатам:
				<br>
					<div class="geo1">
						Макс Широта(90°)<input name="maxLat" type="number" min="-90" max="90" step="0.01">
					</div>
					<div class="geo2">
						Мин Долгота(-180°)<input name="minLong" type="number" min="-180" max="180" step="0.01"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
						Макс Долгота(180°)<input name="maxLong" type="number" min="-180" max="180" step="0.01">
					</div>
					<div class="geo3">
						Мин Широта(-90°)<input name="minLat" type="number" min="-90" max="90" step="0.01">
					</div>
				<hr>
				<br>
				</div>
				<div class="buttonSearch">
				<input type="submit" value="Поиск" class="b1">
				</div>
			</div>
		</form>
	</div>
</body>
</html>

Ответить с цитированием
  #6 (permalink)  
Старый 19.01.2016, 18:03
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от AciDWarrioR
Пробелов не будет. Поиск по полям device, station, satellite, сделан выпадающим списком. Либо будем empty либо какое то из значений заранее мною предоставленных.
Ну тогда зачем же вы обрабатываете поля данных извне, если вы так уверены в безопасности? Ведь атаковать вас будут не вашей подготовленной формой с вашими списками, а просто набором данных пришедших откуда угодно. И каким образом у вас обрабатываются поля, если в коде их значения подставляются непосредственно в строку запроса? Что-то ту не так.

Сообщение от AciDWarrioR
Это поля Наименования спутника, которые пользователь может выбрать из списка
Если из списка, то тем более LIKE не нужен.

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

Насчет клиентского кода - просто покажите результирующий html-код ее (не надо РНР), свой код JS, и опишите чего вы хотите добиться.

PS. Наименование спутника уж точно есть в базе, то есть это обязательное значение при заполнении базы. А вот если пользователь его не вводит, то значит искать по пустоте в базе нет смысла. То есть поля без значений нужно исключать из запроса. Это так, для рассуждения.

Последний раз редактировалось laimas, 19.01.2016 в 18:15.
Ответить с цитированием
  #7 (permalink)  
Старый 19.01.2016, 19:05
Аватар для AciDWarrioR
Кандидат Javascript-наук
Отправить личное сообщение для AciDWarrioR Посмотреть профиль Найти все сообщения от AciDWarrioR
 
Регистрация: 11.11.2015
Сообщений: 136

В общем не буду тут оспаривать, так как с php работаю совсем немного. Сеть закрытая и проблемы безопасности отложены пока. Но буду рад если вы объясните как это сделать грамотно! LIKE нужен, чтобы вывести все записи которые совпадают по всем критериям выбранными пользователем. Насчет empty, сделано чтобы выбирались все записи соответствующие полю где пользователь не выбрал спутник прибор или что-то ещё, где это могло встретится. В общем в этом плане спасибо, что указали на слабое место, буду рад узнать от вас (желательно на примере) как от этого уйти.
Но вопрос то был в другом. Мне надо сформировать таблицу для пользователя с ответом по его поиску с записями из БД. Вот это я не могу сделать, ошибки какие выдает я сказал. Как я понимаю тут надо как то эти переменные перевести в string. Вот тут я что-то копался весь день так и не удалось, решил узнать у гуру.

Насчет поиска по спутнику. Не всегда важен какой спутник снял. Может мне нужно именно территорию покрытия снимка. Тогда главный критерий станет именно макс и мин широта и долгота, а спутники должны выйти все, такой вариант вы учитывали?
Ответить с цитированием
  #8 (permalink)  
Старый 19.01.2016, 20:00
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Здесь почитать о безопасности, в частности баз данных, хотя это малая толика того, что в данном случае требуется. Закрытая сеть, хорошо, если гарантировано только "доверенные" пользователи, но и пауки не дремлют, беда может прийти откуда не ждешь по представлению, к примеру, почитать на досуге. Да и лучше сразу забыть о MySQL движке, переходите на расширение хотя бы mysqli или PDO.

Касаемо поиска по спутнику. Именно потому, что пользователь не ввел имя спутника, а только другие характеристики, нет смысла искать да еще посредством LIKE то, что бессмысленно. Что в конечном итоге будет % + '' + %? Это ведь любое совпадение, и зачем же ковыряться во всех записях, если требуются только иные параметры?

Постройте запрос иначе - в условия попадают только те поля, значения которых выбрал пользователь, те есть:

if($post = array_diff(array_map('trim', $_POST), [''])) {
    //есть заполненные поля, ключи которых и будут ссылаться на поля таблицы в условии
}


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

Если таблицу по результату выборки строит скрипт клиента, значит по идее запрос на поиск, это асинхронный запрос. В таком случае отдавайте результат выборки как JSON, по которым построить таблицу просто, и используйте для этого jQuery, иначе к чему она у вас подключается. Это просто на нем будет сделать, я думал вы поясните другое - для чего в вашем коде куча disabled=true/false, что за зависимости, что нужно?

Последний раз редактировалось laimas, 19.01.2016 в 20:10.
Ответить с цитированием
  #9 (permalink)  
Старый 19.01.2016, 21:01
Аватар для AciDWarrioR
Кандидат Javascript-наук
Отправить личное сообщение для AciDWarrioR Посмотреть профиль Найти все сообщения от AciDWarrioR
 
Регистрация: 11.11.2015
Сообщений: 136

В данный момент, одному спутнику соответствует один прибор и чтобы пользователь заранее не ввел противоречущие друг друг позиции реализовано запреты. При выборе такого то спутника сразу же блокируются не его приборы. В общем так. Насчет ваших статей посмотрю завтра на работе. А база данных у меня не mysql, а PostgreSQL с расширением PostGIS, так как работаю я как вы понимаете с картографическими данными.
Насчет вашего запроса, согласен можно было бы сделать проще, но вот функции array_diff(array_map()) я не понимаю, надо почитать, что они делают. Я подозреваю это что то типо массива отправленных пользователем переменных. Не знал, что такой существует, а городить большие проверки if, что отправил пользователь я не стал, мне казалось проще сделать такой запрос. Вот))
Насчет безопасности, в принципе пока инфа не столько уж закрытая. Все эти снимки спутников доступны бесплатны, так что боятся какой то утечки мне пока не надо, но в дальнейшем естественно этот вопрос проигнорировать не получится.
Какой-нибудь пример насчет JSON будет очень кстати. Ч/з Ajax, что я делал, был одностраничный сайт с картами пожаров, то там все было понятно. Но здесь я все же решил перейти к другой страницы потому что нужно ещё реализовать просмотров QuickLookов для пользователей. То есть, ему нравятся какая-то запись, он ткнул, открылась карта с наложенным на неё слоем jpg картинки снимка. Ваш метод с JSON заставит меня перелопатить, я так понимаю, весь код. Это конечно можно, но хотелось бы допилить мой вариант)))
Ответить с цитированием
  #10 (permalink)  
Старый 20.01.2016, 01:29
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от AciDWarrioR
Насчет безопасности, в принципе пока инфа не столько уж закрытая. Все эти снимки спутников доступны бесплатны, так что боятся какой то утечки мне пока не надо
Об этой безопасности пусть голова болит у ФБР и ФСБ.

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

Сообщение от AciDWarrioR
Ч/з Ajax, что я делал, был одностраничный сайт с картами пожаров, то там все было понятно. Но здесь я все же решил перейти к другой страницы потому что нужно ещё реализовать просмотров QuickLookов для пользователей.
А это к чему тогда?

<script>
            var tab = document.getElementsByClassName("table1");
            var newRow = document.createElement("tr");
            newRow.classList.add("row");
....


К тому же у вас не JS занимается построением таблицы, а фактически РНР, формируя в цикле клиентский код добавляющий в таблицу одну строку. И так методично по всем строкам результата запроса. Такого безобразия быть не должно.

Коли на клиента возложен вывод таблицы, так отдавайте ему ее данные все, из которых крохотный JS сценарий ее построит. А если это не подходит, значит while($row=pg_fetch_assoc($result)) и вывод строк html кода....

И если JS, то все таки json, о отдавать клиенту выгоднее в вашем случае не ассоциативный массив, а индексный, то есть только значения полей, главное соблюсти в запросе к базе условие - запрос должен возвращать поля в той последовательности, в которой они идут в html-таблице (ее колонки). На PDO возврат клиенту данных, это будет всего одна строка кода:

echo json_encode($sth->execute()->fetchAll(PDO::FETCH_NUM)); //вывести все строки запроса в json формате

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

<!DOCTYPE HTML> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<style>

</style> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script> 
$(function() {
//к примеру это пусть ответ сервера с данными запроса после декодирования json
var obj = [[1,2,3,4],[5,6,7,8],[9,10,11,12]];
//это обновление таблицы новыми этими данными
var tb = $('#list tbody:last').empty(), a;
for(;a = obj.pop();) tb.prepend('<tr><td>'+a.join('</td><td>')+'</td></tr>');
});
</script>     
</head> 
<body>
<table id="list">
    <tbody>
        <tr><td>head</td><td>head</td><td>head</td><td>head</td></tr>
    </tbody>
    <tbody></tbody>
</table>
</body> 
</html>

Сообщение от AciDWarrioR
а городить большие проверки if, что отправил пользователь я не стал
У вас как раз их больше чем нужно. $post = array_diff(array_map('trim', $_POST), ['']) - удаляет крайние пробелы во всех значениях полученных данных и удаляет после этой операции из массива элементы с пустыми значениями. А условие проверяет пуст ли массив $post после данных операций. Вот здесь нужно либо отказывать в поиске, либо выводить что-то по умолчанию, тем более что есть условия, типа:
if($_POST[dateAt]=='') $_POST[dateAt]='1950-01-01'; //фигурные скобки здесь лишние
В данном случае также можно обойтись без методичных if()..., лучше воспользоваться пересечением массивов, первый из которых это значения по умолчанию, а второй массив $post, пример:
$def = ['dateAt'=>'1950-01-01', 'dateTo'=>'2100-12-31', 'timeAt'=>'00:00', 'timeTo'=>'23:59']; //значения по умолчанию
$post = ['dateAt'=>'1980-03-01', 'dateTo'=>'2100-12-31']; //пришедшие значения
$post = array_replace($def, $post); //отсутствующие поля в запросе клиента будут заменены значениями по умолчанию, этот массив и нужно использовать в запросе


Правда у вас даты какие-то запредельные, а ведь данные желательно проверять на сервере, например для чисел это не проблема, правда и для дат можно использовать фильтр FILTER_VALIDATE_REGEXP. Но корректность даты можно проверить и проще - strtotime вернет метку времени из строкового значения даты, если дата будет введена корректно, даже в случае ввода ее в русскоязычной локали дд.мм.гггг. Правда при этом дата должна быть в диапазоне от начала эпохи Unix до макс. возможной для разрядности РНР (32/64 бит). И может подумать с календарем для полей даты, чтобы не мудрить отдельно с временем и датой затем соединяя их на сервере?

И не именовать поля формы также как соответствующие им поля в базе. Не стоит светить структуру базы, и совсем не стоит вываливать клиенту ее ошибки pg_last_error(). Пользователю они ничего полезного не несут, он не поймет это, да это ему и не нужно, а тем кто намеренно вас будет атаковать, это богатая пища для размышлений. Именуйте поля формы как name, а в базе это же имя используйте с префиксом, и не по принципу 1234, это надежный пароль. Уже не помню какая именно, но одна из известных CMS была взломана как раз в частности потому, что к префиксам отнеслись как "абы было что-то".

Сообщение от AciDWarrioR
В данный момент, одному спутнику соответствует один прибор и чтобы пользователь заранее не ввел противоречущие друг друг позиции реализовано запреты.
Может тогда лучше использовать связанные списки? К тому же как определить disabled/enabled, если пользователь может ввести любой спутник?

С расширением PostGIS работать не приходилось, поэтому по данному вопросу ничего сказать не могу, но вот для "просмотров QuickLookов для пользователей. То есть, ему нравятся какая-то запись, он ткнул, открылась карта с наложенным на неё слоем jpg картинки снимка" Ajax не может быть проблемой, я так думаю.

Последний раз редактировалось laimas, 20.01.2016 в 12:03.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите плагин для подсветки синтаксиса html css php js кода Кирюха =) Библиотеки/Тулкиты/Фреймворки 2 31.10.2015 06:12
Передача значений нескольких параметров из js в php TomTykver AJAX и COMET 2 13.05.2015 22:19
Передача данных с js в php juramaj AJAX и COMET 2 11.03.2015 12:42
Как передавать параметры из php скрипта в js imissyouso Общие вопросы Javascript 3 01.08.2012 18:24
Вызов PHP обработчика из JS Arfey Общие вопросы Javascript 15 07.06.2010 20:28