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

Передача параметров для построчного удаления строк из таблицы

03.05.2019, 21:04. Показов 1129. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Заранее прошу прощения за глупый вопрос.
У меня имеется файл для удаления строки из таблицы по ID, delete.php.
Я передаю ему параметры: $id, $table, $redirect.
PHP/HTML
1
2
3
4
5
a href="lib_modules/delete/delete_contracts.php?
id_cont=<?php echo $item['id_cont']?>&
table=contracts&
redirect=http://factory/contracts
">Удалить</a>
Но у меня вылетают ошибки:
Warning: mysqli_real_escape_string() expects exactly 2 parameters, 1 given in F:\OSPanel\domains\Factory\lib_modules\d elete\delete_contracts.php on line 6

Warning: mysqli_query() expects parameter 1 to be mysqli, null given in F:\OSPanel\domains\Factory\lib_modules\d elete\delete_contracts.php on line 11

Warning: mysqli_error() expects parameter 1 to be mysqli, null given in F:\OSPanel\domains\Factory\lib_modules\d elete\delete_contracts.php on line 11
Ошибка


Код файла удаления:
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
include 'old_connection.php';
if(isset($_GET['id']) && isset($_GET['table']))
{   
    $id = (int) $_GET['id'];
    $table = mysqli_real_escape_string($_GET['table']);
    $redirect = (isset($_GET['redirect'])) ? $_GET['redirect'] : "http://адрес для редиректа по умолчанию";
 
    $query ="DELETE FROM `{$table}` WHERE `id` = {$id}";
 
    $result = mysqli_query($link, $query) or die("Ошибка " . mysqli_error($link)); 
    mysqli_close($link);
    
    echo "<h1>Запись успешно удалена</h1>";
 
 
    //Ожидание 1 секунды и перенаправление пользователя
    header('Refresh: 1; url='.$redirect);
}
?>
Заранее всем спасибо!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.05.2019, 21:04
Ответы с готовыми решениями:

Передача параметров процедуры для создания и удаления ключей
Как передать параметр процедуры для создания/удаления ключей? Данный запрос &quot;спотыкается&quot; на параметрах при удаление/создания...

JqGrid, что должно быть в серверной части для кнопки удаления строк таблицы?
Доброго времени суток! Помоги пожалуста найти решение!!!! У меня возникла проблема с написанием серверной части для кнопки удаления ...

Yii 2 - получение таблицы из БД и передача GET-параметров
Почему данные при получении из БД представляются в виде: app\models\Add Object ( =&gt; Array ( =&gt;...

6
1310 / 1002 / 232
Регистрация: 01.10.2018
Сообщений: 3,896
03.05.2019, 21:17
При использовании процедурного синтаксиса mysqli_real_escape_string нужно еще и сам объект-подключение передавать в функцию. И я же вам уже писал, что экранирование в данном случае не поможет защититься от инъекции. Оно предназначено для значений, а не для имен.

Добавлено через 1 минуту
Вам текст ошибки ясно дает понять, в чем проблема
1
5 / 5 / 3
Регистрация: 29.10.2015
Сообщений: 103
03.05.2019, 21:24  [ТС]
estic, извините за глупую просьбу, но не могли бы Вы объяснить мне, несмышленому, как удалять строки из таблицы POST-запросом...
или можете ткнуть меня носом в статью как это делается)
0
1310 / 1002 / 232
Регистрация: 01.10.2018
Сообщений: 3,896
03.05.2019, 21:33
Если без JS, нужно делать отдельную форму или кнопку с formaction для каждой строки, либо классика - форма с чекбоксами и одной кнопкой удаления. Запросы можно отлавливать, например, по $_SERVER['REQUEST_METHOD'].
1
5 / 5 / 3
Регистрация: 29.10.2015
Сообщений: 103
03.05.2019, 21:37  [ТС]
estic, не могли бы Вы немного больше рассказать про метод с чекбоксами? Или где-то есть уже материал на эту тему ?

Мой код страницы для выведения таблицы:
PHP/HTML
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
<script type="text/javascript">
$(document).ready(function()
{
    // Сортируем по цене(2-я колонка, 0 - сортировка по возрастанию, 1 - по убыванию)
    $("table").tablesorter({sortList:[[0,1]], widthFixed:true, widgets:['zebra']});
    // size - количество строк в таблице, по умолчанию
    $("table").tablesorterPager({container:$("#tablesorterPager"), size:5});
});
 
    function disp(form) {
        if (form.style.display == "none") {
            form.style.display = "block";
        } else {
            form.style.display = "none";
        }
    }
</script>
 
    <head>
  <link href="css/add_table.css" rel="stylesheet">
    </head>
 
<h1 class="page_h"><?=$name_page?></h1>
<p align="center"><strong>Доступное сырье</strong></p>
<table cellspacing="1" class="tablesorter" style="margin: 0 auto;width:60%">
<thead>
    <tr align="center">
        <th>Код сырья</th>
        <th>Краткое описание</th>
        <th>Количество</th>
        <th>Код поставщика</th>
    </tr>
</thead>
<tfoot>
    <tr align="center">
        <th>Код сырья</th>
        <th>Краткое описание</th>
        <th>Количество</th>
        <th>Код поставщика</th>
    </tr>
</tfoot>
<tbody>
<?foreach($content as $item):?>
<tr align="center">
<td><?=$item['id']?></td>
<td><?=$item['description']?></td>
<td><?=$item['quantity']?></td>
<td><?=$item['id_prov']?></td>
</tr>
<?endforeach;?>
</tbody>
</table>
<div style="margin:0 auto;width:60%">
<div id="tablesorterPager" class="tablesorterPager" style="margin:0 auto;width:59%">
    <form style="margin:0">
    <img src="<?=DIR_CSS?>icons/first.png" class="first" alt="">
    <img src="<?=DIR_CSS?>icons/prev.png" class="prev" alt="">
    <input type="text" class="pagedisplay" alt="">
    <img src="<?=DIR_CSS?>icons/next.png" class="next" alt="">
    <img src="<?=DIR_CSS?>icons/last.png" class="last" alt="">
    <select class="pagesize">
        <option selected="selected" value="5">5</option>
        <option value="10">10</option>
        <option value="20">20</option>
        <option value="30">30</option>
        <option value="40">40</option>
        <option value="50">50</option>
    </select>
    </form>
</div>
</div>
<br /><br />
 
<input type="button" value="Добавить данные" class="button01" onclick="disp(document.getElementById('add'))" />
 
<form method="post" name="1" id=add style="display: none;">
<table  class="simple-little-table" border="1" align="center" style="margin: 0 auto;width:30%">
<tr>
<td colspan="2" height="50"><h3><center><b>Добавыть данные</b></center></h3></td>
</tr>
    <tr>
        <td height="50">Код сырья:</td>
        <td height="50"><input type="text" name="id"/></td></tr>
 
        <td height="50">Описание:</td>
        <td height="50"><input type="text" name="description"/></td></tr>
 
        <td height="50">Количество:</td>
        <td height="50"><input type="text" name="quantity"/></td></tr>
 
        <td height="50">Код поставщика:</td>
        <td height="50"><input type="text" name="id_prov"/></td></tr>
    <tr>
        <td height="50" colspan="2">
        <input class="button01" type="submit" name="dz11" value="Додати" />   
        <td>
    </tr>
 
</table>
</form>
 
<?php
// Подключаем БД
include 'old_connection.php';
if(isset($_POST['dz11']))
{
$id=strip_tags(trim($_POST['id']));
$description=strip_tags(trim($_POST['description']));
$quantity=strip_tags(trim($_POST['quantity']));
$id_prov=strip_tags(trim($_POST['id_prov']));
 
 
 
mysql_query("INSERT INTO avalible_raw(id, description, quantity, id_prov) VALUES('$id','$description','$quantity','$id_prov')");
mysql_close();
header("Refresh:0");
}
?>
0
1310 / 1002 / 232
Регистрация: 01.10.2018
Сообщений: 3,896
03.05.2019, 22:26
Много писать. К тому же этот метод в общем рассчитан на массовое удаление. Попробуйте сделать построчное удаление, т.е. по одной строке. Чтобы было все по канонам, сделайте по GET /table/id страницу с простой формой подтверждения, а удаляйте уже, например, по POST /table/id с возвратом к списку путем обычного перенаправления (можно через промежуточную страницу с сообщением о результате).

Добавлено через 3 минуты
strip_tags, trim, mysql_, header Refresh - без комментариев

Добавлено через 1 минуту
При обработке POST-запроса ничего выводить не нужно, а у вас сначала вывод, а потом уже проверка
0
133 / 118 / 34
Регистрация: 04.04.2018
Сообщений: 593
04.05.2019, 00:28
nikolaj008,
Где $rs['id'] - это ид записи, в цикле таблицу, у Вас там foreach.
PHP/HTML
1
<td><span><input type='checkbox' name='checks[]' class='check' value='".$rs['id']."' required/></td>
Это добавите в таблицу, где у Вас заголовки
HTML5
1
<td>Все <input type="checkbox" id="checkbox"></td>
Это в конце страницы
JavaScript
1
2
3
4
5
6
7
8
  $('#checkbox').click(function(){
 
    if ($(this).is(':checked')){
        $('#controls input:checkbox').prop('checked', true);
    } else {
        $('#controls input:checkbox').prop('checked', false);
    }
});
Это обработчик
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 if(!empty($_POST['checks'])){
        $count = count($_POST['checks']); // получаем кол-во
        for($i=0; $i < $count; $i++)
        {
            $mass .= ($check[$i] . " "); // тут можно любой разделитель
        }
        $exp = explode(' ',$mass);  // получаем массив строк
        $arr = array_diff($exp, array('')); // чистим, если имеются пустые значения
        $implode = implode(',',$arr); // получаем строку типа 1,2,3
  // удаляем
    $res = mysqli_query($link, 
                                   "DELETE FROM
                                    `table`
                                     WHERE
                                      `id` IN(".$implode.")
                                      ");
    }
Таблица должна быть в блоке с
HTML5
1
id="controls"
Добавлено через 1 минуту
Кнопку не забудьте к форме добавить
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.05.2019, 00:28
Помогаю со студенческими работами здесь

Передача строк в функцию со сменным количеством параметров
Нужно передать строки в функцию f со сменным количеством параметров, передача должна остановиться на указателе NULL. В функции нудно...

Переиндексация строк таблицы после удаления записи
Привет. форумчане! Мне необходимо, когда из БД данные выстраиваются в столбик, в каждой строчке была нумерация. Причем в каждой...

Использование параметров в пакетном файле для удаления файлов
Здравствуйте! Почему батник вот так работает: @echo off chcp 1251&gt;nul set /p tmpbak1=&quot;Введите путь: &quot; set /p...

После удаления строк из таблицы mySQL не сбрасывает счетчик id (который на автоповышении). Как быть?
Нужно ли вообще его сбрасывать (имхо, без сброса навигация будет крайне затруднена, как мне кажется), и если &quot;да&quot;, то как? А то...

Пакетный файл для создания и удаления групп пользователей с чтением параметров из текстового файла
Всем добрый день. У меня возникла проблемка по написанию батника. Он должен создавать и удалять группы пользователей. Название группы и...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru