Прошу помощи опытных коллег: В MVC модели задачника требуется обновить в базе поле task(задача) при внесении изменений в форму редактирования записи о задаче.Проблема в том,что если мы присваиваем значение переменной в модели из метода POST, записывается пустое значение в базу.Если же просто присвоить переменной строку в функции,то значение переменной в базу заносится. Механизм работы с базой -PDO. Ниже код контроллера: PHP: public function EditTask($query_data = []){ $id = $query_data[0]; print_r ('id:'.$id); $task=$this->model->getTaskById($id); $this->pageData['task']=$task; $this->view->render($this->pageTpl,$this->pageData); } public function UpdateTask($query_data = []){ $id = $query_data[0]; $task=$_POST['task_name']; $task=$this->model->updateTaskById($id,$task); $this->view->render($this->pageTpl,$this->pageData); Код модели: PHP: public function updateTaskByID($id,$task){ $result=array(); $task=$_POST['task_name']; $task1='monday'; $id=1; echo "gettype_task:".gettype($task); echo "task1:".$task1; echo $id; print_r($_POST); $sql='UPDATE tasks SET task=:task WHERE id =:id'; $stmt=$this->db->prepare($sql); $stmt->bindValue(":id",$id,PDO::PARAM_INT); $stmt->bindValue(":task",$task,PDO::PARAM_STR); $stmt->execute(); } Код view: PHP: <?php if(isset($pagedata['task'])){ ?> <form action="/mvc1/UpdateTask/<?=$pagedata['task']['id']?>/" method="POST"> <table id="fresh-table" class="table"> <tbody> <tr> <th data-field="id">ID</th> <td><?=$pagedata['task']['id']?></td> </tr> <tr> <th data-field="task">Задача</th> <td><input type="text" name="task_name" value="<?=$pagedata['task']['task']?>" /></td> </tr> <tr> <th data-field="user_id">Пользователь</th> <td><?=$pagedata['task']['user_id']?></td> </tr> </tbody> </table> <input type="submit" value="Обновить" /> </form> <?php } ?>
да, просмотр переменной до метода UPDATE print_r($_POST); результат - Array ( [task_name] => monday )
напишите вот тут вот вместо: PHP: $task=$_POST['task_name']; вот так например: PHP: if(strlen($_POST['task_name']) > 0){ $task= $_POST['task_name']; }else{ $task= 'фигуньки'; } и посмотрите что в базу запишется. и кстати вопрост, почему вы отправляя в функцию task: PHP: $task=$_POST['task_name']; $task=$this->model->updateTaskById($id,$task); потом в этой же функции присваиваете task опять POST, думаю его там просто нет: PHP: public function updateTaskByID($id,$task){ $result=array(); $task=$_POST['task_name']; // зачем тут эта строчка?
В базу записалось 'фигуньки',строчку $task=$_POST['task_name']; удалил.Подскажите пожалуйста,почему пустое значение, как исправить
Вот так если функцию updateTaskByID написать что будет записывать?: PHP: public function updateTaskByID($id,$task){ $sql='UPDATE tasks SET task=:task WHERE id =:id'; $stmt=$this->db->prepare($sql); $stmt->bindValue(":id",$id,PDO::PARAM_INT); $stmt->bindValue(":task",$task,PDO::PARAM_STR); $stmt->execute(); } если не поможет то вот так еще, но я не уверен: и в функции UpdateTask PHP: public function UpdateTask($query_data = []){ $id = $query_data[0]; $task = $query_data[1]; $task=$this->model->updateTaskById($id,$task); $this->view->render($this->pageTpl,$this->pageData); и вот так еще поэксперементировать: PHP: public function UpdateTask($query_data = []){ $id = $query_data[1]; $task = $query_data[0]; $task=$this->model->updateTaskById($id,$task); $this->view->render($this->pageTpl,$this->pageData); [/php]
Это парсер URL -он выведет localhost в первом варианте и mvc1 во втором,так как у меня URL проекта localhost/mvc1. А я должен получить данные из формы: PHP: <?php if(isset($pagedata['task'])){ ?> <form action="/mvc1/UpdateTask/<?=$pagedata['task']['id']?>/" method="POST"> <table id="fresh-table" class="table"> <tbody> <tr> <th data-field="id">ID</th> <td><?=$pagedata['task']['id']?></td> </tr> <tr> <th data-field="task">Задача</th> <td><input type="text" name="task_name" value="<?=$pagedata['task']['task']?>" /></td> </tr> <tr> <th data-field="user_id">Пользователь</th> <td><?=$pagedata['task']['user_id']?></td> </tr> </tbody> </table> <input type="submit" value="Обновить" /> </form> <?php } ?>
Зачем себе усложнять код, делать его настолько огромным?) когда учил запросы так же писал, не скажу что это не правилно, все же на оф сайте так же пишут и обьясняют. сделай запрос обновления так: PHP: $stmt = $this -> db -> prepare ( UPDATE `tasks` SET `task` = ? WHERE `id` = ? ); $stmt -> execute ( [ (int)$id, (string)$task ] ); буду у компа еще раз посмотрю, на кнопочном телефоне настолько код тяжело писать ужас