include_once / include не работает

Я работаю над очень простой системой 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 — содержит каждую определенную константу, о которой я могу думать, так как я предпочел бы изменить одну константу здесь, чем искать в моем коде, чтобы найти столько экземпляров, которые я мог бы иметь в другом месте.

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

}

Для меня это должно работать.

ТЕМ НЕ МЕНИЕ:

Всякий раз, когда я пытаюсь запустить функцию 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.

Если вы, ребята, нуждаетесь в дополнительной информации, дайте мне знать, но я думаю, что я в значительной степени выложил все на стол.

Я не часто пишу здесь, поэтому, если я где-то пропустил какой-нибудь этикет, я заранее извиняюсь.

Спасибо! 🙂

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

}
...
1

Другие решения

Если бы это было проблемой с 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. Используйте функцию mysqli_connect_error (), если требуется совместимость с более ранними версиями PHP.

Поскольку нет никакой связи, это вызовет многократные предупреждения, которые вы видите в этой форме.

Предупреждение: mysqli ::method_name(): недопустимый объект или ресурс mysqli

0

По вопросам рекламы [email protected]