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

Внесение изменений в БД

12.05.2023, 13:18. Показов 630. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, я новичок в этом деле, помогите со следующей проблемой. Пишу код админ-панели. С помощью цикла вывожу весь контент, который содержится в БД. Соответственно далее необходимо внести изменения. Но проблема в том, что для реализации я использую id, который изменяется при каждом цикле. И получается, что изменения вносятся только в последнюю запись.

Code
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
<?php
    session_start(); 
    require "blocks/head.php";
?>
<body>
    <h3 align="center">Выберите раздел для редактирования </h3>
    <?php
    if(isset($_GET['page_title'])) 
    $page_title=$_GET['page_title'];
    ?>
    <table class="hea3" cellspacing="0" cellpadding="0" align="center">
        <tr>
            <?php
                $result = mysqli_query($link, "SELECT header_nav_link  FROM `site` WHERE header_nav_link IS NOT NULL");
                while($row = mysqli_fetch_assoc ($result)){
                    echo '
                        <td class="hea4"><a class="hea5" align="center" style="color:black" href="admin.php?page_title='.$row["header_nav_link"].'">'.$row["header_nav_link"].'</a></td>
                    ';
                }
            ?>
        </tr>
    </table>
$sql = mysqli_query($link, "SELECT id, page, content_text FROM `site` WHERE page='".$page_title."' AND content_text IS NOT NULL;");
            while($record = mysqli_fetch_assoc ($sql)){ 
                $id_text=$record["id"];
                echo '
                    '.$id_text.'
                    <form action="admin.php" method="post">
                        <table width="100%" align="center">
                            <tr>
                                <td align="center">Редактирование текста страницы</td>
                            </tr>
                            <tr>
                                <td align="center"><textarea cols="80" rows="20" name="content_text">'.$record["content_text"].'</textarea></td>
                            </tr>
                        </table>
                ';
            }
        $sql = mysqli_query($link, "SELECT id, page, content_image FROM `site` WHERE page='".$page_title."' AND content_image IS NOT NULL;");
            while($record = mysqli_fetch_assoc ($sql)){ 
                $id_image=$record["id"];
                echo '
                    '.$id_image.'
                    <form action="admin.php" method="post">
                        <table width="100%" align="center">
                            <tr>
                                <td align="center">Редактирование изображения страницы</td>
                            </tr>
                            <tr>
                                <td align="center"><textarea cols="80" rows="20" name="content_image">'.$record["content_image"].'</textarea></td>
                            </tr>
                        </table>    
                ';
            }
if (isset($_POST['save'])) {
            if (isset($_POST['content_text'])) {
                $my_text = strval($_POST['content_text']);
                $sql ="UPDATE `site` SET content_text='".$my_text."' WHERE page='".$_SESSION['page']."' AND id='".$_SESSION['id_text']."';"; 
                $result = mysqli_query($link, $sql);
            };
            if (isset($_POST['content_image'])) {
                $my_image = strval($_POST['content_image']);
                $sql ="UPDATE `site` SET content_image='".$my_image."' WHERE page='".$_SESSION['page']."' AND id='".$_SESSION['id_image']."';"; 
                $result = mysqli_query($link, $sql);                
            };
        }
        if(isset($_GET['page_title'])) {
            echo '
                <table width="100%" align="center">
                    <tr>
                        <td align="center"><input name="save" type="submit" value="Сохранить"></td>
                    </tr>
                </table>
            ';
        }
    ?>
 
</body>
</html>
<?php 
    $_SESSION['page']= $page_title;
    $_SESSION['id_text']= $id_text;
    $_SESSION['id_image']= $id_image;
?>
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.05.2023, 13:18
Ответы с готовыми решениями:

Внесение пользователем изменений
Есть таблица, надо чтоб каждый пользователь мог изменить информацию ячейки( ТЕКСТ, ИЗОБРАЖЕНИЕ) , и чтоб это все сохранилось! Как сделать???

Внесение изменений в таблицу MySql
Здравствуйте, прошу помочь в следующем вопросе. Есть таблица в MySql INSERT INTO `orders` (`id`, `phone`, `name`, `date`, `time`,...

Поиск совпадений и внесение изменений в MySQL
Имеется две таблицы! Нужно взять название продукта с таблицы 2(столбец product), и найти его в таблице 1(столбец name), если они совпадаю,...

8
1315 / 1007 / 232
Регистрация: 01.10.2018
Сообщений: 3,910
12.05.2023, 14:04
Редактировать и сохранять нужно по id, например:
GET /pages/1 - редактировать страницу с id=1;
POST /pages/1 - сохранить (обновить) страницу с id=1.

(Идентификаторы могут быть и символьные или даже в одних "разделах" числовые, а в других символьные.)

Добавлено через 1 минуту
Код пугающий. Рекомендую сначала изучить основы MVC и т.п., прежде чем писать админ-панель.
0
0 / 0 / 0
Регистрация: 12.05.2023
Сообщений: 4
12.05.2023, 14:34  [ТС]
Так если я пропишу, что изменения необходимы для записи id=1 то у меня изменится только эта запись. А мне необходимо, чтобы после того, как я в текстовых областях изменил сам контент и нажал кнопку "сохранить" внизу страницы, данные изменились во всех. А сейчас получается, что изменяется только в последней записи цикла, так как в цикле постоянно изменяется значение переменной $id_text
0
1315 / 1007 / 232
Регистрация: 01.10.2018
Сообщений: 3,910
12.05.2023, 15:03
Цитата Сообщение от Евген1999 Посмотреть сообщение
А мне необходимо, чтобы после того, как я в текстовых областях изменил сам контент и нажал кнопку "сохранить" внизу страницы, данные изменились во всех.
Обычно так не делается. Даже если вы редактируете непосредственно список, выполняются отдельные AJAX-запросы по каждой записи (или даже полю записи).

Или передавайте данные одним HTTP-запросом и при обработке выполняйте отдельные SQL-запросы. Но, повторяю, обычно так не делается. Плохая практика.

Добавлено через 1 минуту
Если нужно внести одно и то же содержимое в разные записи, можно использовать WHERE id IN(). Но я не увидел такой нужды в ваших сообщениях.
0
 Аватар для Дух системы
75 / 58 / 20
Регистрация: 01.10.2009
Сообщений: 208
12.05.2023, 15:09
объединил формы в одну + добавил операции по id, а не page='".$_SESSION['page']."' AND id='".$_SESSION['id_image']."'
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
<?php
session_start(); 
require "blocks/head.php";
echo '<body><h3 align="center">Выберите раздел для редактирования</h3>';
if(isset($_POST['save']))
{
    $_bads=array('http'=>'','union'=>'','select'=>'','delete'=>'','from'=>'','where'=>'','values'=>'','truncate'=>'','{'=>'','}'=>'','"'=>'&quot;','`'=>'&acute;',"'"=>'&prime;');
    foreach($_POST AS $k => $v)
    {
        foreach($_bads AS $b => $u)
        {
            $_POST[$k]=str_replace($b,$u,$_POST[$k]);//Убираем то, что может помешать сохранению
        }
    }
    mysqli_query($link,'UPDATE `site` SET `content_text`="'.strval($_POST['content_text']).'", `content_image`="'.strval($_POST['content_image']).'" WHERE `id`="'.$_POST['page_id'].'";');             
}
echo '<table class="hea3" cellspacing="0" cellpadding="0" align="center"><tr>';
$tr=0;
$q=mysqli_query($link, "SELECT `id`,`header_nav_link`  FROM `site` WHERE `header_nav_link` IS NOT NULL");
while($r=mysqli_fetch_array($q))
{
    $tr++;
    if($tr > 4)
    {
        echo '</tr><tr>';//для эстетики
        $tr=0;
    }
    
    echo '<td class="hea4"><a class="hea5" align="center" style="color:black" href="admin.php?page_title='.$r["id"].'">'.$r["header_nav_link"].' [ID:'.$r['id'].']</a></td>';//изменил header_nav_link на id, тк думаю что id все же primary
}
echo '</tr></table>';
if(isset($_GET['page_title'])) 
{
    $page_title=$_GET['page_title'];
    $frm=[];
    $q=mysqli_query($link,'SELECT * FROM `site` WHERE `id`="'.$page_title.'";');//так же вместо page ставим id
    if(mysqli_num_rows($q) > 0)
    {
        while($r=mysqli_fetch_array($q))
        {
            $frm[$r['id']]=['page'=>$r['page'],'content_text'=>$r['content_text'],'content_image'=>$r['content_image']];//собираем массив для построения формы
        }
    }
    foreach($frm AS $id => $r)
    {
        echo '<form action="admin.php" method="post">';//собираем форму
        echo '<table width="100%" align="center">';
        echo '<input type="hidden" name="page_id" value="'.$id.'">';
        echo '<tr><td align="center">Редактирование страницы '.$page_title.'</td></tr>';
        echo '<tr><td align="center">Редактирование текста</td></tr>';
        echo '<tr><td align="center"><textarea cols="80" rows="20" name="content_text">'.$r["content_text"].'</textarea></td></tr>';
        echo '<tr><td align="center">Редактирование изображения</td></tr><tr><td align="center"><textarea cols="80" rows="20" name="content_image">'.$r["content_image"].'</textarea></td></tr>';
        echo '<tr><td align="center"><input name="save" type="submit" value="Сохранить '.$id.'"></td></tr>';
        echo '</table></form>';
    }
}
echo '</body></html>';
/*
не знаю зачем тут это
$_SESSION['page']= $page_title;
$_SESSION['id_text']= $id_text;
$_SESSION['id_image']= $id_image;
*/
?>
0
0 / 0 / 0
Регистрация: 12.05.2023
Сообщений: 4
12.05.2023, 15:58  [ТС]
Спасибо большое за ответ, код работает. Но все же он работает по тому же принципу (берет последние записи из БД). У меня же все же идея заключалось в том, что при сравнении столбцов в БД header_nav_link и page (см. картинку) он выдает все результаты. Это для того, чтобы в дальнейшим можно было добавлять дополнительный текст и картинки просто прописывая в page, что это относится к "о нас". Возможно я неправильно все это организовываю и делаю, а также не совсем точно объясняю. Если получится, помогите пожалуйста. Но все равно уже спасибо
Миниатюры
Внесение изменений в БД  
0
1315 / 1007 / 232
Регистрация: 01.10.2018
Сообщений: 3,910
12.05.2023, 16:33
Цитата Сообщение от Евген1999 Посмотреть сообщение
Возможно я неправильно все это организовываю и делаю, а также не совсем точно объясняю.
Да. В последний раз пишу: редактируйте записи страниц по одной. Для идентификации можно использовать и символьные идентификаторы (we_page.php, etc.). Рабочий пример: hyde.pageshop.ru/post/introducing-hyde (последняя часть пути - символьный идентификатор редактируемой страницы; сама страница доступна по адресу /introducing-hyde).
0
0 / 0 / 0
Регистрация: 12.05.2023
Сообщений: 4
12.05.2023, 16:56  [ТС]
Спасибо большое за совет, постараюсь переделать. А насчёт организации данных в самой БД (фото выше), правильно ли я понимаю и делаю? Просто в открытых источниках нет точных примеров, а в тех, что есть примерно так и показано
0
1315 / 1007 / 232
Регистрация: 01.10.2018
Сообщений: 3,910
12.05.2023, 17:38
Цитата Сообщение от Евген1999 Посмотреть сообщение
А насчёт организации данных в самой БД (фото выше), правильно ли я понимаю и делаю?
Для начала пойдет. Для единообразия главную лучше идентифицировать пустым символьным идентификатором (т.е. состоящим из пустой строки), имя файла обработчика/шаблона и символьный идентификатор лучше различать (т.е. использовать разные поля), чтобы можно было делать так (часть полей убрал):
MySQL
1
2
3
4
5
6
7
8
9
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
 
INSERT INTO `site_categories` (`post`, `id`, `title`, `category`, `module`) VALUES
(0, '', 'Home', 0, 'posts'),
(1, 'about', 'About', 0, 'page'),
(2, 'atom.xml', 'Atom', 0, 'atom'),
(3, 'whats-jekyll', 'What''s Jekyll?', 1, 'post'),
(4, 'example-content', 'Example content', 1, 'post'),
(5, 'introducing-hyde', 'Introducing Hyde', 1, 'post');
В общем случае содержимое каждой страницы, конечно, может храниться в разных записях одной или разных таблиц. Причем может быть много разных "основных таблиц страниц", например отдельно могут существовать таблица "статических" страниц, таблица постов, таблица категорий и т.д.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.05.2023, 17:38
Помогаю со студенческими работами здесь

Внесение изменений в УТ 11
Привет. Сейчас работаю с УТ 10.3 и модификация проблем особых не вызывает но фирма переходит на УТ 11 и первые попытки ее изменения...

Внесение изменений GridView в БД
Здравствуйте. Если не трудно подкиньте идею, как это реализовать: Есть GridView и MSSQL. Хочу, чтобы при изменении GridView внеслись...

Внесение изменений в проект
Коллеги, здравствуйте! Прошу помочь в решении небольшой проблемы. Есть локальный проект на django, который крутится на nginx, ОС linux....

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

Внесение изменений в прошивку
Здравствуйте! Задача: необходимо реализовать возможность изменения некоторых параметров (например, константу) внутри прошивки...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru