@miniven

Как можно изменить значения в БД при помощи PHP?

Есть таблица со значениями. Я хочу их изменять из админки. Для этого мне нужно, чтобы в ней появлялись столько input'ов, сколько значений в таблице. ЭТо я могу сделать с помощью foreach, но как потом отправлять введенные значения в БД?

Сейчас я изменяю значения таким образом, например:

if (!empty($_POST)) {
		$id = $_POST['id'];
		$name = $_POST['reviewName'];
		$body = $_POST['reviewBody'];
		$userpic = $_POST['userPic'];

		$update_review = $db->prepare(
		'UPDATE reviews SET 
			reviews_name = :name, 
			reviews_body = :body,
			reviews_logo = :userpic
		WHERE id = :id'
	    );

		$update_review->execute([
			'name' => $name,
			'body' => $body,
			'userpic' => $userpic,
			'id' => $id
		]);


Но с использованием foreach для данной задачи еще не сталкивался

Или есть какой-то более грамотный подход?
  • Вопрос задан
  • 553 просмотра
Пригласить эксперта
Ответы на вопрос 2
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Хорошо что прикручены препарестатменты, но все равно, неужели все так и кидается в базу без проверок?
Неплохо было бы какой-никакой фильтр все же прикрутить.
А так, если по коду:
$querystring = array();
foreach($_POST as $key=>$val){
if($key!="id")$querystring[] = "`$key`=:$key";
}
if(!empty($querystring))$querystring = implode(",",$querystring);
$querystring = "UPDATE reviews SET ".$querystring." where `id`=:id";
$update_review->execute($_POST);

Сори за кривоватый код, пишу с планшетки
Ответ написан
puchkovk
@puchkovk
Усложнять — просто. Упрощать — сложно.
Если предположить, что у вас таблица вида
|   id   | reviews_name | reviews_body | reviews_logo |
-------------------------------------------------------
|    1   | Вася         | тут был вася | /pic.jpg     |
-------------------------------------------------------
|    2   | Петя         | Петя тут был | /pic2.jpg    |
-------------------------------------------------------

И вам надо иметь возможность сделать редактирование нескольких строк сразу, то можно вот так:

$model = [ 'id' => 'Идентификатор', 'reviews_name' => 'Имя', 'reviews_body'=> 'Текст', 'reviews_logo'=>'Аватар' ];

if (!empty($_POST)) {
   $update_review = $db->prepare(
    'UPDATE reviews SET 
      reviews_name = :name, 
      reviews_body = :body,
      reviews_logo = :userpic
    WHERE id = :id'
      );

    $id = $_POST['id'];
    $name = $_POST['reviewName'];
    $body = $_POST['reviewBody'];
    $userpic = $_POST['userPic'];

    foreach ($_POST['reviews']  as $pr) {
        $data = [];       
        foreach ($model as $field=>$field_name) {
            $data[$field] = !empty($pr[$field]) ? $pr[$field] : '';
        }
        $update_review->execute($data);
   }
    $update_review->execute([
      'name' => $name,
      'body' => $body,
      'userpic' => $userpic,
      'id' => $id
    ]);

$reviews = $db->select ... // получаем отзывы, которые нам нужны

foreach ($reviews as $r) {
   foreach ($model as $field=>$field_name) {
       ?>
       <?=$field_name?>: <input type="text" name="reviews[<?=$r['id']?>][<?=$r[$field]?>]" value="<?=$r[$field]?>" />
       <?php
   }
   ?>
   <br />
   <?php
}
?>
<input type="submit" />


Чтобы добавить новое поле - понадобится по сути, только обновить таблицу в БД и массив $data.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы