Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: сохранение текста из текстового поля
 
 автор: Stasycat   (25.06.2008 в 10:36)   письмо автору
 
 

У меня выводится таблица из БД для редактирования, т.е. в таблице каждая ячейка - это <input type="text' ...>, в которой value отображается из таблицы БД. Как мне сделать, чтобы пользователь мог изменить текст любой сроки и сохранить?
Я так понимаю, мне нужно при нажатии на "сохранить" отправлять содержимое поля, запоминать его и перед созданием поля проверять изменилось или нет (если да, то заменить в БД). Или можно как-то ещё?

Вот моя таблица, 4 столбца (маткериал, ед.изм, кол-во, рисунок-ссылка "сохранить запись").
Использовать кнопку не получается, т.к. к концу таблицы id не тот в кнопку передастся, а через ссылку всё нормально.

<?php
$save 
$_GET['save'];    // если нажато "сохранить" обновляем строку в БД
$id $_GET['id_up'];
if (isset(
$save))
    {
    
$new_mat $_POST['new_mat'];
    
$query_up "UPDATE vnutr_zayavki SET material='$new_mat' WHERE id_zayavki='$id'";
    
$result_up mysql_query($query_up) or die("Запрос ошибочный");    
    }    
$query "select * from vnutr_zayavki";                      // выводим таблицу
$result mysql_query($query) or die($query);
while (
$row mysql_fetch_array($result))
  {
  if (
$row['n_vnutr_zayavki']==$n_zayavki and $row['password_vnutr']==$password)
    {
    
$id_zayavki $row['id_vnutr_zayavki'];    
    
$material $row['material'];
    
$kol_vo $row['kol_vo_vnutr'];
print 
"</td></tr><tr><td colspan='2' align='left'><span class='text1'>
    <br />Материалы:"
;
    print 
"<table border='1' width='900' bgcolor='#FFFFFF'><tr style='color:#000000' bgcolor='#FFFFFF' class='main_text'>
    <th width='300'>Материал</th>
    <th align='center' width='50'>Ед. изм.</th>
    <th align='center' width='50'>Кол-во</th>
<th align='center' width='50'>сохранить</th></tr>
print "
<form action='vnutr_zayavki_open.php?id_up=$id_zayavki&save=1' method='post'><tr><td>
            <
input type='text' name='new_mat' maxlength='50' size='40' alt='материал' value='$material'>
            </
td><td>
            <
input type='text' name='new_ed' maxlength='15' size='7' alt='ед изм' value='$ed_izm'></td><td>
            <
input type='text' name='new_kol' maxlength='15' size='3' alt='кол-во' value='$kol_vo'></td><td>
            <
img src='../images/save.jpg'  onClick='submit()'></td></tr></form>
    }
}
?>


Что изменить?

   
 
 автор: Trianon   (25.06.2008 в 12:14)   письмо автору
 
   для: Stasycat   (25.06.2008 в 10:36)
 

Как минимум вместо if (isset($save)) написать if (isset($_POST['new_mat']))

   
 
 автор: AcidTrash   (25.06.2008 в 13:01)   письмо автору
 
   для: Stasycat   (25.06.2008 в 10:36)
 

А с чего вы решили,что данные id_up и save из этой формы
<form action='vnutr_zayavki_open.php?id_up=$id_zayavki&save=1' method='post'><tr><td>

будут передаваться методом GET, судя по тому как вы их принимаете
$save = $_GET['save'];    // если нажато "сохранить" обновляем строку в БД
$id = $_GET['id_up'];

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

   
 
 автор: Trianon   (25.06.2008 в 13:15)   письмо автору
 
   для: AcidTrash   (25.06.2008 в 13:01)
 

>А с чего вы решили,что данные id_up и save из этой формы
><form action='vnutr_zayavki_open.php?id_up=$id_zayavki&save=1' method='post'><tr><td>
>будут передаваться методом GET...?

Из того, что они включены в состав URI query string атрибута action этой формы (места я выделил жирным). Полями формы они не являются, и в тело POST-запроса не попадут. А в заголовок POST-запроса - запросто. Это не помешает им в конечном итоге оказаться в массиве $_GET

   
 
 автор: AcidTrash   (25.06.2008 в 13:41)   письмо автору
 
   для: Trianon   (25.06.2008 в 13:15)
 

т.е. получается, были где-то строки типа
$_GET[save]=$_POST[save];
$_GET[id_up]=$_POST[id_up]; ?

   
 
 автор: Trianon   (25.06.2008 в 13:56)   письмо автору
 
   для: AcidTrash   (25.06.2008 в 13:41)
 

не было этих строк.
Попробуйте выполнить нечто вроде

<form action=?g=1 method=post> 
 <input name=p value=2 >
 <input type=submit  value=go>
</form>
<?php 
   
echo '$_GET:' ;  print_r($_GET);
   echo 
'$_POST:' ;  print_r($_POST);
?>


всё станет ясно.

   
 
 автор: AcidTrash   (25.06.2008 в 14:04)   письмо автору
 
   для: Trianon   (25.06.2008 в 13:56)
 

Да вот в том-то и дело, что пробовал, иначе не спросил бы :)
Итог: GET-массив пуст.
$_GET:Array ( ) $_POST:Array ( [p] => 2 [g] => 1 ) 

Или что вы мне хотели этим показать?
То, что g не входит в тело POST-запроса понятно, но входит в POST-заголовок.
Не понятно каким образом g попадет в GET-массив.

   
 
 автор: Trianon   (25.06.2008 в 14:35)   письмо автору
 
   для: AcidTrash   (25.06.2008 в 14:04)
 

Я не знаю, какую траву курит Ваш сервер...
Вот то что у меня:
$_GET:Array ( [g] => 1 ) $_POST:Array ( [p] => 2 ) 


(Apache/2.2.4 (Win32) mod_ssl/2.2.4 OpenSSL/0.9.8d PHP/5.2.5 )

   
 
 автор: AcidTrash   (25.06.2008 в 14:45)   письмо автору
 
   для: Trianon   (25.06.2008 в 14:35)
 

Не траву он нормальную курит , я не заметил как вырубился Апач, и из под редактора скрипт запускался без Апача. :)

   
 
 автор: GeorgeIV   (25.06.2008 в 14:54)   письмо автору
 
   для: AcidTrash   (25.06.2008 в 14:45)
 

а на кой передавать и GET и POST? Не проще ли параметры в поля hidden запихнуть в форме и все запостить?

   
 
 автор: AcidTrash   (25.06.2008 в 15:14)   письмо автору
 
   для: GeorgeIV   (25.06.2008 в 14:54)
 

Не знаю зачем здесь, а так если вам надо передать вместе с POST-запросом, некоторые параметры GET.

   
 
 автор: GeorgeIV   (25.06.2008 в 15:20)   письмо автору
 
   для: AcidTrash   (25.06.2008 в 15:14)
 

Если просто для совместимости, где то писали GET, где то POST, то можно использовать
$_REQUEST
Переменные, передаваемые скрипту через механизмы ввода GET, POST и COOKIE

и не городить огород из смеси GET POST

   
 
 автор: AcidTrash   (25.06.2008 в 15:30)   письмо автору
 
   для: GeorgeIV   (25.06.2008 в 15:20)
 

Хорошо, а если параметр g нужно отправить и принять и GET и POST запросом, одновременно? $_REQUEST не пойдет. Преимущество будет на стороне тела запроса.

   
 
 автор: GeorgeIV   (25.06.2008 в 15:49)   письмо автору
 
   для: AcidTrash   (25.06.2008 в 15:30)
 

А ЗАЧЕМ?

   
 
 автор: AcidTrash   (25.06.2008 в 16:12)   письмо автору
 
   для: GeorgeIV   (25.06.2008 в 15:49)
 

Например когда вам надо передать один и тот же параметр в скрипт, напимер в

switch($_GET[g]){
case ...
}

и в

switch($_POST[g]){
case ...
}
причем возможно GET[g] <>POST[g] и вообще иметь разный тип данных.

   
 
 автор: AcidTrash   (25.06.2008 в 16:57)   письмо автору
 
   для: Stasycat   (25.06.2008 в 10:36)
 

Что типа такого
<?php
if(isset($_POST['new_mat']))
{
    
$new_mat $_POST['new_mat'];
    if (!
get_magic_quotes_gpc())
    {
    
$new_mat mysql_escape_string($new_mat);
    }
    
$id intval($_GET['id_up']);
    
$query_up "UPDATE vnutr_zayavki SET material='$new_mat' WHERE id_zayavki=$id";
    
$result_up mysql_query($query_up) or die("Запрос ошибочный");
    }


    
$query "select * from vnutr_zayavki";                      // выводим таблицу
$result mysql_query($query) or die($query);
while (
$row mysql_fetch_array($result))
  {
  if (
$row['n_vnutr_zayavki']==$n_zayavki and $row['password_vnutr']==$password)
    {
    
$id_zayavki $row['id_vnutr_zayavki'];
    
$material $row['material'];
    
$kol_vo $row['kol_vo_vnutr'];
    
$ed_izm $row['ed_izm_vnutr'];
    print 
"</td></tr><tr><td colspan='2' align='left'><span class='text1'>
    <br />Материалы:"
;
    print 
"<table border='1' width='900' bgcolor='#FFFFFF'><tr style='color:#000000' bgcolor='#FFFFFF' class='main_text'>
    <th width='300'>Материал</th>
    <th align='center' width='50'>Ед. изм.</th>
    <th align='center' width='50'>Кол-во</th>
<th align='center' width='50'>сохранить</th></tr>
<form action='vnutr_zayavki_open.php?id_up=
$id_zayavki&save=1' method='post'><tr><td>
            <input type='text' name='new_mat' maxlength='50' size='40' value='
$material'>
            </td><td>
            <input type='text' name='new_ed' maxlength='15' size='7' value='
$ed_izm'></td><td>
            <input type='text' name='new_kol' maxlength='15' size='3' value='
$kol_vo'></td><td>
            <img src='../images/save.jpg'  onClick='submit()'></td></tr></form>"
;
    }
}
?>

   
 
 автор: Stasycat   (26.06.2008 в 09:25)   письмо автору
 
   для: AcidTrash   (25.06.2008 в 16:57)
 

А почему нужно проверять наличие переменной $new_mat, а не $save?

А по поводу GET и POST сразу:
У меня же таблица. Каждая строка этой таблицы заключена в форму, чтобы отправлялись исправления именно этой строки. Если взять форму одну на все строки, то $id передаётся при отправке данных самый последний в цикле, а не тот, который нужен мне. Именно поэтому и GET в адресе формы пишу, т.к. POST передаст id последней строки и никак иначе.

Получается, что проверяется - нажата ли какая-либо кнпка, которая содержит в URL параметр save. Если да, то из POST берутся значания поля new_mat этой формы, а из GET id строки, где этот материал нужно заменить в БД.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования