Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #51 (permalink)  
Старый 28.05.2016, 18:02
Аспирант
Отправить личное сообщение для NeilDaniels Посмотреть профиль Найти все сообщения от NeilDaniels
 
Регистрация: 18.05.2016
Сообщений: 35

Спасибо, разобрался. Работает.

Привожу куски кода.

<script>
$(function() {
	$(".rowlink").bind( 'dblclick', function() {
		var id = $(this).find('.id').html();
				$.post('transmission.php', {'id' : id}, function(data){$('#receiv #numpp').val(data[0]); $('#receiv #testdata').val(data[1]); $('#receiv #testdata1').val(data[2])  }, 'json');
     });
});
</script>


Часть таблицы
(На форматирование таблицы внимание не обращайте, пока тестовый вариант).

<table>
<tbody>
<tr>
<th class="lable">ID:</th>
<td class="input"><input id="numpp" name="numpp" size="40" maxlength="40" class="input" type="text" value=''></td>
</tr>
<tr>
<th class="lable">*Имя:</th>
<td class="input"><input id="testdata" name="name" size="40" maxlength="40" class="input" type="text" value=''></td>
</tr>
<tr>
<th class="lable">*E-mail:</th>
<td class="input"><input id="testdata1" name="email" size="40" maxlength="40" class="input" type="text" value=''></td>
</tr>


Transmission.php

<?php
if (isset($_POST['id']) && (int)$_POST['id']) {$id = $_POST['id'];}

$lnc = mysql_connect("localhost","root","");
$connect = mysql_select_db('testdb', $lnc);
$qu_ry="select `vall1`, `vall2` from `tstable` where numpp=$id"; //по полученному id делаем выборку из БД
$qr_result = mysql_query($qu_ry);
$data1 = mysql_fetch_array($qr_result);
$lod = $data1['vall1'];  //формируем и "возвращаем" массив
$lod1 = $data1['vall2'];
$valll=array($id, $lod, $lod1);
$vall_mass=json_encode($valll);
die  ($vall_mass);

?>

Последний раз редактировалось NeilDaniels, 28.05.2016 в 18:04.
Ответить с цитированием
  #52 (permalink)  
Старый 28.05.2016, 20:34
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Так нельзя обращаться к базе, так нельзя отдавать данные клиенту, и т.д..
Ответить с цитированием
  #53 (permalink)  
Старый 29.05.2016, 09:04
Аспирант
Отправить личное сообщение для NeilDaniels Посмотреть профиль Найти все сообщения от NeilDaniels
 
Регистрация: 18.05.2016
Сообщений: 35

Сообщение от laimas Посмотреть сообщение
Так нельзя обращаться к базе, так нельзя отдавать данные клиенту, и т.д..
1. Высокая вероятность SQL инъекции?
2. Что снова не так?
3. Что ещё не в порядке?

Делал так, как Вы учили. И снова не то? Да и на... тогда оно надо.

Последний раз редактировалось NeilDaniels, 29.05.2016 в 09:06.
Ответить с цитированием
  #54 (permalink)  
Старый 29.05.2016, 10:57
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от NeilDaniels
Делал так, как Вы учили.
Этому я вас не учил.

Данные подставляемые в качестве параметра запроса обязательно нужно обрабатывать, иначе это не "вероятность", а 100% возможность инъекции.
Строковые значения данных принятых извне при выводе клиенту обязательно надо пропускать через htmlspecialchars.
Столько копий ломалось, столько раз спрашивалось о данных отдаваемых клиенту, а там данных то кот наплакал, и в данном случае хватило бы html.
$data1['vall1'] - такая же переменная как и $lod, то есть создавать промежуточную переменную $lod ради того чтобы поместить ее в массив, это расточительство. Да и не надо создавать массив промежуточный - mysql_fetch_array и возвращает массив данных одной строки запроса. Только использовать mysql_fetch_array без второго параметра, это плохо.
vall1, vall2, ..., vall_восьмерка_на_боку, это самому же запутаться.
Ответить с цитированием
  #55 (permalink)  
Старый 29.05.2016, 13:10
Аспирант
Отправить личное сообщение для NeilDaniels Посмотреть профиль Найти все сообщения от NeilDaniels
 
Регистрация: 18.05.2016
Сообщений: 35

1. То есть

<?php
if (isset($_POST['id']) && (int)$_POST['id']) {$id = $_POST['id'];}

$lnc = mysql_connect("localhost","root","");
$connect = mysql_select_db('testdb', $lnc);
$qu_ry="select `vall1`, `vall2` from `tstable` where numpp=$id"; //по полученному id делаем выборку из БД
$qr_result = mysql_query($qu_ry);
$data1 = mysql_fetch_array($qr_result);
$lod = $data1['vall1'];  //формируем и "возвращаем" массив
$lod1 = $data1['vall2'];
$valll=array($id, $lod, $lod1);
$vall_mass=json_encode($valll);
die  ($vall_mass);

?>


можно сократить до

<?php
if (isset($_POST['id']) && (int)$_POST['id']) {$id = $_POST['id'];}

$lnc = mysql_connect("localhost","root","");
$connect = mysql_select_db('testdb', $lnc);
$qu_ry="select `vall1`, `vall2` from `tstable` where numpp=$id"; //по полученному id делаем выборку из БД
$qr_result = mysql_query($qu_ry);
$vall_mass=json_encode(mysql_fetch_array($qr_result));
die  ($vall_mass);

?>


2. htmlspecialchars
Употребляется в таком виде?

$vall_mass=json_encode(htmlspecialchars (mysql_fetch_array($qr_result)));


3. Второй параметр mysql_fetch_array
Использовать MYSQL_BOTH или MYSQL_NUM?

Последний раз редактировалось NeilDaniels, 29.05.2016 в 13:17.
Ответить с цитированием
  #56 (permalink)  
Старый 29.05.2016, 15:40
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Читать надо руководство, где сказано, что htmlspecialchars работает со строками, а mysql_fetch_array возвращает массив. А это означает, что кроме ошибки ничего не будет.

Собрались писать что-то, изучайте, по другому не получится.

if (isset($_POST['id']) && (int)$_POST['id']) {$id = $_POST['id'];} - а подумать?
Ответить с цитированием
  #57 (permalink)  
Старый 29.05.2016, 15:45
Аспирант
Отправить личное сообщение для NeilDaniels Посмотреть профиль Найти все сообщения от NeilDaniels
 
Регистрация: 18.05.2016
Сообщений: 35

Сообщение от laimas Посмотреть сообщение

if (isset($_POST['id']) && (int)$_POST['id']) {$id = $_POST['id'];} - а подумать?
Что снова не так? Вы же сами про проверку писали, приводили левую часть, и говорите, что неправильно. Да ну, бросаю это всё.
Ответить с цитированием
  #58 (permalink)  
Старый 29.05.2016, 17:17
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от NeilDaniels
Вы же сами про проверку писали
Но я разве такое писал?

Ну думайте, что вы делаете:

isset($_POST['id']) - проверяется установлена ли переменная, все нормально
далее должно быть, чтобы переменная приведенная к INTEGER не была равна 0. Проверили, успокоились, а переменной $id присвоили в конечном итоге значение $_POST['id']. И где же тут "безопасно"?

$s = '12 abc';
echo (int)$s; //равно 12, а за 12 идет подстава, то есть проверка даст Ок, а в запрос будет подставлено 12 abc

Я вам такого не показывал. Читайте руководство, будете изучать, все будет нормально.
Ответить с цитированием
  #59 (permalink)  
Старый 29.05.2016, 17:46
Аспирант
Отправить личное сообщение для NeilDaniels Посмотреть профиль Найти все сообщения от NeilDaniels
 
Регистрация: 18.05.2016
Сообщений: 35

laimas,
Цитата:
if (isset($_POST['id']) && (int)$_POST['id'])
Вы мне этого не показывали? Вас уткнуть в Ваше же сообщение. Про то, что (int)$_POST['id']) показывает, что переменная не равна 0. Да и показывает ли она, что переменная не равна 0?
Да и что проверять, если ID - однозначно число? По смыслу приложения - это индекс, autoincrement, заполняется из таблицы БД в поле "Номер п/п", и букв и прочих символов там быть не может. Так что проверка тут не нужна. Упоминал это несколько раз. Или Вы просто это не замечаете?
Или Вам просто потроллить хочется?
Ответить с цитированием
  #60 (permalink)  
Старый 29.05.2016, 17:56
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Однако, еще и тыкать собираетесь Это сюда что-ли?

if(isset($_POST['name']) && (int)$_POST['name']) {
    //выполняем код
}


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

Так что ... Читайте руководство. Во-первых это не РНР форум, это раз, во-вторых рассказывать обо всем, на это просто нет времени.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как получить переменную в дочерней функции Yurik Общие вопросы Javascript 2 16.03.2012 15:44
Как получить переменную с сервера? DmitryT AJAX и COMET 2 03.08.2011 18:16
Ссылка test.php?ID=33 Как получить в переменную значение 33 из URL? Anatuz Общие вопросы Javascript 1 27.07.2010 13:32
Как получить высоту DIV, установленную автоматически YOricH Internet Explorer 4 22.07.2009 17:15
Как получить содержимое <script></script> из полученного ответа vvsh Events/DOM/Window 2 09.07.2009 20:32