|
|
|
| У меня выводится таблица из БД для редактирования, т.е. в таблице каждая ячейка - это <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>
}
}
?>
|
Что изменить? | |
|
|
|
|
|
|
|
для: Stasycat
(25.06.2008 в 10:36)
| | Как минимум вместо if (isset($save)) написать if (isset($_POST['new_mat'])) | |
|
|
|
|
|
|
|
для: 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 ? | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: Trianon
(25.06.2008 в 13:15)
| | т.е. получается, были где-то строки типа
$_GET[save]=$_POST[save];
$_GET[id_up]=$_POST[id_up]; ? | |
|
|
|
|
|
|
|
для: 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);
?>
|
всё станет ясно. | |
|
|
|
|
|
|
|
для: Trianon
(25.06.2008 в 13:56)
| | Да вот в том-то и дело, что пробовал, иначе не спросил бы :)
Итог: GET-массив пуст.
$_GET:Array ( ) $_POST:Array ( [p] => 2 [g] => 1 )
|
Или что вы мне хотели этим показать?
То, что g не входит в тело POST-запроса понятно, но входит в POST-заголовок.
Не понятно каким образом g попадет в GET-массив. | |
|
|
|
|
|
|
|
для: 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 ) | |
|
|
|
|
|
|
|
для: Trianon
(25.06.2008 в 14:35)
| | Не траву он нормальную курит , я не заметил как вырубился Апач, и из под редактора скрипт запускался без Апача. :) | |
|
|
|
|
|
|
|
для: AcidTrash
(25.06.2008 в 14:45)
| | а на кой передавать и GET и POST? Не проще ли параметры в поля hidden запихнуть в форме и все запостить? | |
|
|
|
|
|
|
|
для: GeorgeIV
(25.06.2008 в 14:54)
| | Не знаю зачем здесь, а так если вам надо передать вместе с POST-запросом, некоторые параметры GET. | |
|
|
|
|
|
|
|
для: AcidTrash
(25.06.2008 в 15:14)
| | Если просто для совместимости, где то писали GET, где то POST, то можно использовать
$_REQUEST
Переменные, передаваемые скрипту через механизмы ввода GET, POST и COOKIE
|
и не городить огород из смеси GET POST | |
|
|
|
|
|
|
|
для: GeorgeIV
(25.06.2008 в 15:20)
| | Хорошо, а если параметр g нужно отправить и принять и GET и POST запросом, одновременно? $_REQUEST не пойдет. Преимущество будет на стороне тела запроса. | |
|
|
|
|
|
|
|
для: AcidTrash
(25.06.2008 в 15:30)
| | А ЗАЧЕМ? | |
|
|
|
|
|
|
|
для: GeorgeIV
(25.06.2008 в 15:49)
| | Например когда вам надо передать один и тот же параметр в скрипт, напимер в
switch($_GET[g]){
case ...
}
и в
switch($_POST[g]){
case ...
}
причем возможно GET[g] <>POST[g] и вообще иметь разный тип данных. | |
|
|
|
|
|
|
|
для: 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>";
}
}
?>
|
| |
|
|
|
|
|
|
|
для: AcidTrash
(25.06.2008 в 16:57)
| | А почему нужно проверять наличие переменной $new_mat, а не $save?
А по поводу GET и POST сразу:
У меня же таблица. Каждая строка этой таблицы заключена в форму, чтобы отправлялись исправления именно этой строки. Если взять форму одну на все строки, то $id передаётся при отправке данных самый последний в цикле, а не тот, который нужен мне. Именно поэтому и GET в адресе формы пишу, т.к. POST передаст id последней строки и никак иначе.
Получается, что проверяется - нажата ли какая-либо кнпка, которая содержит в URL параметр save. Если да, то из POST берутся значания поля new_mat этой формы, а из GET id строки, где этот материал нужно заменить в БД. | |
|
|
|