首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP - include_once/include不工作

PHP - include_once/include不工作
EN

Stack Overflow用户
提问于 2015-11-21 23:12:56
回答 2查看 847关注 0票数 1

我正在为一个学校项目设计一个非常简单的CMS系统,我遇到了一些麻烦。

现在,我的网页设置如下:

  • 我创建的每个用户可以访问的网页--在顶部和底部,我分别有一个include_once(header.php)和include_once(footer.php)。这些文件包含任何加载的页面的顶部和底部。

在我的header.php中,除了其他杂乱无章的HTML之外,我还有以下内容:

<?php require_once('php/constants.php'); require_once("php/functions.php"); ?>

对于constants.php -包含我能想到的每一个已定义的常量,因为我宁愿在这里更改一个常量,也不愿在代码中搜索,以找到我可以在其他地方拥有的许多实例。

对于Functions.php -包含我为在这个CMS上使用而创建的所有函数。包含所有内容,从我使用PHPMailer发送邮件的函数到使用MeekroDB进行数据库交互的注册和登录。

问题就在这里。

在我有一个帐户注册的页面上,有这样的内容

代码语言:javascript
复制
//get the username, password, first/last name, and send it to register function.
        $firstName = $_POST['first_name'];
        $lastName = $_POST['last_name'];
        $password = $_POST['password'];
        $email_address = $_POST['email_address'];

        //register the user. where register() is in functions.php
        if(register($email_address, $password, $firstName, $lastName))
        {
            echo "REGISTRATION SUCCESSFUL";
        }
        else
        {
            echo "REGISTRATION UNSUCCESSFUL";    
        }

在我的functions.php文件中,我使用MeekroDB提到的DB::查询赋值来声明我的数据库信息。

代码语言:javascript
复制
//MeekroDB - Used for database CRUDding
require_once("php/meekrodb.php");
DB::$user = 'root'; //yes i'll change this later
DB::$password = ''; //this too
DB::$dbName ="testDB";

在实际的注册功能中,我有以下内容:

代码语言:javascript
复制
function register($email, $password, $firstName, $lastName)
{
    //check to see if the user already exists
    //poll the DB to see if the email is already in there.
    $results = DB::QUERY("SELECT email FROM users WHERE email = %s", $email);

    //if there is a row in the DB with this email...
    if(DB::count() >= 1)
    {
        return false;
    }
    else
    {
        //lets prepare the user for insertion into the database.
        $username = $firstName . '_' . $lastName;
        //generate a salt for database insertion and password hashing
        $salt = hash('sha512', uniqid(mt_rand(1, mt_getrandmax()), true));
        $password = hash('sha512', $password . $salt);

        //create the insert statement array for insertion.
        $insertionArray = 
        array(
            'username' => $username,
            'password' => $password,
            'email'    => $email,
            'salt'     => $salt,
            'isAdmin'  => 0
        );

        //insert the new user into the database.
        DB::INSERT('users', $insertionArray);

        //Send a registration email to the new user.
        //Send an email to the user stating they've registered.
        $mailer = createMailer();

        //set the contents of the email
        $mailer->MsgHTML(generateEmail_Registration($username));

        //set the destination address
        $mailer->AddAddress($email, $firstName . ' ' . $lastName);

        if($mailer->Send())
        {
            return true;
        }
        else
        {
            return false;
        }
    }

}       

对我来说,这应该管用。

然而:

我尝试运行WHenever ()函数,最后得到了大量涉及MeekroDB的错误,我不确定如何修复它们(是包含问题,还是与meekroDB有关?)

这是我要犯的错误。

代码语言:javascript
复制
Warning: mysqli::set_charset(): invalid object or resource mysqli in D:\xampp\htdocs\finalproject\php\meekrodb.php on line 186

Warning: MeekroDB::get(): Property access is not allowed yet in D:\xampp\htdocs\finalproject\php\meekrodb.php on line 188

Warning: mysqli::real_escape_string(): invalid object or resource mysqli in D:\xampp\htdocs\finalproject\php\meekrodb.php on line 496

Warning: mysqli::query(): invalid object or resource mysqli in D:\xampp\htdocs\finalproject\php\meekrodb.php on line 628

Warning: MeekroDB::queryHelper(): Property access is not allowed yet in D:\xampp\htdocs\finalproject\php\meekrodb.php on line 662

Warning: MeekroDB::queryHelper(): Property access is not allowed yet in D:\xampp\htdocs\finalproject\php\meekrodb.php on line 663

Warning: mysqli::real_escape_string(): invalid object or resource mysqli in D:\xampp\htdocs\finalproject\php\meekrodb.php on line 496

Warning: mysqli::real_escape_string(): invalid object or resource mysqli in D:\xampp\htdocs\finalproject\php\meekrodb.php on line 496

Warning: mysqli::real_escape_string(): invalid object or resource mysqli in D:\xampp\htdocs\finalproject\php\meekrodb.php on line 496

Warning: mysqli::real_escape_string(): invalid object or resource mysqli in D:\xampp\htdocs\finalproject\php\meekrodb.php on line 496

Warning: mysqli::query(): invalid object or resource mysqli in D:\xampp\htdocs\finalproject\php\meekrodb.php on line 628

Warning: MeekroDB::queryHelper(): Property access is not allowed yet in D:\xampp\htdocs\finalproject\php\meekrodb.php on line 662

Warning: MeekroDB::queryHelper(): Property access is not allowed yet in D:\xampp\htdocs\finalproject\php\meekrodb.php on line 663
REGISTRATION UNSUCCESSFUL //of course.

我认为这与我包含各种PHP文件的方式有关,作为回报,这是在某种程度上破坏了我的MeekroDB连接。

如果你们需要更多的信息,请告诉我,但我想我已经把一切都摆在桌面上了。

我不经常在这里发帖,所以如果我在某个地方错过了某种礼仪,我会提前道歉。

谢谢!:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-21 23:48:00

如果您在meekrodb.php文件中继续执行,那么第一个错误将被调用到您的$mysql对象上,该对象刚刚尝试了一个连接(请查看meekrodb.php文件以了解我在说什么),因此这些错误可能与连接信息糟糕或连接到数据库的其他问题有关,因此其他函数都失败了。

查看更多信息错误的一个简单方法是尝试使用它们的$throw_exception_on_error函数:

代码语言:javascript
复制
function register($email, $password, $firstName, $lastName)
{
    //check to see if the user already exists
    //poll the DB to see if the email is already in there.
    DB::$error_handler = false; // since we're catching errors, don't need error handler
    DB::$throw_exception_on_error = true;

    try {
      $results = DB::QUERY("SELECT email FROM users WHERE email = %s", $email);
    } catch(MeekroDBException $e) {
      echo "Error: " . $e->getMessage() . "<br>\n"; // this should be a better error...
      echo "SQL Query: " . $e->getQuery() . "<br>\n"; // SELECT email FROM users...

    }
    ...
票数 1
EN

Stack Overflow用户

发布于 2015-11-22 00:05:38

如果包含/include_一旦出现问题,您将得到完全不同的消息。首先,我建议使用这个库的最新版本,即2.3,最重要的是,检查您正在使用的PHP版本。

据我所知,MySQLi连接很可能有问题,根据您的connection版本,检查以确保连接没有失败,如本页所示,http://php.net/manual/en/mysqli.connect-error.php出现了问题。

警告mysqli->connect_error属性只在PHP版本5.2.9和5.3.0中正常工作。如果需要与早期版本兼容,则使用mysqli_connect_error()函数。

由于没有连接,这将导致在此表单中看到的多个警告。

警告: mysqli::method_name():无效对象或资源mysqli

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

https://stackoverflow.com/questions/33849739

复制
相关文章

相似问题

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