Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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
Так, я немного невьехал smile тоесть у меня неполучиться сделать такое чтоб форма добавления при определенных условиях(описанных в скрипте) могла бы становиться и формой редактирования ? Тоесть надо 2 формы делать ?

Автор: 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 той строчки которой хочет изменить пользователь ? )
Спасибо большое, что терпите мои глупые вопросы smile

Автор: 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
Нет не таблица с формой, есть форма которая которая выводит данные из базы в виде таблицы, я хочу понять как удобнее для пользователя сделать модификацию данных которые он видет в этой таблице, вот и извращаюсь разными способами smile

P.S.Тфуты не форма, а пхп скрипт который выводит данные из базы и запихивает их сделаной на html таблице

P.S.S. чтото я страшное напридумывал буду думать как по другому делать

Автор: Jubei 14.7.2005, 10:30
Вообще решил я сделать так, сделал форму с одним инпутом в котором вводиться число (номер строчки которую мы будем модифицировать). Главная проблема, у меня возникает в том, что пока например неодна строка в базе данных не стерта,можно спокойно сравнивать номер строчки с полем id AUTO_INCREMENT в mysql-e, а что делать если вдруг строчку пришлось стереть ... все сразу накрывается медным тазом... может есть способ лучше делать модификацию строчки ?

Автор: Mal Hack 14.7.2005, 11:20
Цитата(Jubei @ 13.7.2005, 17:41)
есть форма которая которая выводит данные из базы в виде таблицы,

Ты хоть сам понял что ты сказал?

Цитата(Jubei @ 14.7.2005, 11:30)
Вообще решил я сделать так, сделал форму с одним инпутом в котором вводиться число (номер строчки которую мы будем модифицировать). Главная проблема, у меня возникает в том, что пока например неодна строка в базе данных не стерта,можно спокойно сравнивать номер строчки с полем id AUTO_INCREMENT в mysql-e, а что делать если вдруг строчку пришлось стереть ... все сразу накрывается медным тазом... может есть способ лучше делать модификацию строчки ?

Так делать не надо.

Для начала сделай проще. Две разные формы add.php и edit.php. Потом уже пойймешь, как их объединить

Автор: Jubei 14.7.2005, 11:43
вот например Add.php

Код

<?php

     $hostname="localhost";
     $username="myusername";
     $password="mypassword";
     $dbName="rskdatus";
     $usertable="rskdat";
     
     $pref=$_POST['tips'];                                                // данные из хтмл формы
     $rsknum=$_POST['RSKnumurs'];
     $sernum=$_POST['Serialaisnummurs'];
     $modelnum=$_POST['Modelanumurs'];
     $tehnpar=$_POST['Tehniskieparametri'];
     $pref1=$_POST['opersistema'];
     $datvard=$_POST['Datoruvards'];
     $kab=$_POST['Kabinets'];
     



     $link  =  mysql_connect($hostname,  $username,  $password);
     if (!$link) die ("Nemogu podklu4itsja k MYSQL db");
     @mysql_select_db("$dbName") or die("Cant find database");
     $proverk = mysql_query("SHOW TABLES LIKE '".$usertable."'" );
     if(!mysql_num_rows($proverk)); //proverka na to estj li tablica ili net
     {
                $query="CREATE TABLE rskdat (id int(6) NOT NULL auto_increment,
                tips varchar(30) NOT NULL,RSKnumurs varchar(30)NOT null,Serialaisnummurs varchar(30),
                Modelanumurs varchar(30) , Tehniskieparametri Text ,opersistema varchar(30),Datoruvards varchar(30),
                Kabinets varchar (30),PRIMARY KEY (id),UNIQUE id (RSKnumurs),KEY id_2 (id))";
                mysql_query($query);
     }
     $query = "INSERT INTO $usertable VALUES('','$pref','$rsknum', '$sernum','$modelnum',
     '$tehnpar','$pref1','$datvard','$kab')";
     mysql_query($query) or die(mysql_error());
     echo "Informacija zanesena v bazu dannih";

?>

из этого скрипта я перехожу в view.php в который выводит данные из mysql на экран и мне нужно из этого view.php можно было-бы перейти в хтмл форму заполнения данных для вноса данных, а потом оттуда в edit.php c определенным параметром (например номером или чтонибудь чтоб указывало на строчку которую надо изменить) который бы мог задать пользователь - вот это я непонимаю как сделать.
Add.php и Edit.php будет же отличаться друг от друга проверками создана ли такая строчка, можно ли её модифицировать в базе данных и так далее , я прав ?

Автор: Mal Hack 14.7.2005, 11:48
Цитата(Jubei @ 14.7.2005, 12:43)
а потом оттуда в edit.php c определенным параметром (например номером или чтонибудь чтоб указывало на строчку которую надо изменить) который бы мог задать пользователь - вот это я непонимаю как сделать.


Цитата(Mal @ 13.7.2005, 15:13)
И вставлять туда <input type='hidden' name='id' value=''> В значение value подставляется ID той записи, которую надо отредактировать, который ты передаешь по ссылке: edit.php?id=12

Вот так.

Автор: Jubei 14.7.2005, 11:50
Но номер строчки которую надо отредактировать, должен передавать пользователь, как нам тут input type=hidden поможет ? .... или я чтото непонимаю smile

Автор: Mal Hack 14.7.2005, 12:23
Номер строчки передается через параметр ID, вводимый в адресной строке браузера.
В скрипте, который генерирует форму, ты этот ID подставляешь в значение скрытого поля.

Автор: Jubei 14.7.2005, 12:32
Цитата(Mal @ 14.7.2005, 12:23)
Номер строчки передается через параметр ID, вводимый в адресной строке браузера.
В скрипте, который генерирует форму, ты этот ID подставляешь в значение скрытого поля.

Я наверно глюпый ) но я непонимаю, как пользователь сможет выбрать номер строчки, которую нужно выбрать ? что-ли в адресной строке браузера ему нужнобудет вручную вбивать ?
хмм и если можно smile

Автор: 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
Цитата(Jubei @ 14.7.2005, 12:44)
Спасибо большое !  Понял идею. ээ еще маленький вопросик, тогда
<a href="edit.php?id=<?$i?>" > можно ли так вставлять значение  переменной $i в строчку ?

Синтаксис 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 из мускула,а генерируя его циклом
Код

$i=1;
While ($tips=mysql_fetch_array($result))
{
?>
<tr>
<td><font face="Arial, Helvetica, sans-serif"><a href="edit.php?id=<?=$i?>" > <? echo $i; ?> </a></font></td>
<td><font face="Arial, Helvetica, sans-serif"><? echo $tips['tips']; ?></font></td>
<td><font face="Arial, Helvetica, sans-serif"><? echo $tips['RSKnumurs']; ?></font></td>
<td><font face="Arial, Helvetica, sans-serif"><? echo $tips['Serialaisnummurs']; ?></font></td>
<td><font face="Arial, Helvetica, sans-serif"><? echo $tips['Modelanumurs']; ?></font></td>
<td><font face="Arial, Helvetica, sans-serif"><? echo $tips['Tehniskieparametri']; ?></font></td>
<td><font face="Arial, Helvetica, sans-serif"><? echo $tips['opersistema']; ?></font></td>
<td><font face="Arial, Helvetica, sans-serif"><? echo $tips['Datoruvards']; ?></font></td>
<td><font face="Arial, Helvetica, sans-serif"><? echo $tips['Kabinets']; ?></font></td>
</tr>
<?php
$i++;
}

проблема в том что если брать из мускула Id и потереть таблицу то Id не встанут по порядку, а будут продолжать автоувеличиваться даже если одной, двух или даже все строчек уже небудет (реляционные базы данных...) так если так и так сторчку в мускуле потереть, то этот вывод что я показал выше будет мускуловскую строчку номер 5 (4строчку например стерли) писать как 4ую... с этим можно как-то справиться, или только запретив стирать строчки ?

Автор: Mal Hack 14.7.2005, 17:27
Цитата(Jubei @ 14.7.2005, 15:16)
проблема в том что если брать из мускула Id и потереть таблицу то Id не встанут по порядку, а будут продолжать автоувеличиваться даже если одной, двух или даже все строчек уже небудет (реляционные базы данных...) так если так и так сторчку в мускуле потереть, то этот вывод что я показал выше будет мускуловскую строчку номер 5 (4строчку например стерли) писать как 4ую... с этим можно как-то справиться, или только запретив стирать строчки ?

Зачем? ну удалили 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 ставишь инскриментами по такому принципу:


Код

$i=0;
while($i <= 100):
$i++;

$id=$id;

echo"<a hef=edit.php?id=$id>Ссылка</a>";

endwhile;


В таком случае действительно проблема не решиться, но Mal Hack говоти тебе о другом, а именно, id будет служить число, выходящее из базы по такому принципу:

Код

while($row=mysql_fetch_array($resultat))
{
echo "<a href=edit.php?id=$row[id]>Ссылка</a>";
}[


В этом случае, всё должно работать ОК.

Автор: Jubei 15.7.2005, 10:28
Но смотри если я буду брать ID из мускула то при удаление 3ий строчки в нём , 4ая строчка нестанет же 3ей, тоесть вывод будет такой
1ая строчка
2ая строчка
4ая строчка ! smile

Автор: Чих_и_Пых_Пых(MySql_and_PHP) 15.7.2005, 10:56
А что в этом плохого???
На месте третей строчки у тебя же не появиться пробел...

Автор: Jubei 15.7.2005, 11:06
Ну както неоптимистично выглядит таблица с строчками
5ая
12ая
235ая
smile
Добавлено @ 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 соответственно. Спасибо я уже разобрался как лучше сделать. smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)