【问题标题】:LAMP Stack cant read from mysql database correctly but can't insert correctly. Function "succeeds" with no errors but database doesn't updateLAMP Stack 无法正确读取 mysql 数据库,但无法正确插入。功能“成功”没有错误,但数据库不更新
【发布时间】:2020-04-08 12:28:23
【问题描述】:

我是一名大二学生,是我所在大学这个社区服务组织的新网站管理员。我正在更新一个托管在 InMotion 上的 10 到 15 年历史的网站,目前正在将其移动到我在 AWS 上配置和设置的 LAMP 堆栈,并一一重建网站的结构。到目前为止,我已经完成了所有工作,除了我无法正确添加到数据库中。不过,从数据库读取和显示表格页面都可以工作,所以我不确定插入函数有什么问题。我已经尝试了一切,但一切看起来都对我来说......

添加公告时,只要所有检查通过,就会进入“公告添加成功页面”

请注意,托管在 InMotion 上的网站的 PHP 版本是 5 版,我在制作 AWS LAMP 堆栈时将其更新到 7.2。为了修复 mysql 和 regex 弃用,我导入了我在 github 上找到的几个包装器来修复它(允许我正确地从数据库中读取)。

这里是相关的代码块。我认为我对它们进行了正确排序,并且它们在我看来是正确的。

<!-- IN add_announcement.php -->
            <h2>Add an Announcement</h2>
            <?php
            if (isset($_SESSION['addannouncement'])) {
                unset($_SESSION['addannouncement']);
                echo ("\t\t\t<p>Announcement added successfully!</p>\n");
            } else {
            ?>
            <form action="process.php" method="post">
                <fieldset>
                    <legend>Add Announcement</legend>
                    <?php
                    if ($form->num_errors > 0) {
                        echo ("\t\t\t\t\t<p style=\"font-weight:bold;color:#f00;\">".$form->num_errors." error(s) found</p>\n");
                    }
                    ?>

                    /* ol and li stuff for forms*/
                    ...

                    <input type="hidden" id="subaddannouncement" name="subaddannouncement" value="1" />
                </fieldset>
                <input type="submit" value="Submit" />
            </form>
<!-- IN process.php, WITHIN AN IF LOOP-->
    /* User submitted add announcement form */
    else if (isset($_POST['subaddannouncement'])) {
        $this->procAddAnnouncement();
    }
<!-- IN process.php -->
    /*
     * procAddAnnouncement - Validates and processes requests to add an announcement to the database
     */
    function procAddAnnouncement()
    {
        global $session, $form;

        /* Announcement add attempt */
        $retval = $session->addAnnouncement($_POST['txt_Title'], $_POST['txtarea_Body']);

        file_put_contents('php://stderr', print_r("ERROR DEBUG: retval is " . $retval, TRUE));

        /* Announcement Add Successful */
        if ($retval == 0) {
            $_SESSION['addannouncement'] = true;
            header("Location: " . $session->referrer);
        }
        /* Error found with form */
        else if ($retval == 1) {
            $_SESSION['value_array'] = $_POST;
            $_SESSION['error_array'] = $form->getErrorArray();
            header("Location: " . $session->referrer);
        }
        /* Announcement add attempt failed */
        else if ($retval == 2) {
            $_SESSION['addannouncement'] = false;
            header("Location: " . $session->referrer);
        }
    }

<!-- IN session.php function addAnnouncement($subtitle, $subbody)-->
    function addAnnouncement($subtitle, $subbody)
    {
        global $database, $form;

        /* Announcement Title Error Checking */
        ...

        /* Announcement Body Error Checking */
        ...

        /* Set Announcement Post Date */
        ...

        /* Errors exist, have user correct them */
        if ($form->num_errors > 0) {
            return 1; // Errors with form
        }
        /* No errors, add the new announcement to the database */
        else {
            if ($database->addNewAnnouncement($subtitle,$subbody,$subtime)) {
                return 0; //Event signup added succesfully
            } else {
                return 2; //Event signup attempt failed
            }
        }
    }
<!-- IN database.php -->
    /**
     * addNewAnnouncement - Inserts announcement title, body, and post date into the database
     */
    function addNewAnnouncement($title, $body, $date)
    {
        $q = "INSERT INTO `" . TBL_ANNOUNCEMENTS . "` VALUES ('','$title','$date','$body')";
        $result = mysql_query($q, $this->connection);
        return $result;
    }

IMAGE OF Directory Structure for reference

【问题讨论】:

  • 三重检查您的用户名、密码和 dbame。
  • 尝试在mysql中手动运行commit。记录有时不会反映回来
  • 你还在用mysql_query

标签: php mysql mysqli lamp


【解决方案1】:

在您的 database.php 中,您仍在使用 mysql_query。

mysql_query 在 PHP 5.5.0 中被弃用并在 PHP 7.0.0 (https://www.php.net/manual/en/function.mysql-query.php) 中被删除。由于您使用的是 7.2,因此无法正常工作。

请改用mysqli_query

注意:使用mysqli_query,参数顺序发生了变化。

mysqli_query($connection, $query)

vs

mysql_query($query, $connection)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多