Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Обработка ответа $.post запроса - как в блоке div получить переменную массива (https://javascript.ru/forum/jquery/63110-obrabotka-otveta-%24-post-zaprosa-kak-v-bloke-div-poluchit-peremennuyu-massiva.html)

NeilDaniels 21.05.2016 18:39

Alex_63,
2. Да потому что принятый массив за пределами функции, принявшей массив, не виден, не так ли?
3. Мне данные в div нужны в виде отдельных значений, а не одного массива. Потому принятый массив надо разобрать на отдельные значения.
4. Пример массива? В каком виде? Строка таблицы БД - NumPP (он же id), HAWB, Sender, Receiver, NumbPlace, Mass, VolumeMass, Note, Cost, HScode, Status.
PHP-скрипту посылается id, по id делается выборка из БД, формируется массив из id и перечисленных данных, массив возвращается.
Или что опять не так?

Alex_63 21.05.2016 19:06

NeilDaniels,
2. Ну как же ? Вы тестировали ? Я же расписал в комментах в скрипте
3. Я Вам дал пример разбора - запись построчно в div
4. Дайте пример готового массива! В том виде, в котором приходит аяксом!
Подсказка: сделать JSON.stringify(arr), вывести в консоль и скопировать оттель

NeilDaniels 21.05.2016 19:08

Alex_63,
ничего я ещё не тестировал.

NeilDaniels 21.05.2016 19:09

Модераторы, удалите тему.

Alex_63 21.05.2016 19:16

Цитата:

Сообщение от NeilDaniels (Сообщение 417241)
Alex_63,
ничего я ещё не тестировал.

А зачем тогда пишете, что массив не виден за пределами функции ?

NeilDaniels 21.05.2016 19:19

Alex_63,
а это-то причём? Из JS-функции идёт AJAX запрос, в JS-функцию ответ возвращается. Так? И полученные данные только в JS-функции и доступны. Или не так?

Alex_63 21.05.2016 19:28

Цитата:

Сообщение от NeilDaniels (Сообщение 417244)
Alex_63,
а это-то причём? Из JS-функции идёт AJAX запрос, в JS-функцию ответ возвращается. Так? И полученные данные только в JS-функции и доступны. Или не так?

Ну а где они должны быть доступны ???
Ничо не понятно из Ваших вопросов...

Я Вам написал код, который Вы даже не соизволили попробовать, а между тем говорите, что в нем что-то не так!

NeilDaniels 21.05.2016 20:27

Alex_63,
Скрипт формирует ajax запрос, после получает данные. И эти данные должны быть получены в блоке div (а какие операции с этими данными в этом блоке - это вне данной темы), в виде массива или в виде отдельных переменных. Это написано не раз. Что ещё надо втолковать?
Вот приняли в этом же скрипте набор data в json формате. Можно ли так распарсить data?
var massiv = JSON.parse(data);


$val1 = data.val1;
$val2 = data.val2;


Только как эти переменные $val1, $val2 (и.д.) передать в блок div, чтобы с переменными в этом блоке работать (неважно, что с ними делается)?

Или задача некорректная?

Alex_63 22.05.2016 10:23

NeilDaniels,
Еще раз:
Переменные у Вас в скрипте! А в div'e - HTML
2. Нафег парсить JSON.parse(data), когда она к Вам приходит в уже распарсенном варианте ( в аякс запросе стоит формат "json") ?
3. У Вас массив, а не объект,
Поэтому, если нун, то вторая часть Вашего "распарса" будет выглядеть так:
var $val1 = data[1],
    $val2 = data[2],
    //и так далее


Мой код выведет полученные Данные в Global, а значит Вы сможете обратиться к ним из любого скрипта

Ваша задача - непонятна (Я могу вывести значения элементов массива в div в виде текста, но зачем это надо ?)
Переменные - в скрипте! а не в html

NeilDaniels 22.05.2016 10:30

Alex_63,
понял, буду пробовать.
Благодарю за терпение.

NeilDaniels 28.05.2016 18:02

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

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

<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);

?>

laimas 28.05.2016 20:34

Так нельзя обращаться к базе, так нельзя отдавать данные клиенту, и т.д..

NeilDaniels 29.05.2016 09:04

Цитата:

Сообщение от laimas (Сообщение 417892)
Так нельзя обращаться к базе, так нельзя отдавать данные клиенту, и т.д..

1. Высокая вероятность SQL инъекции?
2. Что снова не так?
3. Что ещё не в порядке?

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

laimas 29.05.2016 10:57

Цитата:

Сообщение от NeilDaniels
Делал так, как Вы учили.

Этому я вас не учил.

Данные подставляемые в качестве параметра запроса обязательно нужно обрабатывать, иначе это не "вероятность", а 100% возможность инъекции.
Строковые значения данных принятых извне при выводе клиенту обязательно надо пропускать через htmlspecialchars.
Столько копий ломалось, столько раз спрашивалось о данных отдаваемых клиенту, а там данных то кот наплакал, и в данном случае хватило бы html.
$data1['vall1'] - такая же переменная как и $lod, то есть создавать промежуточную переменную $lod ради того чтобы поместить ее в массив, это расточительство. Да и не надо создавать массив промежуточный - mysql_fetch_array и возвращает массив данных одной строки запроса. Только использовать mysql_fetch_array без второго параметра, это плохо.
vall1, vall2, ..., vall_восьмерка_на_боку, это самому же запутаться.

NeilDaniels 29.05.2016 13:10

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?

laimas 29.05.2016 15:40

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

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

if (isset($_POST['id']) && (int)$_POST['id']) {$id = $_POST['id'];} - а подумать?

NeilDaniels 29.05.2016 15:45

Цитата:

Сообщение от laimas (Сообщение 417932)

if (isset($_POST['id']) && (int)$_POST['id']) {$id = $_POST['id'];} - а подумать?

Что снова не так? Вы же сами про проверку писали, приводили левую часть, и говорите, что неправильно. Да ну, бросаю это всё.

laimas 29.05.2016 17:17

Цитата:

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

Но я разве такое писал?

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

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

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

Я вам такого не показывал. Читайте руководство, будете изучать, все будет нормально.

NeilDaniels 29.05.2016 17:46

laimas,
Цитата:

if (isset($_POST['id']) && (int)$_POST['id'])
Вы мне этого не показывали? Вас уткнуть в Ваше же сообщение. Про то, что (int)$_POST['id']) показывает, что переменная не равна 0. Да и показывает ли она, что переменная не равна 0?
Да и что проверять, если ID - однозначно число? По смыслу приложения - это индекс, autoincrement, заполняется из таблицы БД в поле "Номер п/п", и букв и прочих символов там быть не может. Так что проверка тут не нужна. Упоминал это несколько раз. Или Вы просто это не замечаете?
Или Вам просто потроллить хочется?

laimas 29.05.2016 17:56

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

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


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

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

NeilDaniels 29.05.2016 18:04

laimas,
удачно Вам и дальше троллить.

laimas 30.05.2016 12:59

И на чем основана эта уверенность?

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

Если же совет "изучать" у вас ассоциируется с "послали", то плохо.

NeilDaniels 30.05.2016 20:53

laimas,
Ну можно проверку и htmlspecialchars сделать перед добавлением данных в таблицу БД в соответствующем скрипте. Ту же проверку и htmlspecialchars дополнительно и через промежуточные переменные, по которым Вы меня отругали.
Так?

laimas 31.05.2016 13:28

Зачем данные помещаемые в базу подвергать htmlspecialchars? А htmlspecialchars - это не проверка, а преобразование таких символов как < > & , а также кавычек если указать в их html-мнемоники. И делается это с данными при выдаче их клиенту, чтобы избежать XSS атак. Проверить наличие же данных символов этой функцией нельзя.

Вы же используете функции языка, ну так читать же о них надо. На сайте разработчиков РНР есть справка CHM формата, есть и на русском, с примерами, скачивайте и вникайте.


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