Несколько форм в одной таблице

katt

Новичок
Здравствуйте. Помогите пожалуйста начинающему php-программисту....
Есть файл php в котором выводится таблица (заполняется циклом while) со списком дисциплин (ссылки) и некоторыми данными по этим дисциплинам.


Под этой таблицей будет еще одна (данные в которой должны меняться без перезагрузки страницы), в ней данные по конкретной дисциплине (на которую кликнет пользователь из таблице выше).

Я начала это делать с помощью ajax. Т.е. к каждой дисциплине приставила форму (с type=hidden т.к. нужно передать некие параметры методом post), а название дисциплины это ссылка на скрипт.

Код:
  echo "<td><form action='b_c.php' method='post'>
                                  <input type='hidden' value='".$tab_reyt['ST']."' id='area_1' name='area_1' >
                                  <input type='hidden' value='".$tab_reyt['DT']."' id='area_2' name='area_2'>
                                  <a href='javascript:run_script();'>'".$tab_reyt['DIS_NAME']."'</a></form></td>";
Обработка ajax в скрипте
Код:
function run_script() {
  var $result = $("#status");
  $.ajax({
    type: "POST", // - методом POST.
    data: { // - получаем значения полей, данные.
      "area_1": $('#area_1').val(),
      "area_2": $('#area_2').val()
    },
    dataType: "html", // - тип HTML.
    url: "b_c.php", // - скрипт PHP.
    beforeSend: function() {
      // Перед отправкой выведем уведомление:
      $result.html('<img src="../images/1.gif">');
    },
    success: function(data) {
      $result.html(data); // - выполнено.
    },
  });
}
И передается в файл b_c.php
Код:
<?php
//header("Content-type: text/plain; charset=utf-8");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
sleep(1);
# Параметры, передаваемые методом POST:
$area_1 = $_POST['area_1'];
$area_2 = $_POST['area_2'];
print "

  <p>Выполнено успешно! Вы только, что отправили нам:</p>
  <ul>
    <li>$area_1</li>
    <li>$area_2</li>
  </ul>
";
?>
Данные второй таблице будут в <div>
Код:
echo "<div id='result'></div>";
Вопрос:
При нажатии на любую дисциплину происходит обработка первой формы в таблице, а не той в которой нужная дисциплина. Т.е. не зависимо от того на какую дисциплину я нажму в <div id='result'> выводится один и тот же результат. Можно ли сделать одну форму на всю таблицу (т.е. будет два общих hidden), а номер дисциплины передать параметром <a href='javascript:run_script(номер дисциплины);'>.
Или может есть какие-нибудь другие выходы.....
Заранее спасибо за помощь....
 
Последнее редактирование:

katt

Новичок
Параметр node (номер дисциплины передала в java скрипт)
Код:
function run_script(node) {
  alert(node);
  var $result = $("#status");
  $.ajax({
    type: "POST", // - методом POST.
    data: { // - получаем значения полей, данные.
      "area_1": $('#area_1').val(),
      "area_2": $('#area_2').val(),    
    },
    dataType: "html", // - тип HTML.
    url: "b_comp.php", // - скрипт PHP.
    beforeSend: function() {
      // Перед отправкой выведем уведомление:
      $result.html('<img src="../images/1.gif">');
    },
    success: function(data) {
      $result.html(data); // - выполнено.
    },
  });
}
.....теперь как его передать b_comp.php????
 

riff

Новичок
Код:
<table id="xxx">
<tr>
    <td>Текст
    <td>Текст
    <td><a href="#" data-id="1" data-area1="..." data-area2="...">click</a>
<tr>
    <td>Текст
    <td>Текст
    <td><a href="#" data-id="2" data-area1="..." data-area2="...">click</a>
....
</table>

//data-id - номер дисциплины

<script>
$('#xxx a[data-id]').click(function(e) {
    var a = $(this);
    $.ajax({
        ...
        data: {
            area_1: a.data('area1'),
            area_2: a.data('area2'),
            номер_дисциплины: a.data('id'),
        }
    });
    e.preventDefault();
});
</script>
 

katt

Новичок
riff, переписала так как вы сказали...но не работает:(....Что-то видно не правильно делаю....И еще как мне теперь data-* передавать в php файл на обработку???Вот исправления:
В таблице основного php:
Код:
 echo "<a href='javascript:run_script();' data-id='".$tab_reyt['DN']."' data-area1='1' data-area2='2'>дисциплина</a>";
В скрипте:
Код:
function run_script() {
alert();
$('#xxx a[data-id]').click(function(e) {
    var a = $(this);
   
    var $result = $("#status");
    $.ajax({
        type: "POST", // - методом POST.
        data: {
            area1: a.data('area1'),
            area2: a.data('area2'),
            dis: a.data('id'),
        },
        dataType: "html", // - тип HTML.
        url: "b_comp.php", // - скрипт PHP.
        beforeSend: function() {
          // Перед отправкой выведем уведомление:
          $result.html('<img src="../images/1.gif">');
        },
        success: function(data) {
          $result.html(data); // - выполнено.
        },
    });
    e.preventDefault();
});
}
В доп. обработчике php (b_comp.php):
Код:
<?php
//header("Content-type: text/plain; charset=utf-8");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
sleep(1);
# Параметры, передаваемые методом POST:
$area1 = $_POST['area1'];
$area2 = $_POST['area2'];
$dis = $_POST['dis'];
print "

  <p>Выполнено успешно! Вы только, что отправили нам:</p>
  <ul>
    <li>$area1</li>
    <li>$area2</li>
    <li>$dis</li>
  </ul>
";
?>
 

riff

Новичок
переписала так как вы сказали...но не работает
Нет, я так не говорил
html: <a href='javascript:run_script();'
В скрипте: function run_script() {
Зачем отсебятину навешала?

Возьми мой пример КАК ЕСТЬ.
В html вместо "..." напиши циферки для наглядности,
а в <script> добавь
Код:
  type: "POST",
  url: '/php.php', //естественно свой напиши
  success: function(data) {
     $result.html(data); //естественно добавь свой var $result = $("#status");
  }
 
Последнее редактирование:

riff

Новичок
А и ещё, лучше сделать так:
Код:
<script>
$(function() {  // <--- добавь
    $('#xxx a[data-id]').click(function(e) {
        //здесь текст функции
    });
}); // <--- добавь
</script>
Так будет правильнее.
 

katt

Новичок
А в href="#" .....решетку так и оставлять????
Что то не работает все равно....:confused:
 

katt

Новичок
php основной:
Код:
echo "<a href='#' data-id='1' data-area1='3' data-area2='5'>click</a>";
Код:
<script>
$(function() {
    $('#xxx a[data-id]').click(function(e) {
    var a = $(this);
    var $result = $("#status");
    $.ajax({
       type: "POST",       
       data: {
            area1: a.data('area1'),
            area2: a.data('area2'),
            id: a.data('id'),
        },       
        url: 'brs_comp.php', //естественно свой напиши   
        uccess: function(data) {
      $result.html(data);
  }
    });
    e.preventDefault();
 });
});
</script>
p_comp:
Код:
<?php
//header("Content-type: text/plain; charset=utf-8");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
sleep(1);
# Параметры, передаваемые методом POST:
$area1 = $_POST['area1'];
$area2 = $_POST['area2'];
$id = $_POST['id'];
print "

  <p>Выполнено успешно! Вы только, что отправили нам:</p>
  <ul>
    <li>$area1</li>
    <li>$area2</li>
    <li>$id</li>
  </ul>
";
?>
 
Последнее редактирование:

riff

Новичок
Следи внимательно:
Код:
    $.ajax({
      type: "POST",
      url: 'b_comp.php',
      success: function(data) {
      $result.html(data); //1-я ошибка. Не объявлена переменная $result (раньше ты её объявляла)
  }  //<--- 2-я ошибка. Нет запятой после }.
        data: {
            area1: a.data('area1'),
            area2: a.data('area2'),
            id: a.data('id'), //3-я ошибка. Лишняя запятая
        }
    });
------ Добавлено позже -----
Пока я ответ писал, она уже успела код в своём исправить. Так не честно.
 
Последнее редактирование:

katt

Новичок
Код:
$(function() { 
    $('#xxx a[data-id]').click(function(e) {   
    var a = $(this);
    var $result = $("#status");
    alert();
    $.ajax({
      type: "POST",       
      data: {
            area1: a.data('area1'),
            area2: a.data('area2'),
            id: a.data('id')
        },       
        url: 'b_comp.php', //естественно свой напиши   
        uccess: function(data) {
      $result.html(data);
  }
    });
    e.preventDefault();
});
});
 

riff

Новичок
Дай угадаю... эммм... ммм... эээ... не работает?
Я даже ошибку вижу.
 

katt

Новичок
Пока я ответ писал, она уже успела код в своём исправить. Так не честно.
я у себя просто параллельно проверяю....исправляю.....догадывалась что за это наругаетесь...
Но оно один фиг не работает....вроде и алерты прогнала по всему скрипту...все вроде как до конца выполняется
 

riff

Новичок
Посмотри на свой код в последнем сообщении. Сама найдёшь или носом подсказать?
 
Сверху