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

Не получается реализовать редактирование статьи

13.04.2021, 12:50. Показов 731. Ответов 11

Студворк — интернет-сервис помощи студентам
Добрый день, не получается реализовать редактирование статей.
Имеется файл edit.php, который получается id статью из index.php и выводит столбцы в поля, получилось вывести, только через foreach, который выводит все данные таблицы, но после редактирования, выдает ошибку:
"Fatal error: Uncaught ArgumentCountError: Too few arguments to function articlesEdit(), 1 passed in \edit.php on line 20 and exactly 3 expected in model\articles.php:16 Stack trace: #0 \edit.php(20): articlesEdit() #1 {main} thrown in \model\articles.php on line 16"
Подскажите, как можно исправить ошибку и заставить редактировать выбранную статью?
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
<?php
include_once('model/articles.php');
 
    $fields = ['title' => '', 'content' => ''];
    $err = '';
    
    $articles = articlesAll();
    $id = $_GET['id'] ?? '';
 
    if($_SERVER['REQUEST_METHOD'] === 'POST'){
        $fields['title'] = trim($_POST['title']);
        $fields['content'] = trim($_POST['content']);
        
        if($fields['title'] === '' || $fields['content'] === ''){
            $err = 'Заполните все поля!';
        }
        else{
            articlesEdit($fields);      
            header('Location: index.php');
            exit();
        }       
    }
 
?>
 
<div class="form">
    <?foreach ($articles as $post): ?>
        <form method="post">
            Title:<br>
            <input type="text" name="title" value="<?=$post['title'];?>"><br>
            Content:<br>
            <textarea name="content"><?=$post['content']?></textarea><br>
            <button>Send</button>
            <p><?=$err?></p>
        </form>
    <?endforeach;?>
</div>
функция articlesEdit(), которая содержит запрос UPDATE к базе
PHP
1
2
3
4
5
 function articlesEdit(int $id, string $title, string $content) : array{
        $sql = "UPDATE articles SET title = '$title', content = '$content' WHERE id_article = $id";
        $query = dbQuery($sql);
        return $query->fetch();
    }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.04.2021, 12:50
Ответы с готовыми решениями:

Редактирование статьи в форме
Всем привет, столкнулся такой проблемой, не выводится форма редактирования выбранной статьи, т.е. сначала выводится список статей, при...

Редактирование статьи через админку сайта
Народ подскажите! Есть код вывода статей: &lt;?php while ($full = mysqli_fetch_array($all)) { echo...

Проверка уникальности названия статьи при редактирование
Здравствуйте. Собственно вопрос в название темы, немного поясню. Сейчас в качестве тренировки делаю простенький динамический сайт, без бд...

11
Невнимательный
 Аватар для ft4l
3107 / 1277 / 358
Регистрация: 08.02.2013
Сообщений: 7,471
Записей в блоге: 2
13.04.2021, 13:51
Цитата Сообщение от wolf_965 Посмотреть сообщение
функция articlesEdit(), которая содержит запрос UPDATE к базе
Функция принимает не массив ... три аргумента
это как-минимум что-то типа
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
<?php
include_once('model/articles.php');
 
    $err = array();
 
    if($_SERVER['REQUEST_METHOD'] === 'POST') do {
        $id = $_GET['id'] ?? 0;
        if (!$id) $err[] = 'Не получен id';
        $title = trim($_POST['title'] ?? '');
        if (!$title) $err[] = 'Не получено название';
        $content = trim($_POST['content'] ?? '');
        if (!$content) $err[] = 'Не получено содержимое';
        if ($err) break;
 
        if (! articlesEdit($id, $title, $content)) {
            $err[] = 'Не удалось изменить запись';
            break;
        }
        header('Location: ./');
        exit();
        
    } while(0);
 
    if ($err) echo '<ul style="color:red"><li>'
            , implode("</li>\n<li>", $err), "</li></ul>\n";
 
    $articles = articlesAll();
?>
 
<div class="form">
    <?php foreach ($articles as $post){ ?>
        <form method="post" action="?id=<?= $post['id'] ?>">
            Title:<br>
            <input type="text" name="title" value="<?=$post['title'];?>"><br>
            Content:<br>
            <textarea name="content"><?=$post['content']?></textarea><br>
            <button>Send</button>
        </form>
    <?php } ?>
</div>
если есть $post['id']

Но что за массив может возвращать $query->fetch(); после запроса update ?
непонятно ... поэтому проверка if (! articlesEdit($id, $title, $content)) {...., скорее всего,
не имеет смысла.
И в запрос не пихают так строки с данными...
... или используйте подготовленные запросы либо escape-функции
И к такому должен быть доступ только у тех кому разрешено править записи
0
0 / 0 / 0
Регистрация: 03.06.2015
Сообщений: 12
13.04.2021, 14:17  [ТС]
Цитата Сообщение от x_lab Посмотреть сообщение
И к такому должен быть доступ только у тех кому разрешено править записи
я просто обучаюсь данному языку, это просто тренировка.
Проблема заключается в другом, у меня не получается вывести значения из базы в поля, вот основной вопрос
0
Невнимательный
 Аватар для ft4l
3107 / 1277 / 358
Регистрация: 08.02.2013
Сообщений: 7,471
Записей в блоге: 2
13.04.2021, 14:25
Цитата Сообщение от x_lab Посмотреть сообщение
в запрос не пихают так строки с данными
кроме SQL-инъекций могут быть ещё XXS-инъекции
В html тоже , <textarea name="content"><?=$post['content']?></textarea>
так не пихают, если там просто необработанный текст
Там могут быть теги и всякое другое http://php.net/ru/htmlentities

Добавлено через 2 минуты
Цитата Сообщение от wolf_965 Посмотреть сообщение
вывести значения из базы в поля,
в смысле если после $articles = articlesAll();
сделать echo "<pre>", htmlspecialchars(var_export($articles, 1)), "</pre>";
там ничего нет ?
0
0 / 0 / 0
Регистрация: 03.06.2015
Сообщений: 12
13.04.2021, 14:29  [ТС]
Цитата Сообщение от x_lab Посмотреть сообщение
в смысле если после $articles = articlesAll();
сделать echo "<pre>", htmlspecialchars(var_export($articles, 1)), "</pre>";
там ничего нет ?
у меня есть несколько статей , мне надо, чтобы при нажатии на edit у меня открывался файл edit и в поля title, content были выведены для редактирования, у меня получилось их вывести, только через foreach, а мне надо вывести только поля выбранной статьи
Миниатюры
Не получается реализовать редактирование статьи  
0
Невнимательный
 Аватар для ft4l
3107 / 1277 / 358
Регистрация: 08.02.2013
Сообщений: 7,471
Записей в блоге: 2
13.04.2021, 14:39
Цитата Сообщение от wolf_965 Посмотреть сообщение
надо вывести только поля выбранной статьи
Тогда да... это
PHP
7
8
        $id = $_GET['id'] ?? 0;
        if (!$id) $err[] = 'Не получен id';
Нужно переставить выше... до if
и вместо $articles = articlesAll();
Нужно что-то чтобы выполнился запрос только одной записи с нужным $id
... я без понятия как это сделать с этим model/articles.php ... какой-то фрэймворк/сиэмэс ?
0
0 / 0 / 0
Регистрация: 03.06.2015
Сообщений: 12
13.04.2021, 14:41  [ТС]
Цитата Сообщение от x_lab Посмотреть сообщение
я без понятия как это сделать с этим model/articles.php ... какой-то фрэймворк/сиэмэс ?
самодельная шляпа
0
Невнимательный
 Аватар для ft4l
3107 / 1277 / 358
Регистрация: 08.02.2013
Сообщений: 7,471
Записей в блоге: 2
13.04.2021, 14:56
Цитата Сообщение от wolf_965 Посмотреть сообщение
самодельная
Должно-же быть в ней что-то типа
PHP
1
2
3
4
5
 function articleFetchOne(int $id) : array{
        $sql = "SELECT * FROM articles WHERE id_article = $id";
        $query = dbQuery($sql);
        return $query->fetch();
    }
Добавлено через 6 минут
Цитата Сообщение от x_lab Посмотреть сообщение
dbQuery
Взависимости от того что юзается articlesEdit() должна-бы возвращать число
... какое-нибудь int $mysqli->affected_rows;
или public PDOStatement::rowCount ( void ) : int
0
0 / 0 / 0
Регистрация: 03.06.2015
Сообщений: 12
13.04.2021, 14:59  [ТС]
Цитата Сообщение от x_lab Посмотреть сообщение
Должно-же быть в ней что-то типа
получается эта функция заменяет articlesAll() и должна получать все данные с конкретным id, но вместо этого, она выводит вот так
Миниатюры
Не получается реализовать редактирование статьи  
0
Невнимательный
 Аватар для ft4l
3107 / 1277 / 358
Регистрация: 08.02.2013
Сообщений: 7,471
Записей в блоге: 2
13.04.2021, 15:06
Цитата Сообщение от wolf_965 Посмотреть сообщение
articlesAll()
Название не говорит о том что возможно получить одну запись )
но возможно, если там у неё есть необязательные аргументы типа function articlesAll( $something = 0)
0
0 / 0 / 0
Регистрация: 03.06.2015
Сообщений: 12
13.04.2021, 15:11  [ТС]
Цитата Сообщение от x_lab Посмотреть сообщение
Название не говорит о том что возможно получить одну запись )
но возможно, если там у неё есть необязательные аргументы типа function articlesAll( $something = 0)
вы меня опять не так поняли.
я взял вашу функцию articleFetchOne(int $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
<?php
    include_once('model/articles.php');
 
    $err = array();
    
    $id = $_GET['id'] ?? '';
    $articles = articleFetchOne($id);
 
    if($_SERVER['REQUEST_METHOD'] === 'POST'){
        $title = trim($_POST['title']);
        $content = trim($_POST['content']);
        
        if (!$id) $err[] = 'Не получен id';
        if($title === '' || $content === ''){
            $err[] = 'Заполните все поля!';
        }
        else{
            articlesEdit($id, $title, $content);        
            header('Location: index.php');
            exit();
        }       
    }
    if ($err) echo '<ul style="color:red"><li>'
    , implode("</li>\n<li>", $err), "</li></ul>\n";
 
?>
 
<div class="form">
    <?foreach ($articles as $article): ?>
        <form method="post" action="?id=<?=$id?>">
            Title:<br>
            <input type="text" name="title" value="<?=$article['title'];?>"><br>
            Content:<br>
            <textarea name="content"><?=$article['content']?></textarea><br>
            <button>Send</button>
        </form>
    <?endforeach;?>
</div>
и данная функция при нажатии на редактирование выводит следующее
Миниатюры
Не получается реализовать редактирование статьи  
0
0 / 0 / 0
Регистрация: 03.06.2015
Сообщений: 12
13.04.2021, 15:38  [ТС]
Цитата Сообщение от x_lab Посмотреть сообщение
Название не говорит о том что возможно получить одну запись )
спасибо за помощь, я уже все сделал, и все прекрасно работает, прям от души)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.04.2021, 15:38
Помогаю со студенческими работами здесь

Редактирование статьи,добавление еще нескольких функций
Всем привет , есть блог и нужно добавить редактирование def article(request, article_id=1): comment_form = CommentForm args...

Редактирование статьи отдельно каждую, а не все разом
Пытаюсь сделать редактирование статьи, но не выходит сделать каждую отдельно При нажатии редактируются все статьи которые есть в базе ...

Редактирование шаблона - добавить фон для контейнера статьи
Всем доброго дня. Помогите добавить фон для контейнера статьи. Хочу, чтобы он был серым как и боковые... но не найду, в каком файле...

при создании статьи присваивается ID 0 и благодаря этому не хочет работать создание, редактирование и удалени
Здравствуйте! У меня проблема, сделал БД подключил к сайту всё норм, но проблема такова, при создании статьи присваивается ID 0 и благодаря...

Как можно реализовать логику общего количества просмотров статьи
Есть желание написать собственный форум не могу разобраться как реализовать логику общего количества просмотров статьей


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru