ПОМОГИТЕ, ПЛИЗ: Ссылки для удаление и редактирование записей

bovkun

Новичок
ПОМОГИТЕ, ПЛИЗ: Ссылки для удаление и редактирование записей

Еще недели не работаю c PHP и MySQL, так что прошу отнеститсь с пониманием и руками сильно не махать... ;)

Ситуация:

1. Cоздал "тренеровичную" базу. Получилось.

2. Создал форму в adduser.html. Получилось.



...
<FORM ACTION="adduser_result.php3" METHOD="POST">
<input type="text" name="nick" size="25">
<input type="text" name="fio" size="25">
<input type="text" name="tel" size="25">
<input type="text" name="notes" size="25">
<INPUT TYPE="submit" VALUE=" Добавить запись! ">
</FORM>
...


3. Информация заполненная там при отправке формы передается adduser_result.php3. Тоже получилось.

PHP:
<?
    $hostname = "localhost";
    $username = "***";
    $password = "***";
    $dbName = "***";

    $userstable = "internet4iki";
   
    MYSQL_CONNECT($hostname,$username,$password) OR DIE("Не могу создать соединение ");
   
   @mysql_select_db("$dbName") or die("Не могу выбрать базу данных "); 
   
   PRINT "Информация добавлена в базу данных!<br>";
   PRINT "<table>";
   PRINT "<tr>";
   PRINT "<td>Логин</td>";
   PRINT "<td>Ф.И.О.</td>";
   PRINT "<td>Телефон</td>";
   PRINT "<td>Примечания</td></tr>";
   PRINT "<tr>";
   PRINT "<td>$nick</td>";
   PRINT "<td>$fio</td>";
   PRINT "<td>$tel</td>";
   PRINT "<td>$notes</td>";
   PRINT "</tr></table>";
   PRINT " <a href=\"inet.php3\">все записи</a>";
   
   $query = "INSERT INTO $userstable VALUES('$nick','$fio', '$tel', '$notes')";
   
   $result = MYSQL_QUERY($query);
   
   PRINT "</table>";
   
   MYSQL_CLOSE();
   ?>



4. Результат поросматривается в inet.php3. Тоже получается...

PHP:
                $hostname = "localhost";
                $username = "***";
                $password = "***";
                $dbName = "***";
                
                $userstable = "internet4iki";
                
                MYSQL_CONNECT($hostname,$username,$password) OR DIE("Не могу создать соединение ");
                
                @mysql_select_db("$dbName") or die("Не могу выбрать базу данных "); 
                
                 $query = "SELECT * FROM $userstable WHERE 1 ORDER BY `nick` ASC LIMIT 0, 100"; 
                
                $result = MYSQL_QUERY($query);
                
                $number = MYSQL_NUMROWS($result);
                
                $i = 0;
              
                IF ($number == 0) {
                PRINT "<CENTER>Список пуст!</CENTER>";
                } ELSEIF ($number > 0) {

PRINT "<table><tr>";
PRINT "<td>Логин</td>";
PRINT "<td>Ф.И.О.</td>";
PRINT "<td>Телефон</td>";
PRINT "<td>Примечания</td>";
PRINT "<td>Изменения</td></tr>";
 
                WHILE ($i < $number){
                $nick = mysql_result($result,$i,"nick");
                $fio = mysql_result($result,$i,"fio");
                $tel = mysql_result($result,$i,"tel");
                $notes = mysql_result($result,$i,"notes");

PRINT "<tr>";
PRINT "<td><a href=\"mailto:$nick";
PRINT "@localhost.com\">$nick</a></td>";
PRINT "<td>$fio</td>";
PRINT "<td>$tel</td>";
PRINT "<td>$notes</td>";

PRINT "<td><a href=\"#\">изменить</a>";
PRINT "  <a href=\"#\">х</a></td>";

PRINT "</tr>";
                $i++;
         }
PRINT "</table>";
PRINT "[ <a href=\"adduser.php3\">добавить</a> ] ";
PRINT "</div>";
         }
         ?>



Теперь 2 задачи вылезло... :mad:

Как мне под каждой ссылкой (см.скринш.здесь )"изменить" и "х" в каждом ряду забить команды для редактирования и удаления конкретной записи в базе?

Буду признателен за помощь!
Заранее всем спасибо!!!

Андрей.
 

HEm

Сетевой бобер
Вот тут вставляешь строчку:
PRINTљ"<td><a href=\"changeuser.php3?nick=$nick\">изменить</a>";
PRINTљ"љљ<a href=\"deleteuser.php3?nick=$nick\">х</a></td>";

тут вопрос не про пхп и мускул а про то как работает передача данных. В данном случае это метод GET, то есть параметры передаются через адресную строку а не через форму (в которой кстати тоже если укажешь <form method=GET> то тоже параметры попадут в адресную строку. Читай про то как рабоатают формы и про протокол http, дорогой.
 

bovkun

Новичок
Вот тут вставляешь строчку:
PRINT "<td><a href=\"changeuser.php3?nick=$nick\">изменить</a>";
PRINT "<a href=\"deleteuser.php3?nick=$nick\">х</a></td>";
Это понятно. Я скорее не совсем правильно сформулировал вопрос...
В том то и вопрос, что именно прописать (какие команды) в самих changeuser.php3 и deleteuser.php3 ? ...или где можно прочитать в руководстве об этом?
 

Рома

был тут
Автор оригинала: bovkun
Это понятно. Я скорее не совсем правильно сформулировал вопрос...
В том то и вопрос, что именно прописать (какие команды) в самих changeuser.php3 и deleteuser.php3 ? ...или где можно прочитать в руководстве об этом?
PHP:
mysql_query("delete from table where nick='$nick'");
header("location:$HTTP_REFERER");
Ну еще можно перед удалением задать вопрос типа "действительно ли вы хотите удалить запись"...
 

bovkun

Новичок
... чего-то не работает :((

Согласен. Вернее, вижу что все верно, этот вариант я пробовал, но он не почемуто не работает :mad: ...

Для удаления из списка записи ссылаюсь на deleteuser.php3. Выглядит таким же образом, как и рекомендовано выше - "<a href=\"deleteuser.php3?nick=$nick\">х</a>

PHP:
<?

$hostname = "localhost";
$username = "***";
$password = "***";
$dbName = "***";
$userstable = "internet4iki";
  
MYSQL_CONNECT($hostname,$username,$password) OR DIE("Не могу создать соединение ");

mysql_query("delete from $userstable where nick='$nick'");
header("location:$HTTP_REFERER");

MYSQL_CLOSE(); 
?>
После клика на ссылку загружается (естественно пустая) сраница deleteuser.php3 и происходит редирект к предыдущей странице. Как бы всё ОК. Но! Отображаемый список ни чем от прежднего не отличается! :confused: Погрешил на кэш. Посмотрел саму базу через phpMyAdmin, так нет же (!) -- удаление не произошло. Чего-то я не догоню...
 

Сытник

Guest
Re: ... чего-то не работает :((

перепиши свою прогу заново. используюй единый стиль оформления переменных и функций, и контроль ошибок на каждом уровне. И тогда всегда будет все ясно...

ЗЫ: По сути: ставить mysql_close() после header() - бред; поставь echo mysql_error() после mysql_query() и посмотри что пишет...; сделай echo "delete from $userstable where nick='$nick'" и глянь - формируется ли запрос правильно...
 

Рома

был тут
Re: ... чего-то не работает :((

Еще один совет

вытащи все это
PHP:
<?
$hostname = "localhost";
$username = "***";
$password = "***";
$dbName = "***";
$userstable = "internet4iki";
MYSQL_CONNECT($hostname,$username,$password) OR DIE
в один файл, а потом инклудь его, потомучто, когда будет много скриптов и понадобится сменить пароль/имя базы/итп, запаришься все файлы править...
 

bovkun

Новичок
Все получилось... и даже больше )) Как избежать удаления всех записей с $nick ?

Автор оригинала: Сытник
ставить mysql_close() после header() - бред; ...
... верно подмечено.

Автор оригинала: Сытник
поставь echo mysql_error() после mysql_query() и посмотри что пишет...; ...
Ё! Ну конечно! Спасибо за совет!
Так и есть! Поставить-то забыл - @mysql_select_db("$dbName") ... !! О чем и получил ответ от echo mysql_error

СУПЕР! Все получилось... и даже больше )) Как избежать удаления всех записей с $nick ? Ведь необходимость удаления записи в моем случае возникла, когда я ввел лишние записи (дубликаты). Т.е. теперь удаляет все здорово, но как удалить именно одну запись из двух?

И еще. Не сочтите за наглость... Как такой же фокус сделать с редактированием, а не удалением конкретной записи?

Автор оригинала: Рома
Еще один совет вытащи все это
PHP:
<?
$hostname = "localhost";
$username = "***";
$password = "***";
$dbName = "***";
$userstable = "internet4iki";
MYSQL_CONNECT($hostname,$username,$password) OR DIE
в один файл, а потом инклудь его ...
Очень согласен!
 

bovkun

Новичок
Порешал задачу просто! А с редактированием как?

... Как избежать удаления всех записей с $nick ? Ведь необходимость удаления записи в моем случае возникла, когда я ввел лишние записи (дубликаты). Т.е. теперь удаляет все здорово, но как удалить именно одну запись из двух?
Вопрос по дубликатам решил. Раньше не обратил внимания на возможность создания уникальных записей в поле. А лишнее - просто руками поудаляю ))

Плиз, подскажите как быть с редактированием?
 

Сытник

Guest
Re: Порешал задачу просто! А с редактированием как?

Автор оригинала: bovkun
Вопрос по дубликатам решил. Раньше не обратил внимания на возможность создания уникальных записей в поле. А лишнее - просто руками поудаляю ))
Плиз, подскажите как быть с редактированием?
выбираешь запись по id, потом выводишь форму, с помощью которой ты создал эту запись. только в эту форму передаешь существующие значения через value=$php_var. Еще немного модификаций - и заработает...
 

Ramzes

Новичок
Сытник Тебе правильно сказал:
перепиши свою прогу заново. используюй единый стиль оформления переменных

Допустим у тебя есть фаил update.php
PHP:
if (!$cmd) $cmd = "";
switch ($cmd)
{
   case "update":
      // твои запросы к БД и действия
      $q = "update set ..."
   break;

   case "add":
      $q = "insert into... "
   break;

   case "delete":
      $q = "delete from... where id = ".intval($id);
   break;

   case "":
      exit(header("location: ".$HTTP_REFERER));
   break;
}
ну и фаил edit.php где выводишь формы, ссылки и передаешь переменные (как организовать сам догадывайся ;) ):
<!-- Добавить -->
input type=hidden name=cmd value=add
input type=text name=user[name] value=
input type=text name=user[address] value=

<!-- удалить -->
<a href=./update.php?cmd=delete&id=
PHP:
<?=$id?>
>удалить</a>

вот и все...
 

Сытник

Guest
Ramzes, со switch перемудрил слегка. Во-первых блок if не закрыл (да он и не нужен) здесь, а во-вторых вместо case "": лучше юзать default:

а так согласен - я всегда в подобных случаях схему со switch юзаю, удобно...
 

tony2001

TeaM PHPClub
Автор оригинала: Сытник
Ramzes, со switch перемудрил слегка. Во-первых блок if не закрыл (да он и не нужен) здесь, а во-вторых вместо case "": лучше юзать default:
не нужен.
и закрывать его не нужно.
default - таки да более верно.

а так согласен - я всегда в подобных случаях схему со switch юзаю, удобно...
аналогично.
 
Сверху