首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >php mysql通用更新查询不更新数据库中的数据

php mysql通用更新查询不更新数据库中的数据
EN

Stack Overflow用户
提问于 2018-07-11 01:04:50
回答 1查看 113关注 0票数 0

我在一个文件中有一个通用的更新查询,我知道它是由我的项目控制器调用的,但我不知道问题是在窗体和控制器之间、窗体和函数之间还是函数和控制器之间。

我的代码应该是在项目列表表单中填充了带有编辑和删除按钮的记录(这起作用),当选择编辑按钮时,编辑项目表单将填充该行中的数据(这起作用)。编辑完表单中显示的信息后,用户按下save,这会调用项目控制器中的编辑函数,然后再调用save函数和update函数,从而更新数据库(这不起作用)。我不确定错误在哪里,因为没有发生错误,我知道代码正在进入控制器的编辑功能,因为在进入之后,它会再次打开列表。

我确信这个错误是我在某个地方犯下的一些愚蠢的打字错误,如果你想知道save函数可以用来更新或插入函数,但插入函数工作得很好。

这就是为什么我80%确定它与更新函数本身或im将信息传递给更新函数的方式有关。

任何帮助都会非常感谢,我的项目表格创建在最后,就像我说的,我确信它就像我忽略的某个地方的打字错误一样简单(它总是伴随着我)。

更新函数(和保存)

代码语言:javascript
复制
private function update($fields) {
    $query = ' UPDATE `' . $this->table .'` SET ';

    foreach ($fields as $key => $value) {
        $query .= '`' . $key . '` = :' . $key . ',';
    }

    $query = rtrim($query, ',');

    $query .= ' WHERE `' . $this->primaryKey . '` = :primaryKey';

    //Set the :primaryKey variable
    $fields['primaryKey'] = $fields['id'];

    $fields = $this->processDates($fields);

    $this->query($query, $fields);
}
public function save($record) {
    try {
        if ($record[$this->primaryKey] == '') {
            $record[$this->primaryKey] = null;
        }
        $this->insert($record);
    }
    catch (PDOException $e) {
        $this->update($record);
    }
}

项目控制器

代码语言:javascript
复制
<?php

class ProjectController {
private $employeesTable;
private $projectsTable;

public function __construct(DatabaseTable $projectsTable, DatabaseTable $employeesTable) {
    $this->projectsTable = $projectsTable;
    $this->employeesTable = $employeesTable;
}

public function list() {
    $result = $this->projectsTable->findAll();

    $projects = array();
    foreach ($result as $project) {

        $projects[] = [
            'IDP' => $project['IDP'],
            'ProjectID' => $project['ProjectID'],
            'ProjectName' => $project['ProjectName'],
            'ProjectDes' => $project['ProjectDes'],
            'ProjectStartDate' => $project['ProjectStartDate'],
            'ProjectEndDate' => $project['ProjectEndDate'],
            'ProjectStatus' => $project['ProjectStatus']
        ];

    }


    $title = 'Project list';

    $totalProjects = $this->projectsTable->total();

    return ['template' => 'projects.html.php',
            'title' => $title,
            'variables' => [
                    'totalProjects' => $totalProjects,
                    'projects' => $projects
                ]
            ];
}

public function home() {
    $title = 'Colpitts Design';

    return ['template' => 'home.html.php', 'title' => $title];
}

public function delete() {
    $this->projectsTable->delete($_POST['id']);

    header('location: index.php?action=list');
}


public function edit() {
    if (isset($_POST['project'])) {

        $project = $_POST['project'];
        $project['projectstartdate'] = new DateTime();
        $project['projectenddate'] = null;

        $this->projectsTable->save($project);

        header('location: index.php?action=list');

    }   else {

        if (isset($_GET['id'])) {
            $projects = $this->projectsTable->findById($_GET['id']);
        }
        $title = 'Edit Projects';

        return ['template' => 'editproject.html.php',
                'title' => $title,
                'variables' => [
                        'project' => $projects ?? null
                    ]
                ];
    }
}

} editproject窗体

代码语言:javascript
复制
<form action="" method="post">
<input type="hidden" name="project[IDP]" value="<?=$project['IDP'] ?? ''?>">
    <label for="ProjectID">Type the Project id here:</label>
    <textarea id="ProjectID" name="project[ProjectID]" rows="3" cols="40"><?=$project['ProjectID'] ?? ''?></textarea>

    <label for="ProjectStatus">Type the Project status here:</label>
    <textarea id="ProjectStatus" name="project[ProjectStatus]" rows="3" cols="40"><?=$project['ProjectStatus'] ?? ''?></textarea>

    <label for="ProjectName">Type the Project name here:</label>
    <textarea id="ProjectName" name="project[ProjectName]" rows="3" cols="40"><?=$project['ProjectName'] ?? ''?></textarea>

<label for="ProjectDes">Type the Project description here:</label>
<textarea id="ProjectDes" name="project[ProjectDes]" rows="3" cols="40"><?=$project['ProjectDes'] ?? ''?></textarea>

<input type="submit" name="submit" value="Save">

项目列表表单

代码语言:javascript
复制
<p><?=$totalProjects?> projects are listed in the DanClock Database.</p>

<?php foreach($projects as $project): ?>
<blockquote>
  <p>

  <?=htmlspecialchars($project['ProjectID'], ENT_QUOTES, 'UTF-8')?>
  <?=htmlspecialchars($project['ProjectDes'], ENT_QUOTES, 'UTF-8')?>
  <?=htmlspecialchars($project['ProjectStartDate'], ENT_QUOTES, 'UTF-8')?>
  <?=htmlspecialchars($project['ProjectStatus'], ENT_QUOTES, 'UTF-8')?>

  <a href="index.php?action=edit&id=<?=$project['IDP']?>">Edit</a>

  <form action="index.php?action=delete" method="post">
<input type="hidden" name="id" value="<?=$project['IDP']?>">
<input type="submit" value="Delete">
  </form>
  </p>
</blockquote>
<?php endforeach; ?>

项目表

代码语言:javascript
复制
CREATE TABLE `Projects` (
  `IDP` int(11) NOT NULL AUTO_INCREMENT,
  `ProjectID` int(11) NOT NULL,
  `ProjectName` varchar(50) NOT NULL,
  `ProjectDes` text,
  `ProjectStartDate` Datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `ProjectEndDate` Datetime,
  `ProjectStatus` varchar(50) NOT NULL DEFAULT 'Active',
  PRIMARY KEY  (IDP)
 ) ENGINE=InnoDB;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-11 04:01:40

我找出了问题所在,因为我认为这是我的更新函数。它并不像我想的那样“通用”,或者说它几乎是。

这一行:

代码语言:javascript
复制
    //Set the :primaryKey variable
    $fields['primaryKey'] = $fields['id'];

应该是:

代码语言:javascript
复制
//Set the :primaryKey variable
$fields['primaryKey'] = $fields[$this->primaryKey];

一些我没有注意到的小事情,现在继续做其他的事情><

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51270766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档