2015-11-21 51 views
1

我正在爲一個學校項目開發一個非常簡單的CMS系統,而且我遇到了一些麻煩。PHP - include_once/include不工作

現在,我的網頁被設置爲這樣:

  • 我創建一個用戶可以訪問的每一個網頁 - 在頂部和底部,我有一個include_once(header.php文件)和include_once( footer.php)。這些包含應該是加載的任何頁面的頂部和底部。

在我的header.php我都這樣了,其他雜項HTML一起:

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

對於constants.php - 包含了每一個定義的常量我能想到的,因爲我寧願改變在我的代碼中搜索一個常量,以查找我可以在其他地方找到的很多例子。

For 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文件,我宣佈使用DB :: QUERY的作業,MeekroDB我提到我的數據庫信息使用。

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

}  

對我來說,這應該工作。

但是:

每當我試圖運行寄存器()函數,我最終得到噸,涉及MeekroDB錯誤的,我不是100%確定如何解決這些問題(無論它是一個包括髮布日期,或許這是與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文件的方式,並在返回莫名其妙buggering我的MeekroDB連接。

如果你們需要更多的信息,請告訴我,但我想我已經把所有東西都拿出來了。

我不經常在這裏發帖,所以如果我錯過了某種地方的禮節,我提前道歉。

謝謝! :)

回答

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

    } 
    ... 
+0

我會檢查這一關是正確的答案,因爲你是那裏爲奇數信息正確(該死的錯別字) 非常感謝你。加上我不知道錯誤部分的拋出異常。感謝您的支持 – Pilapodapostache

+0

沒有汗 - 祝您的項目順利! –

0

如果這是與包括問題/ 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