За последние 24 часа нас посетил 22741 программист и 1259 роботов. Сейчас ищут 722 программиста ...

Не сохраняются данные из формы в базу при запросе UPDATE

Тема в разделе "PHP и базы данных", создана пользователем Константин_1985, 26 фев 2019.

Метки:
  1. Константин_1985

    Константин_1985 Новичок

    С нами с:
    26 фев 2019
    Сообщения:
    4
    Симпатии:
    0
    Прошу помощи опытных коллег:
    В MVC модели задачника требуется обновить в базе поле task(задача) при внесении изменений в форму редактирования записи о задаче.Проблема в том,что если мы присваиваем значение переменной в модели из метода POST, записывается пустое значение в базу.Если же просто присвоить переменной строку в функции,то значение переменной в базу заносится. Механизм работы с базой -PDO.
    Ниже код контроллера:
    PHP:
    1. public function EditTask($query_data = []){
    2.      
    3.        $id = $query_data[0];
    4.        print_r ('id:'.$id);
    5.        $task=$this->model->getTaskById($id);
    6.        $this->pageData['task']=$task;
    7.        $this->view->render($this->pageTpl,$this->pageData);
    8.      }
    9.    
    10.      public function UpdateTask($query_data = []){
    11.      
    12.        $id = $query_data[0];
    13.        $task=$_POST['task_name'];
    14.        $task=$this->model->updateTaskById($id,$task);
    15.        $this->view->render($this->pageTpl,$this->pageData);
    Код модели:

    PHP:
    1. public function updateTaskByID($id,$task){
    2.      $result=array();
    3.      $task=$_POST['task_name'];
    4.      $task1='monday';
    5.      $id=1;
    6.      echo "gettype_task:".gettype($task);
    7.      echo "task1:".$task1;
    8.      echo $id;
    9.      print_r($_POST);
    10.      $sql='UPDATE tasks SET task=:task WHERE id =:id';
    11.      $stmt=$this->db->prepare($sql);
    12.      $stmt->bindValue(":id",$id,PDO::PARAM_INT);
    13.      $stmt->bindValue(":task",$task,PDO::PARAM_STR);
    14.      $stmt->execute();
    15.    }


    Код view:
    PHP:
    1. <?php
    2. if(isset($pagedata['task'])){
    3. ?>
    4.                     <form action="/mvc1/UpdateTask/<?=$pagedata['task']['id']?>/" method="POST">
    5.                         <table id="fresh-table" class="table">
    6.                             <tbody>
    7.                                 <tr>
    8.                                     <th data-field="id">ID</th>
    9.                                     <td><?=$pagedata['task']['id']?></td>
    10.                                 </tr>
    11.                                 <tr>
    12.                                     <th data-field="task">Задача</th>
    13.                                     <td><input type="text" name="task_name" value="<?=$pagedata['task']['task']?>" /></td>
    14.                                 </tr>
    15.                                 <tr>
    16.                                     <th data-field="user_id">Пользователь</th>
    17.                                     <td><?=$pagedata['task']['user_id']?></td>
    18.                                 </tr>
    19.                             </tbody>
    20.                         </table>
    21.  
    22.                         <input type="submit" value="Обновить" />
    23.                
    24.                     </form>
    25. <?php
    26. }
    27. ?>
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    Смотрел отладчиком, POST точно передался?
     
  3. Константин_1985

    Константин_1985 Новичок

    С нами с:
    26 фев 2019
    Сообщения:
    4
    Симпатии:
    0
    да, просмотр переменной до метода UPDATE print_r($_POST); результат - Array ( [task_name] => monday )
     
  4. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    напишите вот тут вот вместо:
    PHP:
    1. $task=$_POST['task_name'];
    вот так например:
    PHP:
    1. if(strlen($_POST['task_name']) > 0){
    2.     $task= $_POST['task_name'];
    3. }else{
    4.     $task= 'фигуньки';
    5. }
    и посмотрите что в базу запишется.

    и кстати вопрост, почему вы отправляя в функцию task:
    PHP:
    1. $task=$_POST['task_name'];
    2. $task=$this->model->updateTaskById($id,$task);
    потом в этой же функции присваиваете task опять POST, думаю его там просто нет:
    PHP:
    1. public function updateTaskByID($id,$task){
    2.  $result=array();
    3. $task=$_POST['task_name']; // зачем тут эта строчка?
     
  5. Константин_1985

    Константин_1985 Новичок

    С нами с:
    26 фев 2019
    Сообщения:
    4
    Симпатии:
    0
    В базу записалось 'фигуньки',строчку $task=$_POST['task_name']; удалил.Подскажите пожалуйста,почему пустое значение, как исправить
     
  6. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Вот так если функцию updateTaskByID написать что будет записывать?:
    PHP:
    1. public function updateTaskByID($id,$task){
    2.      $sql='UPDATE tasks SET task=:task WHERE id =:id';
    3.      $stmt=$this->db->prepare($sql);
    4.      $stmt->bindValue(":id",$id,PDO::PARAM_INT);
    5.      $stmt->bindValue(":task",$task,PDO::PARAM_STR);
    6.      $stmt->execute();
    7.    }
    если не поможет то вот так еще, но я не уверен:
    и в функции UpdateTask
    PHP:
    1. public function UpdateTask($query_data = []){
    2.  
    3.        $id = $query_data[0];
    4.        $task = $query_data[1];
    5.        $task=$this->model->updateTaskById($id,$task);
    6.        $this->view->render($this->pageTpl,$this->pageData);
    и вот так еще поэксперементировать:
    PHP:
    1. public function UpdateTask($query_data = []){
    2.  
    3.        $id = $query_data[1];
    4.        $task = $query_data[0];
    5.        $task=$this->model->updateTaskById($id,$task);
    6.        $this->view->render($this->pageTpl,$this->pageData);
    [/php]
     
    #6 Artur_hopf, 26 фев 2019
    Последнее редактирование: 26 фев 2019
  7. Константин_1985

    Константин_1985 Новичок

    С нами с:
    26 фев 2019
    Сообщения:
    4
    Симпатии:
    0
    Это парсер URL -он выведет localhost в первом варианте и mvc1 во втором,так как у меня URL проекта localhost/mvc1.
    А я должен получить данные из формы:

    PHP:
    1. <?php
    2. if(isset($pagedata['task'])){
    3. ?>
    4.                     <form action="/mvc1/UpdateTask/<?=$pagedata['task']['id']?>/" method="POST">
    5.                         <table id="fresh-table" class="table">
    6.                             <tbody>
    7.                                 <tr>
    8.                                     <th data-field="id">ID</th>
    9.                                     <td><?=$pagedata['task']['id']?></td>
    10.                                 </tr>
    11.                                 <tr>
    12.                                     <th data-field="task">Задача</th>
    13.                                     <td><input type="text" name="task_name" value="<?=$pagedata['task']['task']?>" /></td>
    14.                                 </tr>
    15.                                 <tr>
    16.                                     <th data-field="user_id">Пользователь</th>
    17.                                     <td><?=$pagedata['task']['user_id']?></td>
    18.                                 </tr>
    19.                             </tbody>
    20.                         </table>
    21.  
    22.                         <input type="submit" value="Обновить" />
    23.                
    24.                     </form>
    25. <?php
    26. }
    27. ?>
     
  8. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    Зачем себе усложнять код, делать его настолько огромным?) когда учил запросы так же писал, не скажу что это не правилно, все же на оф сайте так же пишут и обьясняют.
    сделай запрос обновления так:
    PHP:
    1. $stmt = $this -> db -> prepare ( UPDATE `tasks` SET `task` = ? WHERE `id` = ? );
    2. $stmt -> execute ( [ (int)$id, (string)$task  ] );
    буду у компа еще раз посмотрю, на кнопочном телефоне настолько код тяжело писать ужас :D