|
|
|
| Так и не дождалась ответа. Спрашиваю ещё раз.
Как при нажатии на кнопку SAVE отправить новое значение и тут же его вывести.
Колдую вот с такой таблицей (все строки - поля, которые можно изменять):
______________________________________________
... | материал | кол-во | сохранить |
__|________________|_____________|______________|
... | лопата | 2 | SAVE |
__|________________|_____________|______________|
... | ведро | 5 | SAVE |
__|________________|_____________|______________|
... | цемент меш. 15кг | 1 | SAVE |
__|________________|_____________|______________|
Нужно чтобы при изменении любого текстового поля и нажатии на SAVE обновлялась страница и обновлялись данные в таблице, т.е. НАПИСАТЬ-НАЖАТЬ SAVE-УВИДЕТЬ ВЫВОД ТАБЛИЦЫ С ИЗМЕНЁННЫМ ЗНАЧЕНИЕМ.
Вот что у меня:
//_________________________ИЗМЕНЕНИЕ СТРОКИ_____________________________
$save = $_GET['save'];
if ($save==1)
{
$id = $_GET['id_up'];
$d = $_GET['data'];
$k = $_GET['kl'];
$o = $_GET['ob'];
$s = $_GET['sn'];
$p = $_GET['po'];
$m= $_GET['new_mat'];
$kol= $_GET['new_kol'];
$query = "DELETE FROM vnutr_zayavki WHERE id_vnutr_zayavki='$id'";
$result = mysql_query($query) or die("Запрос ошибочный");
$query_plus = "INSERT INTO vnutr_zayavki VALUES ('$id', '$n_zayavki', '$d', '$k', '$o','$s','$p','$m','$kol','$v','безнал','','','$v','','','$password')";
$result_plus = mysql_query($query_plus) or die("Запрос ошибочный");
}
...
//________________ВЫВОД ТАБЛИЦЫ__________________
...
print "<form action='vnutr_zayavki_open.php' method='get'><tr><td>
<input type='text' name='new_mat' maxlength='50' size='40' alt='материал' value='$material'></td><td>
<input type='text' name='new_kol' maxlength='15' size='3' alt='кол-во' value='$kol_vo'></td><td>";
...
print "<a href=http://www.root5.ru/vnutr/vnutr_zayavki_open.php?n_zayavki=$n_zayavki&password=$password&id_up=$id_zayavki&mat=$new_mat&kol=$new_kol&save=1><img src='../images/save.jpg' onClick='submit()'></a></td>
...
|
P.s.: Удаляю и вставляю строчку, т.к. просто UPDATE у меня не работает. | |
|
|
|
|
|
|
|
для: Stasycat
(09.07.2008 в 17:25)
| | В начале скрипта проверяешь, был ли POST с формы (для чего кстати GET используешь?), если был, делаешь UPDATE (INSERT, DELETE). Затем читаешь базу и выводишь данные в таблицу формы. У тебя всегда будут актуальные данные на форме.
И форму переделай в человеческий вид. | |
|
|
|
|
|
|
|
для: GeorgeIV
(09.07.2008 в 18:41)
| | >В начале скрипта проверяешь, был ли POST с формы
Как это проверить с определённой формы? У меня их в каждой строчке, а строчек 10-15.
>(для чего кстати GET используешь?)
Делала через POST,но он вообще у меня ничего не передаёт. Заменила на GET стал что-то видеть.
>Затем читаешь базу и выводишь данные в таблицу формы. У тебя всегда будут актуальные данные на форме.
Не поняла вопроса. Я вывожу каждую запись из базы в строку-форму, чтобы при изменении какого-либо поля в этой строке обновлялась в базе ИМЕННО эта строка.
>И форму переделай в человеческий вид.
А что в ней не так? | |
|
|
|
|
|
|
|
для: Stasycat
(10.07.2008 в 09:12)
| | Как это проверить с определённой формы?У меня их в каждой строчке, а строчек 10-15
Я бы сделал одну форму и методом ПОСТ передавал массив. Просто именуете Кнопку отправки, и проверяете на соответствие в обработчике. Либо ещё лучший вариант одна кнопка отправки, используете чекбоксы и ставите галочки для тех строк которые необходимо обновить(за одну отправку можно обновить данных сколько нужно).
<form action='vnutr_zayavki_open.php' method='POST'>
затем цикл
<table>
<tr>
<td><input type=checkbox name=check[] value=".$key."> </td>
<td><input type='text' name='new[mat][]' maxlength='50' size='40' alt='материал' value='$material'></td>
<td> <input type='text' name='new[kol][]' maxlength='15' size='3' alt='кол-во' value='$kol_vo'></td>
....
</tr>
конец цикла
<tr>
<td> кнопка </td>
</table>
|
| |
|
|
|
|
|
|
|
для: Valick
(10.07.2008 в 09:48)
| | Table только вынеси из цикла :-) | |
|
|
|
|
|
|
|
для: GeorgeIV
(10.07.2008 в 09:59)
| | Угу, спасибо) И с индексами массивов чёт запутался
<form action='vnutr_zayavki_open.php' method='POST'>
<table>
затем цикл
<tr>
начало строки
<td><input type=checkbox name=check[] value="<?php echo $key;?>"> </td>
<td><input type='text' name='new[<?php echo $key;?>][mat]' maxlength='50' size='40' alt='материал' value='<?php echo $material;?>'></td>
<td> <input type='text' name='new[<?php echo $key;?>][kol]' maxlength='15' size='3' alt='кол-во' value='<?php echo $kol_vo;?>'></td>
....
конец строки
</tr>
конец цикла
<tr>
<td><input type="submit" name="save" value="Сохранить" ></td>
</table>
|
| |
|
|
|
|
|
|
|
для: Valick
(10.07.2008 в 10:05)
| | new_mat
new_kol
....
Зачем массив в данном случае? | |
|
|
|
|
|
|
|
для: GeorgeIV
(10.07.2008 в 10:09)
| | Зачем массив в данном случае?
Пока незнаю)) Но думаю отказаться от массива проще, чем его потом применить (если будет выгода при обработке информации) | |
|
|
|
|
|
|
|
для: Valick
(10.07.2008 в 10:17)
| | вообще то да. массив нужен. тут не одна строка редактируется, а все:-( | |
|
|
|
|
|
|
|
для: GeorgeIV
(10.07.2008 в 10:22)
| | Ну да, в исключительной надобности на 100% я неуверен, Лопатить кучу данных в массиве удобнее)
<form action='vnutr_zayavki_open.php' method='POST'>
<table>
<?php foreach($new as $key => $value)
{ ?>
<tr>
начало строки
<td><input type=checkbox name=check[$key] value="<?php echo $key;?>"> </td>
<td><input type="text" name="new[<?php echo $key;?>]['mat']" maxlength="50" size="40"
alt="материал" value="<?php echo $new[$key]['mat'];?>"></td>
<td> <input type="text" name="new[<?php echo $key;?>]['kol']" maxlength="15" size="3"
alt="кол-во" value="<?php echo $new[$key]['kol'];?>"></td>
....
конец строки
</tr>
<?php } ?>
<tr>
<td><input type="submit" name="save" value="Сохранить" ></td>
</table>
|
Пока неполучается.... точно надо с массивами разобраться | |
|
|
|
|
|
|
|
для: Valick
(10.07.2008 в 09:48)
| | сделай так: (не тестировал, могут быть ошибки)
<?php
// Подключение к БД;
...
// Запись данных;
if ($_POST['save'] and $_POST['name']) {
foreach ($_POST['name'] as $item=>$value) {
// Поиск данных в БД;
$sql = "SELECT * FROM .. WHERE `name`='".$value['name']."' AND `count`='".$value['count']."' AND ..";
...
if (если такой записи нет, т.е. она была изменена, то обновляем ее в БД) {
$sql = "UPDATE .. VALUE `name`='".$value['name']."', `count`='".$value['count']."' WHERE `id`='".$value['id']."' LIMIT 1";
...
}
}
}
// Чтение данных;
$sql = "SELECT * FROM .. WHERE ..";
...
// Количество записей;
$count = count(массив записей);
// Вывод данных;
for($i=0; $i<$count; $i++) {
// Строка с данными;
echo '<input type="text" name="name['.$i.']" value="" /><input type="text" name="count['.$i.']" value="" /><br />';
}
?>
кнопка для обновления
<input type="submit" name="save" value="Сохранить" />
|
| |
|
|
|
|
|
|
|
для: Stasycat
(10.07.2008 в 09:12)
| | Не путай строку ввода с целой формой, судя по коду форма у тебя одна.
А далее тебе уже подсказали | |
|
|
|
|
|
|
|
для: GeorgeIV
(10.07.2008 в 09:57)
| | Вот разобрался... предлогаю такой вариант:
<?php
// Структура массива
$new=array(0=>array("mat"=>"лопата","kol"=>"56"),
1=>array("mat"=>"ведро","kol"=>"20"));
?>
<form action='vnutr_zayavki_open.php' method='POST'>
<table border="0" cellpadding="0" cellspacing="0">
<?php foreach($new as $num => $mass)
{?>
<tr>
<td>
<input type="checkbox" name="check[<?php echo $num;?>]" value="<?php echo $mass;?>"></td>
<?php foreach($mass as $key=> $value)
{?>
<td>
<input type="text" name="new[<?php echo $num;?>][<?php echo $key;?>]" maxlength="50" size="40"
value="<?php echo ($new[$num][$key]);?>">
</td>
<?php }} ?>
</tr>
<tr>
<td><input type="submit" name="save" value="Сохранить" ></td>
</tr>
</table>
|
Скрипт универсальный, попробуйте изменить массив на:
$new=array(0=>array("mat"=>"лопата","kol"=>"56"),
1=>array("mat"=>"ведро","kol"=>"20","prim"=>"5 бракованных"));
|
и посмотрите результат.
Обработка массива (файл vnutr_zayavki_open.php)
<?php
if(isset($_POST['new'])) {print_r ($_POST['new']); echo "<br>";}
if(isset($_POST['check'])) {print_r ($_POST['check']); echo "<br>";}
if(isset($_POST['new']) & isset($_POST['check']))
{
$res=array_intersect($_POST['new'],$_POST['check']);
print_r ($res);
}
?>
|
теперь результирующим массивом $res можно апдейтить базу сколько влезет, приблизительно точно так же как и выводим в браузер, т.е. двумя циклами foreach
Упс... пока рано... с пересечением массивов невышло))) думаю дальше | |
|
|
|
|
|
|
|
для: Valick
(10.07.2008 в 11:48)
| | Пересечение нафик ненужно... делаем так: | |
|
|
|
|
|
|
|
для: Valick
(10.07.2008 в 11:48)
| | С массивами в php не работали раньше.
Пытаюсь в цикле (там где проверка $row['n_vnutr_zayavki']==$n_zayavki) сохранить отдально каждую сроку:
$stroka[$id_zayavki][0] = $data;
$stroka[$id_zayavki][1] = $id_klienta;
$stroka[$id_zayavki][2] = $id_obekta;
$stroka[$id_zayavki][3] = $material;
$stroka[$id_zayavki][4] = $kol_vo;
$stroka[$id_zayavki][5] = $tsena;
|
А он данные не сохраняет туда. Он мне выводит на страницу только слова Array[1], Array[2] и т.д. А где же значения из БД? | |
|
|
|
|
|
|
|
для: Stasycat
(10.07.2008 в 13:14)
| | а как выводишь? | |
|
|
|
|
|
|
|
для: Stasycat
(10.07.2008 в 13:14)
| | Дайте стркутуру таблицы БД | |
|
|
|
|
|
|
|
для: Valick
(10.07.2008 в 13:38)
| | Тьфу, вот я идиота кусок... структура ненужна... мыж универсальный скрипт пишем)) | |
|
|
|
|
|
|
|
для: Valick
(10.07.2008 в 13:58)
| | Ну... полем первичного ключа я бы поинтересовался.
Хотя можно, конечно, запросом получить,... | |
|
|
|
|
|
|
|
для: Trianon
(10.07.2008 в 14:03)
| | Что предложите? У меня первичный ключ тоже в таблицу попадает если делать так:
while ($row=mysql_fetch_assoc($name))
{
$new[$row['id']]=$row;
}
|
Подскажите как его получить запросом? Чтобы избавится от $row['id'] а то получается привязываемся к конкретной таблице (на худой конец сойдёт, но хочется универсальности)
И как его грамотно исключить из конечного массива $new
по условию или какую функцию для массивов применить
(в этом месте у меня теория хромает) | |
|
|
|
|
|
|
|
для: Valick
(10.07.2008 в 16:46)
| | mysql_field_flags? | |
|
|
|
|
|
|
|
для: Valick
(10.07.2008 в 16:46)
| |
$tablesource = mysql_result(mysql_query("SHOW CREATE TABLE `$table`"),0,1);
preg_match('/PRIMARY[\s]+KEY[\s]*\(`([^`]+)`\)/',$tablesource, $out);
$keyname = $out[1];
//................
while ($row=mysql_fetch_assoc($name))
{
$keyval = $row[$keyname];
unset($row[$keyname]);
$new[$keyval]=$row;
}
|
Само собой, в продакшн этот код пускать нельзя. | |
|
|
|
|
|
|
|
для: Trianon
(10.07.2008 в 17:22)
| | Само собой, в продакшн этот код пускать нельзя
В смысле? | |
|
|
|
|
|
|
|
для: Valick
(10.07.2008 в 21:25)
| | Я лишь привел пример, как можно добыть ключ.
В коде нет ни одной проверки - больше чем на реплику в диалоге он не тянет. | |
|
|
|
|
|
|
|
для: Trianon
(10.07.2008 в 17:22)
| | А как такой вариант?
// *******************************************************************
// Функция определения первичного ключа таблицы из результата запроса
// *******************************************************************
function name_id($result)
{
$num=0;
do
{
if (strpos($flag=mysql_field_flags($result,$num),"primary_key"))
{$field=mysql_field_name($result,$num); break;}
$num++;
}while ($num<mysql_num_fields($result));
return $field;
}
|
| |
|
|
|
|
|
|
|
для: Valick
(10.07.2008 в 21:40)
| | тогда уж
function name_id($result)
{
for($i = 0;$k = mysql_fetch_field($result, $i); ++$i)
if($k->primary_key)
return $k->name;
return false;
}
|
| |
|
|
|
|
|
|
|
для: Trianon
(10.07.2008 в 21:49)
| | Спасибо, немного непонятно для меня.
Это я так понимаю объектно-ориентированный подход? | |
|
|
|
|
|
|
|
для: Valick
(10.07.2008 в 13:38)
| | Вот структура таблицы. | |
|
|
|
|
|
|
|
для: Stasycat
(10.07.2008 в 14:11)
| | мама... | |
|
|
|
|