Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   получение id строки и передача значения переменной php (https://javascript.ru/forum/jquery/42433-poluchenie-id-stroki-i-peredacha-znacheniya-peremennojj-php.html)

msscriin 26.10.2013 09:35

получение id строки и передача значения переменной php
 
таблица полученная из БД таким образом:

$query1 = 'select * from client';
$res=mysql_query($query1);
$fields = mysql_num_fields($res);
$i=0;
echo "<table id='tab1' border=2 width=100% height='80px'>";

echo "<thead><tr>";
 while ($i<$fields) {
	$name = mysql_field_name($res, $i);
	$len = mysql_field_len($res, $i);
	echo "<td> ".$name."</td>";
	$i++;
	}
 echo "</thead></tr>";
 echo "<tbody>";
 while ($row=mysql_fetch_array($res)){
    echo ('<tr id='.$row['uid'].'><td>'.$row['uid'].'</td><td>'.$row['Surname'].'</td><td>'.$row['Name'].'</td>
 	<td>'.$row['Otchestvo'].'</td><td>'.$row['tlf'].'</td><td>'.$row['street'].'</td><td>'.$row['home'].'</td>
 	<td>'.$row['kv'].'</td></tr>');
  }

 	echo "</tbody></table>";


из этой таблицы нужно получить id строки на которую кликнули мышкой, пробовал реализовать при помощи jquery вот так:

$(function () {

     $("table#tab1 tbody tr").click(function(){
    var title = $(this).attr("id");
    alert(title);
    $.post( 'index.php', {'dat':title}, function(ok){
     alert(ok);
       myWin= open("opn.php", "displayWindow",
    "width=400,height=300,status=no,toolbar=no,menubar=no");
     });

    });
});


при клике на строку появляется сообщение с нужным мне id и в приципе все прекрасно но проблема вот в чем:
alert(title);
в title определяется значение id строки на которую кликнули, судя по всплывающему окошку все работает, но передать значение переменной title в переменную $dat методом POST не получается, php пишет что переменная пуста, если конкретнее думаю что загвоздка вот здесь:

$.post( 'index.php', {'dat':title}, function(ok){
     alert(ok);


либо я совсем делаю не то, либо что то недоделываю, как это исправить? или как можно реализовать задачу получения данных ячейки на которую кликнули и потом передать эти данные в переменную php? :help:

danik.js 26.10.2013 10:37

Цитата:

Сообщение от msscriin
title в переменную $dat методом POST не получается

А с какой стати? Если только register_globals >> on ?
Получай так:
$dat = isset($_POST['dat']) ? $_POST['dat'] : 'почему-то не передали dat';

msscriin 26.10.2013 10:52

Цитата:

Сообщение от danik.js (Сообщение 278173)
А с какой стати? Если только register_globals >> on ?
Получай так:
$dat = isset($_POST['dat']) ? $_POST['dat'] : 'почему-то не передали dat';

не работает, переменной по прежнему нет :( либо я туплю и делаю не то что надо :(

danik.js 26.10.2013 12:15

Цитата:

Сообщение от msscriin
не работает

Что именно не работает? Если хочешь вернуть значение обратно браузеру, так и пиши:
$dat = isset($_POST['dat']) ? $_POST['dat'] : 'почему-то не передали dat';
echo $dat;


Также открой вкладку сеть в отладчике браузера и наблюдай за запросом.

msscriin 26.10.2013 12:26

в общем задача такая переменная $dat это параметр запроса к базе данных по которому будет загружаться определенная строка соответствующая номеру строки в БД т.е

select * from client where uid='.$dat.'

номер строки который jquery показывает в сообщении при клике на строку в таблице в браузере, соответствует уникальному id клиента uid.

<tr id='.$row['uid'].'>

т.е нужно что бы этот номер который jquery определил при клике на строку, передавался в переменную php $dat и потом в запросе участвовал как параметр для загрузки данных из БД, вот...

msscriin 26.10.2013 13:45

а можно как-нибудь по другому реализовать эту задачу в целом, т.е при клике на строку получить ее id и эти данные передать в php переменную?

danik.js 26.10.2013 14:15

Самое простое и подходящее решение:
Повесить обработчик клика на все tr. По клику получать id и отправлять post-запросом. Если на сайте подключена либа jquery то это делается через click() и $.post() соответственно. Чем не устраивает это решение?

danik.js 26.10.2013 14:17

Цитата:

Сообщение от msscriin
а можно как-нибудь по другому реализовать эту задачу в целом

Можно например пересылать серверу координаты клика и размеры окна браузера, а на сервере моделировать страницу и по координатам находить id строки. Как тебе такой вариант?

Ну или если ищешь способ чуть по-проще, можешь например слать переменную через веб-сокет ну или придумать еще какой изврат. Ты поставил себе цель усложнить решение задачи, верно?

msscriin 26.10.2013 14:34

Цитата:

Сообщение от danik.js (Сообщение 278190)
Самое простое и подходящее решение:
Повесить обработчик клика на все tr. По клику получать id и отправлять post-запросом. Если на сайте подключена либа jquery то это делается через click() и $.post() соответственно. Чем не устраивает это решение?

на самом деле я рад любому решению только бы работало) усложнить решение задачи нееет, это явно не то что мне нужно на данный момент, в будущем я планирую заняться полным изучением и javascript и jquery и php
и тд на сколько сил хватит в общем, почему не сделать сперва ведь это было бы логично, просто сейчас поджимает время и нужно решить эту задачу любым способом, но понимания практически ноль, я думаю что знаю за что отвечает каждая строка кода но не уверен правильно ли я понимаю принцип работы во первых, во вторых не понимаю почему не получается, либо все что вы говорите я понимаю не правильно соответственно делаю что попало, по моему мнению должно быть что то типо такого:

"загрузилась страница -> пользователь кликнул на строку -> произошло событие jquery -> определилась строка на которое произошло событие -> id строки записывается в переменную -> данные переменной записываются в переменную на php -> данные переменной которые передавались из jquery сохранились в переменной php -> страница обнавилась переменная php имеет значение id строки на которую кликнул пользователь"

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

danik.js 26.10.2013 15:00

Цитата:

Сообщение от msscriin
данные переменной записываются в переменную на php

Не совсем так. Значение переменной передается на сервер через POST или GET запрос. А скрипт на сервере получает его и что-то с ним делает.
Цитата:

Сообщение от msscriin
страница обнавилась переменная php имеет значение id строки на которую кликнул пользователь

Страница обновилась? А зачем тогда делать асинхронный запрос? И что должно дать обновление страницы? Отображается другой контент? Тогда это не $.post, а отправка формы или просто редирект.

danik.js 26.10.2013 15:01

Цитата:

Сообщение от msscriin
jquery посылает эти данные а в php они не сохраняются

Куда они там должны сохраняться? php-скрипт живет только втечение обработки запроса. Потом он умирает и само собой никакие переменные сами по себе не сохранятся.

msscriin 26.10.2013 15:44

Цитата:

Сообщение от Poznakomlus (Сообщение 278201)
  1. загрузилась страница
  2. пользователь кликнул на строку
  3. произошло событие jquery
  4. определилась строка на которое произошло событие
  5. id строки записывается в переменную js
  6. данные переменной записываются в переменную на php методом выбранным вами с помощью js отсылаются на сервер
  7. сервер получает и обрабатывает, отсылает ответ
  8. js скрипт получает ответ и обрабатывает

ясно, но как реализовать этот алгоритм не подскажете?

danik.js 26.10.2013 15:57

Цитата:

Сообщение от Poznakomlus
Научитесь смотреть в консоль

Я бы сказал: научись читать буквы.

Цитата:

Сообщение от danik.js
Также открой вкладку сеть в отладчике браузера и наблюдай за запросом.


msscriin 26.10.2013 16:30

Вложений: 3
Цитата:

Сообщение от danik.js (Сообщение 278210)
Я бы сказал: научись читать буквы.

а консоль пустая

во вкладке текст запроса пишет: dat=1
я так понимаю это и есть то значение которое мне нужно, но почему тогда оно не загружается через $_POST['dat']?

danik.js 26.10.2013 16:47

Чет не похоже на асинхронный запрос. Это же просто страница по адресу blabla/script.php. Какое отношение к этому скриншоту имеет приведенный выше код?
Отладка в IE? Лучше убейте сразу.. Хотяб в сафари отлаживай.

msscriin 26.10.2013 17:03

Цитата:

Сообщение от danik.js (Сообщение 278215)
Чет не похоже на асинхронный запрос. Это же просто страница по адресу blabla/script.php. Какое отношение к этому скриншоту имеет приведенный выше код?
Отладка в IE? Лучше убейте сразу.. Хотяб в сафари отлаживай.

да это немного не то, но смысл тот же, сейчас попробовал на исходном файле в принципе то же самое, а куда именно вставить die?

msscriin 27.10.2013 11:47

попробовал на простом примере, без БД и прочего, две страницы script.php и 123.php, код страницы script.php:

$(function () {

     $('table#tab1 tbody tr').click(function(){
    var text = $(this).attr('id');
         $.post( './123.php', {text:text},  function(ok){
     alert(ok);
     });
    });
});

<table border='2' id='tab1'>
<thead>
<tr>
<th>id</th>
<th>name</th>
<th>surname<th>
</tr>
</thead>
<tbody>
<tr id='1'>
<td>1</td>
<td>Andrey</td>
<td>Cheprov</td>
</tr>
<tr id='2'>
<td>2</td>
<td>Vasya</td>
<td>Guschin</td>
</tr>
</tbody>
</table>
<a href='123.php'>123</a><br>


код страницы 123.php:

<?php
if(isset($_POST['text'])){
$k=$_POST['text'];

echo '<br>';

if($k==1){
print 'gusto';
}else {
print 'pusto';
}
}else{
echo 'no!';
}
?>

значение переменной text передаются методом $_POST и даже присваиваются переменной $k в сообщении которое выскакивает при клике все работает, если нажимаю на первую строку в которой значение id=1 то при выполнении цикла в сообщении ответ 'gusto' если на вторую строку в которой id=2 то выскакивает сообщение 'pusto' но если я по ссылке перехожу на эту страницу то результат выполнения цикла 'no!' т.е переменная пустая, вопрос, как сделать что бы переходя по сслыке переменная сохраняла то значение которое передает этот скрипт

$(function () {

     $('table#tab1 tbody tr').click(function(){
    var text = $(this).attr('id');
         $.post( './123.php', {text:text},  function(ok){
     alert(ok);
     });
    });
});


и оно было сохранено на странице 123.php до тех пор пока этот скрипт не выполнился еще раз, если он выполнился то данные переменной как на странице script.php так и на странице 123.php обновились и снова хранились на странице 123.php до повторного вызова скрипта:

$(function () {

     $('table#tab1 tbody tr').click(function(){
    var text = $(this).attr('id');
         $.post( './123.php', {text:text},  function(ok){
     alert(ok);
     });
    });
});


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

danik.js 27.10.2013 11:52

А теперь объясни: зачем ты делаешь асинхронный запрос, передавая id строки, если следующее твое действие - переход на другую страницу? Почему бы просто не передавать id прям при переходе? Переход - это GET-запрос, через который можно передать данные.

Вообще же, меня уже напрягает писать в пустоту, будто пишешь стенке, ни ответа не привета. Вот, например:
Цитата:

Сообщение от danik.js
Страница обновилась? А зачем тогда делать асинхронный запрос? И что должно дать обновление страницы? Отображается другой контент? Тогда это не $.post, а отправка формы или просто редирект.

Втопку короче этот топик..


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