как сохранить только идентификатор публикуемой строки - PullRequest
1 голос
/ 14 ноября 2011

У меня есть HTML-таблица, которую я заполняю с помощью PHP, теперь она заполнена и у нее есть кнопка с именем «update», в каждой строке есть поле с «client_id», также есть поля с текстовыми полями ,

Что я хочу сделать сейчас, так это то, что если пользователь нажимает «Обновить», он будет публиковать только те значения для этой строки ... Как я могу это сделать ?, когда он нажимает «Обновить», он собирается опубликовать все поля всех строк ?, я просто хочу строку, где была нажата кнопка обновления.

Код ниже

print("<table id='results'><tr><th>ID</th><th>Image</th><th>Name</th><th>Price</th><th>Price Label</th><th>Description</th><th>Update</th></tr>");

 while($row2 = mysql_fetch_array( $result2 )){ 
     $client_id = $row2["client_id"];
     $client_name = $row2["client_name"];
     $client_disc = $row2["client_disc"];
     $client_price = $row2["client_price"];
     $client_image = $row2["client_image"];
     $client_price_label = $row2["client_price_label"];

     print("<tr>");   
     print("<td>");
     print("<p style='font-size:14px; color:blue; padding:0;'>$client_id</p>");
     print("</td>");          
     print("<td>");
     print("<img class='custom_rate' alt='' src='$client_image' />");
     print("</td>");
     print("<td width='100px'>");
     print("<input type='text' value='$client_name' name='clientname'/>");
     print("</td>");
     print("<td>");
     print("<input type='text' value='$client_price' name='clientprice'/>");
     print("</td>");
     print("<td width='100px'>");
     print("<input type='text' value='$client_price_label' name='clientpricelabel'/>");
     print("</td>");
     print("<td width='100px'>");
     print("<textarea cols='15' rows='2' name='description'>$client_desc</textarea>");
     print("</td>");
     print("<td width='100px'>");
     print("<input type='submit' value='Update' name='update'/>");
     print("</td>");
     print("</tr>");
}

print("</table>");

Ответы [ 8 ]

1 голос
/ 14 ноября 2011

Вы можете сделать каждую строку формой. Тем не менее, это будет недействительным HTML. Впрочем, все равно будет работать.

Я бы создал некоторый javascript для извлечения всех значений входов в строке в один объект json, а затем отправил бы этот объект на сервер через ajax.

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

Надеюсь, это поможет ...

Обновлено: предоставлен пример кода для отправки JSON для строки ...

<script>
    $(function(){
        $( '.submit_button' ).click(function(){

            var form_values = {};

            $( this ).closest( 'tr' ).find( 'input, select' ).each(function(){  
                form_values[ $(this).attr('name') ] = $(this).val();
            });
            if( form_values.undefined ){
                delete form_values.undefined;
            }

            $.post( "/test.php",
                form_values,
                function(data){
                    //success
                    alert( data );
                },
                "json"
            );

        });
    });
</script>

Обновление:

Мне не понравился мой предыдущий ответ, поэтому я создал отдельный html-файл, чтобы продемонстрировать, что он работает.

https://gist.github.com/1367465

Вы не можете обернуть тег вокруг, как предлагают другие, потому что он нарушит HTML таблицы.

0 голосов
/ 14 ноября 2011
     print("<form name="" action="your method to be triggered or url">" method="POST");
     print("<tr>");   
     print("<td>");
     print("<p style='font-size:14px; color:blue; padding:0;'>$client_id</p>");
     print("</td>");          
     print("<td>");
     print("<img class='custom_rate' alt='' src='$client_image' />");
     print("</td>");
     print("<td width='100px'>");
     print("<input type='text' value='$client_name' name='clientname'/>");
     print("</td>");
     print("<td>");
     print("<input type='text' value='$client_price' name='clientprice'/>");
     print("</td>");
     print("<td width='100px'>");
     print("<input type='text' value='$client_price_label' name='clientpricelabel'/>");
     print("</td>");
     print("<td width='100px'>");
     print("<textarea cols='15' rows='2' name='description'>$client_desc</textarea>");
     print("</td>");
     print("<td width='100px'>");
     print("<input type='submit' value='Update' name='update'/>");
     print("</td>");
     print("</tr>");
     print("</form>");

если вы передадите URL-адрес, вы можете объединить идентификатор клиента и отправить его.

0 голосов
/ 14 ноября 2011

насколько я понимаю, вы хотите обновить отдельные записи нажатием на кнопку обновления, вы также делаете это с помощью события jquery .each(), которое помогает вам обновить отдельный результат. с помощью .each() запустите цикл и получите отдельную строку с кнопкой обновления .. но не уверен, что будет работать с <input type="submit" name="update" value="Update">

использование <input type="button" name="update" value="Update">

0 голосов
/ 14 ноября 2011

У вас есть несколько подходов:

  1. Сделать каждую строку формой, так что будет отправлена ​​только эта строка
  2. Имейте форму, состоящую полностью из скрытых полей. Добавьте обработчик событий javascript к каждой кнопке отправки, которая копирует поля из таблицы в эту форму и отправляет ее
  3. Вариация # 2, вместо копирования полей в скрытую форму, создайте AJAX-запрос на отправку данных только для одной строки
0 голосов
/ 14 ноября 2011

Полагаю, вам нужен идентификатор строки, для которой нажата кнопка обновления, чтобы вы могли манипулировать идентификатором на стороне сервера. Может быть, лучше иметь функцию в Javascript

function update (id)
{

}

затем вызовите эту функцию для события onClick кнопки отправки и передайте id в качестве параметра.

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

print("<input type='submit' value='Update' name='update' onclick=JavaScript:update('$client_id')/>");

Будет вызвана функция обновления, в запросе укажите значение id и отправьте форму.

0 голосов
/ 14 ноября 2011

Создайте отдельную форму с уникальным именем / идентификатором для каждой строки.И отправить с помощью javascript нажатием кнопки (отправка имени формы / идентификатора соответствующей строки.)

function submitrow(id)
{
  document.forms[id].submit();
}
0 голосов
/ 14 ноября 2011

Вы должны создать <form> для каждой строки, и действие указывает на: example.php?client_id=x.В сценарии You PHP вы можете проверить, что GET Param и измененные значения (или вы просто используете client_id, отправленный POST).

Другого пути нет.

0 голосов
/ 14 ноября 2011

Оберните все отдельные строки в отдельные теги <form>. Когда вы отправите заявку, будет отправлен только один <form>.

Другое решение - вместо этого вы можете использовать AJAX.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...