【问题标题】:Updating a form entry in php/mysql with checkboxes?使用复选框更新 php/mysql 中的表单条目?
【发布时间】:2014-11-14 06:46:46
【问题描述】:

我怎样才能允许用户提交表单,以更新他的“重新提交”条目 例如

  • 12345678910(唯一 id),提交带有选择的表单,

  • 12345678910 ,重新提交新的选择

负责“自动”更新此类表单条目的功能是什么。

我知道如果条目存在我可以使用 check,但是如果它存在我如何更新它,如果它不存在则将其插入新行中......

function checkstudentid($studentid)
{
    $con = connectvar();
    mysql_select_db("database1", $con);
    $result = mysql_query(
        "SELECT * FROM table WHERE studentid='$studentid' LIMIT 1");

    if(mysql_fetch_array($result) !== false)
        ....
    // I want to add the entry here since it doesn't exist...with checkboxes 

// else , I want to update if it already exists

   }

现在我也不完全肯定上述代码是否可以工作......但这是我为初学者所拥有的,如果有任何其他方法或者我使用的方法是“错误的”,我会感谢提醒......或者如果我想要做的甚至是可能的(我正在做的方式)......

注意事项

  • 我只有一个表单提交到的 php 文件。
  • 我没有使用登录/注册系统
  • 我不想使用 HTML 显示表格中的所有数据,只是 如果 studentid 已存在于表中,则“自动”更新

【问题讨论】:

  • 有“自动”功能。 PHP 提供了一套基本的工具,您的工作就是以各种组合/顺序使用这些工具来完成您的项目。您已经在上面的示例代码中使用了所有这些工具,您只需要实际了解这些工具是如何工作的。请注意,您最有可能受到sql injection attacks 的攻击
  • 我会说你可以使用 MySQL 的 ON DUPLICATE KEY 并标记 studentid 列,这样它会自动为你更新。
  • @Ohgodwhy ,这也会更新新条目(复选框)中的选择吗?我的意思是,如果新条目与已经存在的 studentid 匹配,它将替换它,但是 (selections) 列呢?
  • 当然可以。您正在为它编写代码,为什么不呢? Have a look here
  • 关于 sql 的 cmets,看看这个tutsplus article。对于良好的 sql 实践来说,这是一本非常好的入门书。我认为它实际上也使代码更整洁、更易读。

标签: php mysql forms


【解决方案1】:

如果我使用已弃用的方法与数据库交互,我可能会这样做:

<?php
    function checkstudentid($studentid) {
        $con = connectvar();
        mysql_select_db("database1", $con);
        $result = mysql_query(
            "SELECT * FROM table WHERE studentid='$studentid' LIMIT 1");

        $query = '';
        if (mysql_num_rows($result) > 0) {
            $query = "UPDATE table SET column1='$value_one', column2='$value_two' WHERE studentid='$studentid'";
        } else {
            $query = "INSERT INTO table VALUES('$new_id', '$value_one', '$value_two')";
        }

        if (mysql_query($query)) {
            return true;
        } else {
            return false;
        }
    }
?>

但话又说回来,我会使用 PDO 与 DB 交互。

这是一个简单的 PDO 示例(您只需编写返回连接的函数):

<?php
    function checkstudentid($studentid) {

        $update = false;

        $dbh = formPDOConnection();
        $query = "SELECT studentid FROM table WHERE studentid=:id";
        $stmt = $dbh->prepare($query);
        $stmt->bindValue(':id', $studentid, PDO::PARAM_STR);
        if ($stmt->execute()) {
            if ($stmt->rowCount()) {
                $update = true;
            }
        } else {
            return 'failure to execute query';
        }

        // if we just need to update
        if ($update) {
            $update = "UPDATE table SET value1=:v1, 
                value2=:v2 WHERE studentid=:id";
            $stmt = $dbh->prepare($update);
            $stmt->bindValue(':id', $studentid, PDO::PARAM_STR);
            $stmt->bindValue(':v1', $value_one, PDO::PARAM_STR);
            $stmt->bindValue(':v2', $value_two, PDO::PARAM_STR);
        } else {
            $insert = "INSERT INTO table VALUES(:id,:v1,v2)";
            $stmt = $dbh->prepare($insert);
            $stmt->bindValue(':id', $new_id, PDO::PARAM_STR);
            $stmt->bindValue(':v1', $value_one, PDO::PARAM_STR);
            $stmt->bindValue(':v2', $value_two, PDO::PARAM_STR);
        }

        return $stmt->execute();
    }
?>

免得自己头疼,停止使用mysql_*

【讨论】:

  • 我认为这回答了它,PDO 应该是......它需要我一段时间来更新完整的代码,但我会将此标记为答案。谢谢
【解决方案2】:

您可以在 mysql 代码上使用 INSERT... ON DUPLICATE KEY UPDATE...,而不是使用 PHP 中的逻辑。

这是一个示例:

INSERT INTO `category` (`id`, `name`) VALUES (12, 'color')
  ON DUPLICATE KEY UPDATE `name` = 'color';

参考:http://dev.mysql.com/doc/refman/5.6/en/insert-on-duplicate.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 2021-04-12
    • 1970-01-01
    • 2012-06-03
    • 2012-08-16
    • 1970-01-01
    相关资源
    最近更新 更多