Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 06.06.2015
Сообщений: 4

Неправильно работает удаление записей

02.04.2016, 16:51. Показов 790. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Есть несложный код для добавления и удаления записей из БД, но когда нажимается кнопка "Удалить" _POST передает в любом случае только последний id и удаляется последняя запись. Не понимаю в чем проблема и как сделать чтобы каждая кнопка удалить соответствовала своей записи. Помогите пожалуйста, а то сам уже не знаю на что грешить.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
<?php
 
echo <<<_END
<html>
<head><title>Cats in zoo</title></head><body>
_END;
 
//подключение и настройка БД
require_once 'login_servers.php';
$db_server = mysql_connect($db_hostname, $db_username, $db_password);
 
if(!$db_server) die("Невозможно подключиться к MySQL: ". mysql_error());
 
mysql_select_db($db_database) or die("Невозможно выбрать базу данных: ". mysql_error());
 
 
//создание или проверка существования таблицы
$query_isset = "SHOW TABLES LIKE 'cats'";
 
if(!mysql_query($query_isset))
{
$query = "CREATE TABLE cats (
            id  SMALLINT NOT NULL AUTO_INCREMENT,
            family VARCHAR(32) NOT NULL,
            name VARCHAR(32) NOT NULL,
            age TINYINT NOT NULL,
            PRIMARY KEY (id)
            )";
 
$result = mysql_query($query);
if(!$result) die ("Сбой при доступе к базе данных". mysql_error());
}
 
 
 
 
if(isset($_POST['family']) &&
    isset($_POST['name']) &&
    isset($_POST['age']))
{
    $family = get_post('family');
    $name = get_post('name');
    $age = get_post('age');
    if (intval($age))
        {
            $query_add = "INSERT INTO cats VALUES(NULL, '$family', '$name', '$age')";
            $result_add = mysql_query($query_add);
            if(!$result_add) die("Сбой добавления данных в базу данных".mysql_error());
        }
    else {echo "Невозможно добавить данные. Укажите возраст цифрами.";}
}
 
 
//удаление данных с таблицы
if(isset($_POST['delete']) && $_POST['id'] != '')
{
    $id = get_post('id');
    $query_delete = "DELETE FROM cats WHERE id='$id' LIMIT 1";
    if(!mysql_query($query_delete, $db_server)) die("Сбой при удалении с базы данных: ".mysql_error());   
}
 
 
echo"<pre>Состав POST: "; 
print_r($_POST); 
echo "</pre><hr>";
 
//добавление данных в таблицу
echo <<<_END
<form action="cats.php" method="POST">
<table border="1"><tr><th>Family</th><th>Name</th><th>Age</th></tr>
<tr>
<td><input type="text" name="family" maxlength="20" /></td>
<td><input type="text" name="name" maxlength="20" /></td>
<td><input type="text" name="age" maxlength="3" /></td>
</tr>
<tr><td colspan="3" align="center"><input type="submit" value="Добавить"></td></tr>
</table>
</form><hr />
_END;
 
 
//просмотр данных таблицы
$query_show = "SELECT * FROM cats";
$result_show = mysql_query($query_show);
if(!$result_show) die ("Сбой доступа к базе данных".mysql_error());
$rows_show = mysql_num_rows($result_show);
echo "<form action='cats.php' method='POST'><table border='1'><tr><th>ID</th><th>Family</th><th>Name</th><th>Age</th></tr>";
for($s = 0; $s < $rows_show; ++$s)
{
$row_show = mysql_fetch_row($result_show);
echo "<tr>";
for($p = 0; $p < 4; ++$p) echo "<td>$row_show[$p]</td>";
echo "<td><input type='hidden' name='delete' value='yes'><input type='hidden' name='id' value='$row_show[0]'><input type='submit' value='Удалить'></td></tr>";   
}
echo "</table></form><hr />";
 
 
//просмотр свойств таблицы
$query_table = "DESCRIBE cats";
$result_table = mysql_query($query_table);
if(!$result_table) die ("Сбой при доступе к базе данных :". mysql_error());
$rows = mysql_num_rows($result_table);
echo "<table border='1'><tr><th>Column</th><th><Type></th><th>Null</th><th>Key</th></tr>";
for($j=0; $j < $rows; ++$j)
{
$row = mysql_fetch_row($result_table);
echo "<tr>";
for($k=0; $k < 4; ++$k) echo "<td>$row[$k]</td>";
echo "</tr>";
}
echo "</table></body></html>";
 
 
function get_post($var) 
{ 
return mysql_real_escape_string($_POST[$var]); 
} 
?>
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.04.2016, 16:51
Ответы с готовыми решениями:

Почему неправильно работает удаление символов из строки?
const g=; var s : string; i : integer; d : integer; begin readln (s); d := length (s); while i&lt;d do begin

Не работает удаление записей в БД
вопрос возник насчет удаления.при нажатии на кнопку раотает редактирование и добавлени записей в таблицу в удаление нет.как его сделать...

MySQL: не работает обновление и удаление записей. Найти ошибку в коде
Господа, немогу понять что делаю не так. Ткните пожалуйста поправкой в код. Инсёрт делаю так - РАБОТАЕТ private void...

7
 Аватар для UchihaSV
285 / 234 / 113
Регистрация: 08.06.2013
Сообщений: 725
02.04.2016, 17:03
Denver23, Потому что у вас все инпуты для удаления с одинаковым названием и в одной форме.
Нужно для каждого свою форму делать.
1
 Аватар для romchiksoad
1957 / 796 / 89
Регистрация: 03.11.2009
Сообщений: 3,066
Записей в блоге: 2
02.04.2016, 17:03
Denver23, у Вас одна форма для всех записей и для каждой одинаковое имя id. Как вариант, если не особо заморачиваться, можно для каждой записи (строки таблицы) сделать свою форму, т.е. внести открывающий и закрывающий теги form в цикл for.
1
0 / 0 / 0
Регистрация: 06.06.2015
Сообщений: 4
02.04.2016, 17:12  [ТС]
UchihaSV, ну название там и должно быть одинаковым, я же потом проверяю именно существование delete и не пустой id. А проблема действительно в том, что форма одна на все кнопки, поместил форму внутрь цикла и заработало правильно. Спасибо за оперативные подсказки.
0
 Аватар для romchiksoad
1957 / 796 / 89
Регистрация: 03.11.2009
Сообщений: 3,066
Записей в блоге: 2
02.04.2016, 17:14
Denver23, именем для input`а может быть и массив (id[]), но тогда и на сервере его нужно обрабатывать как массив,а не строку, т.е. $_POST['id'][0]
0
0 / 0 / 0
Регистрация: 06.06.2015
Сообщений: 4
02.04.2016, 17:29  [ТС]
romchiksoad, разве это не усложнит лишний раз код?
0
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
02.04.2016, 18:54
UchihaSV и romchiksoad походу вам говорят про кнопку удаления помеченных записей. Если нужен функционал кнопки удаления отдельной записи, можете просто кнопку-ссылку использовать, а если команда передается методом POST, можете на JS делать пометку и активировать запрос через ту же общую кнопку удаления.

Добавлено через 2 минуты
Смысл в том, чтобы не лепить отдельную форму для каждой записи.
0
0 / 0 / 0
Регистрация: 06.06.2015
Сообщений: 4
02.04.2016, 20:23  [ТС]
miketomlin, да нет, я сделал отдельную форму для каждой кнопки и заработало как положено, у меня изначально же была одна форма на весь цикл, поэтому оно и возвращало только последнее значение _POST.

Да, я понимаю, изначально я и делал одну форму чтобы не лепить для каждой записи отдельную.
Спасибо за подсказку, но я пока практикуюсь только с PHP+MySQL без JS, до него очередь дойдет чуть позже
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.04.2016, 20:23
Помогаю со студенческими работами здесь

Проверьте задачку по циклам, неправильно работает. [думаю что неправильно]
Спасибо что решили зайти. Задание выгладит так: http://*******/PW95p А результат выплнения: http://*******/KwhuS #include...

Неправильно работает цикл for, и функции работают неправильно
1) Неправильно работает цикл for(k=0...). Входит только 1 раз, дальше вылетает. Делал пошаговую отладку на проверку значения k. Выдаёт...

База данных на основе массива записей: добавление, удаление, поиск записей
Комрады, учусь асму, а некоторые моменты не осиливаю :( задача в реализовании некой базы данных с записями &quot;фамилия&quot;,...

Удаление всех записей из DataGridView и добавление записей
Всем доброго времени суток. Столкнулся со следующей проблемой: написал код на удаление строк DataGridView. Строки удаляет но не все, а...

Формы: добавление новых записей и удаление записей
у меня следующая форма (приложение) добавила кнопки добавление новых записей, удаление записей, вроде работает, нужно ли для них писать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru