1

私は学校のプロジェクト用の非常に単純な CMS システムに取り組んでいますが、少し問題があります。

現在、私のウェブページは次のように設定されています。

  • ユーザーがアクセスできる作成したすべての Web ページ - 上部と下部に、それぞれ include_once(header.php) と include_once(footer.php) があります。これらには、読み込まれるページの上部と下部が含まれます。

私のheader.phpには、他のさまざまなHTMLとともにこれがあります:

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

constants.php の場合 - 考えられるすべての定義済み定数が含まれています。コードを検索して他の場所にある可能性のある多くのインスタンスを見つけるよりも、ここで 1 つの定数を変更したいからです。

Functions.php の場合 - この CMS で使用するために作成しているすべての関数が含まれています。PHPMailer を使用した電子メール機能から、データベース操作のための MeekroDB を使用した登録とログインまで、すべてが含まれています。

ここに問題があります。

アカウント登録用のページに、この行に沿ったものがあります

//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::QUERY 割り当てを使用してデータベース情報を宣言します。

//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";

実際の登録機能では、これがあります:

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;
        }
    }

}       

私にとって、これはうまくいくはずです。

でも:

register() 関数を実行しようとするたびに、MeekroDB に関連する大量のエラーが発生し、それらを修正する方法が 100% わかりません (それが INCLUDE の問題なのか、それとも meekroDB の問題なのか?)

ここに私が得ているエラーがあります。

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 接続が何らかの形でバグを発生させています。

もっと情報が必要な場合は、私に知らせてください。しかし、私はほとんどすべてをテーブルに載せたと思います。

ここにはあまり投稿しないので、どこかで何らかのエチケットを見逃していた場合は、事前にお詫び申し上げます。

ありがとう!:)

4

2 に答える 2

1

meekrodb.php ファイルをたどると、接続を試みたばかりの $mysql オブジェクトで最初のエラーが呼び出されるため (meekrodb.php ファイルを見て、私が話していることを確認してください)、これらのエラーはおそらく接続情報が正しくないか、データベースへの接続に関するその他の問題に関係しているため、他の機能が失敗しています。

より有益なエラーを表示する簡単な方法は、それらの$throw_exception_on_error関数を使用してみることです。

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...

    }
    ...
于 2015-11-21T23:48:00.233 に答える
0

これが include/include_once の問題である場合、まったく異なるメッセージが表示されます。まず、ライブラリの最新バージョンである 2.3 を使用することをお勧めします。最も重要なのは、使用している PHP のバージョンを確認することです。

私が知る限り、MySQLi 接続に問題がある可能性が最も高く、PHP のバージョンによっては、このページhttp://php.net/manualにあるように、接続が失敗していないことを確認するためのチェックに問題がありました。 /en/mysqli.connect-error.php

警告 mysqli->connect_error プロパティは、PHP バージョン 5.2.9 および 5.3.0 以降でのみ正しく機能します。以前のバージョンの PHP との互換性が必要な場合は、mysqli_connect_error() 関数を使用してください。

接続がないため、このフォームに複数の警告が表示されます。

警告: mysqli:: method_name (): 無効なオブジェクトまたはリソース mysqli

于 2015-11-22T00:05:38.420 に答える