| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Базы Данных > Изменение базы данных через форму |
| Автор: Jubei 13.7.2005, 13:26 |
| Вот как я придумал модифицировать данные в базе- Данные вводятся через в БД форму, потом есть возможность посмотреть их через другую форму. Теперь о чем я хотел спросить, в этой другой форме, которая показывает данные из БД можно кликнуть на строчку чтобы модифицировать данные, так вот мне интересно можно ли как-то реализовать переход в форму ввода данных при этом передав параметр которой или переменную при просмотре которой скрипт бы выбирал создавать ли ему новую строчку в базе или модифицировать старую. Спасибо за ответ, извините если что за громозкое описание. P.S. может стоит использовать глобальные переменные и отлавливать их REQUEST-ом в скрипте форме ввода ? |
| Автор: Mal Hack 13.7.2005, 14:13 |
| есть форма добавления. Есть такая же форма редактирования, которая правда должна генерится PHP скриптом. И вставлять туда <input type='hidden' name='id' value=''> В значение value подставляется ID той записи, которую надо отредактировать, который ты передаешь по ссылке: edit.php?id=12 |
| Автор: Jubei 13.7.2005, 14:19 |
| Так, я немного невьехал |
| Автор: Mal Hack 13.7.2005, 14:24 |
| Jubei либо две формы, либо одна, но в зависимости от того что хочет пользователь (добавить или редактировать) ты должен: 1. Установить соответствующий <form> action либо на edit.php либо на add.php. 2. Добавить <input type='hidden' name='id' value=''> В значение value подставляется ID той записи, которую надо отредактировать, который ты передаешь по ссылке: edit.php?id=12 в форму редактирования. |
| Автор: Jubei 13.7.2005, 15:55 |
| Понял вроде бы ). И еще глупый вопрос, наверно больше связаный с html, когда одна форма выводит данные из базы на экран, то каким способом лучше всего выбирать ту строчку которую надобы отмодефицировать (например можно-ли использовать как-нибудь аhref на колонне id чтоб передать скрипту edit.php то значение id на которое юзер кликнул ? или вот в случае <input type='hidden' name='id' value=''> как именно засовывать в value id той строчки которой хочет изменить пользователь ? ) Спасибо большое, что терпите мои глупые вопросы |
| Автор: Mal Hack 13.7.2005, 16:02 |
| Через PHP. Выводишь либо строчку с EDIT либо с ADD. |
| Автор: Jubei 13.7.2005, 16:27 |
| Нет я наверно немного неправильно обьяснил, вот вывелась таблица там 5 строчек, каким видом лучше всего выбирать что например я хочу изменить 2ую строчку через ahref это можно или как <input type='hidden' name='id' value=''> узнать что я нажал именно вторую строчку и записать в value=id второй строчки ? |
| Автор: Mal Hack 13.7.2005, 16:33 |
| Таблица с чем? С формой? Такого быть не должно. |
| Автор: Jubei 13.7.2005, 16:41 |
| Нет не таблица с формой, есть форма которая которая выводит данные из базы в виде таблицы, я хочу понять как удобнее для пользователя сделать модификацию данных которые он видет в этой таблице, вот и извращаюсь разными способами P.S.Тфуты не форма, а пхп скрипт который выводит данные из базы и запихивает их сделаной на html таблице P.S.S. чтото я страшное напридумывал буду думать как по другому делать |
| Автор: Jubei 14.7.2005, 10:30 |
| Вообще решил я сделать так, сделал форму с одним инпутом в котором вводиться число (номер строчки которую мы будем модифицировать). Главная проблема, у меня возникает в том, что пока например неодна строка в базе данных не стерта,можно спокойно сравнивать номер строчки с полем id AUTO_INCREMENT в mysql-e, а что делать если вдруг строчку пришлось стереть ... все сразу накрывается медным тазом... может есть способ лучше делать модификацию строчки ? |
| Автор: Mal Hack 14.7.2005, 11:20 | ||||
Ты хоть сам понял что ты сказал?
Так делать не надо. Для начала сделай проще. Две разные формы add.php и edit.php. Потом уже пойймешь, как их объединить |
| Автор: Jubei 14.7.2005, 11:43 | ||
вот например Add.php
из этого скрипта я перехожу в view.php в который выводит данные из mysql на экран и мне нужно из этого view.php можно было-бы перейти в хтмл форму заполнения данных для вноса данных, а потом оттуда в edit.php c определенным параметром (например номером или чтонибудь чтоб указывало на строчку которую надо изменить) который бы мог задать пользователь - вот это я непонимаю как сделать. Add.php и Edit.php будет же отличаться друг от друга проверками создана ли такая строчка, можно ли её модифицировать в базе данных и так далее , я прав ? |
| Автор: Mal Hack 14.7.2005, 11:48 | ||||
Вот так. |
| Автор: Jubei 14.7.2005, 11:50 |
| Но номер строчки которую надо отредактировать, должен передавать пользователь, как нам тут input type=hidden поможет ? .... или я чтото непонимаю |
| Автор: Mal Hack 14.7.2005, 12:23 |
| Номер строчки передается через параметр ID, вводимый в адресной строке браузера. В скрипте, который генерирует форму, ты этот ID подставляешь в значение скрытого поля. |
| Автор: Jubei 14.7.2005, 12:32 | ||
Я наверно глюпый ) но я непонимаю, как пользователь сможет выбрать номер строчки, которую нужно выбрать ? что-ли в адресной строке браузера ему нужнобудет вручную вбивать ? хмм и если можно |
| Автор: Mal Hack 14.7.2005, 12:40 |
| У тебя есть таблица со списком всех данных. описание | ссылка на edit.php?id=12 описание | ссылка на edit.php?id=13 описание | ссылка на edit.php?id=14 описание | ссылка на edit.php?id=15 описание | ссылка на edit.php?id=17 Вот так. В add.php ничего передавать не надо. |
| Автор: Jubei 14.7.2005, 12:44 |
| Спасибо большое ! Понял идею. ээ еще маленький вопросик, тогда <a href="edit.php?id=<?$i?>" > можно ли так вставлять значение переменной $i в строчку ? |
| Автор: Чих_и_Пых_Пых(MySql_and_PHP) 14.7.2005, 12:54 | ||
| <? $hostname="localhost"; $username="myusername"; $password="mypassword"; $dbName="rskdatus"; $usertable="rskdat"; mysql_connect($hostname, $username, $password) or die("Не могу подключиться к Мускулю"); mysql_select_db("$dbName") or die("Не могу выбрать базу"); echo'<table width=30% align=center>'; if (!isset ($text)) $text = array (); $resultat = mysql_query("SELECT * FROM `table` "); while($row=mysql_fetch_array($resultat)): $selected = false; foreach ($text as $tx) { if ($row[text] == $tx) $selected = true; } if(selected) { echo"<tr><td><input type=text name=text value=\"$row[text]\"></td><a href=\"". $_SERVER['SCRIPT_NAME'] ."?id=$row[id]\">Редактировать</a></tr>"; } else { //надоело код писать, вообщем вюда вставишь форму для редактирования } endwhile; Добавлено @ 12:58
Синтаксис php позволяет такую вставку, но разумнее будет если ты обяснишь что записанно в переменную $i |
| Автор: Mal Hack 14.7.2005, 13:03 |
| Можно, но надо = поставить между <? и $. |
| Автор: Jubei 14.7.2005, 13:09 |
| Чих_и_Пых_Пых(MySql_and_PHP) это переменная которая будет отвечать за передачу парамметра id(номера строки что надо редактировать) , уже переделал на <a href="edit.php?id=<?=$i?>" > такой вариант работает, он лингвистически нормален ? Mal Hack, Чих_и_Пых_Пых(MySql_and_PHP) Большое вам спасибо еще раз ! |
| Автор: Jubei 14.7.2005, 13:58 |
| а вот ситуация спокойно сравнивааем номер строчки с полем id AUTO_INCREMENT в mysql-e все редактируется все хорошо .... , а что делать если вдруг строчку пришлось стереть ... все сразу накрывается медным тазом, так получаеться мы стерли 4 строчку, 5 и так дальше остались, пользователь смотрит таблицу и хопа там ему нужно изменить 4ую строчку, а 4ой строчке в мускуле уже нету, а на месте 4ой в таблице выведенной хтмлом находиться 5ая строчка из мускула, что с этим можно сделать ? ... |
| Автор: Mal Hack 14.7.2005, 14:03 |
| Ты должен, получив ID найти запись в ЬБД с этим ID. Т.е. сделать SELECT. Если записи нет, значит ID ошибочный. |
| Автор: Jubei 14.7.2005, 14:16 | ||
Да я так и делаю, просто я хотел коечто другое узнать в таблице которая выводиться есть столбик id| и его я вывожу неберя значение Id из мускула,а генерируя его циклом
проблема в том что если брать из мускула Id и потереть таблицу то Id не встанут по порядку, а будут продолжать автоувеличиваться даже если одной, двух или даже все строчек уже небудет (реляционные базы данных...) так если так и так сторчку в мускуле потереть, то этот вывод что я показал выше будет мускуловскую строчку номер 5 (4строчку например стерли) писать как 4ую... с этим можно как-то справиться, или только запретив стирать строчки ? |
| Автор: Mal Hack 14.7.2005, 17:27 | ||
Зачем? ну удалили 4 строчку и что? На выводе это никак не сказывается. |
| Автор: Чих_и_Пых_Пых(MySql_and_PHP) 15.7.2005, 07:17 |
| Jubei - ты лучше скажи что хочешь "замутить", тогда нам легче будет тебе обьяснять. |
| Автор: Jubei 15.7.2005, 09:10 |
| Mal Hack на выводе то нескажеться, а в мускуле (например стер 4ую строчку) 5ая строка так и останеться 5ой , а в выводе она будет 4ой, тоесть ID поле у 4ой строчке выводенной будет 5ая строчка мускула, и как мне тогда её редактировать ? |
| Автор: Чих_и_Пых_Пых(MySql_and_PHP) 15.7.2005, 10:13 | ||||
| Jubei - Тут немного другой случай.... Если ты id ставишь инскриментами по такому принципу:
В таком случае действительно проблема не решиться, но Mal Hack говоти тебе о другом, а именно, id будет служить число, выходящее из базы по такому принципу:
В этом случае, всё должно работать ОК. |
| Автор: Jubei 15.7.2005, 10:28 |
| Но смотри если я буду брать ID из мускула то при удаление 3ий строчки в нём , 4ая строчка нестанет же 3ей, тоесть вывод будет такой 1ая строчка 2ая строчка 4ая строчка ! |
| Автор: Чих_и_Пых_Пых(MySql_and_PHP) 15.7.2005, 10:56 |
| А что в этом плохого??? На месте третей строчки у тебя же не появиться пробел... |
| Автор: Jubei 15.7.2005, 11:06 |
| Ну както неоптимистично выглядит таблица с строчками 5ая 12ая 235ая Добавлено @ 11:09 Может тогда вообще убрать эту нумерацию и сделать ссылку на edit.php с изменяющимся ID в другом поле в котором будет текст ? пойду попробую это |
| Автор: Mal Hack 15.7.2005, 12:10 |
| Jubei НЕТ В РЕЯЛЦИОННЫЗ БД ПОНЯТИЯ 4 И 5 СТРОЧКА !!!!! Все лдостигается через сортировку и идентификацию через ключ - числовой автоинкрементный... |
| Автор: Jubei 15.7.2005, 12:54 |
| Mal Hack я не так выразился под 4-5ой строчкой я подразумевал название строки в БД у ,которой автоинкрементый элемент ID, который равен 4 и 5 соответственно. Спасибо я уже разобрался как лучше сделать. |