Я работаю над новым веб-сайтом и переписал часть моего ранее работающего кода для нового, чтобы воссоздать систему входа в систему. К сожалению, переписанная версия не работает, поэтому позвольте мне объяснить, что происходит.
У меня есть "index.php", который содержит "titlemenu.php", который используется на каждой отдельной странице. Я намерен запустить окно входа в это меню заголовка (верхняя панель), чтобы люди могли войти в систему, независимо от того, какая страница у них есть, и когда они успешно входят в систему, она обновляет страницу, на которой они находятся в данный момент, чтобы они вошли в систему.
Пока бинго - работает. Они вошли в систему и просматривают страницы только для членов. Однако строка заголовка — это отдельная история. Он по-прежнему показывает «ВХОД» и «РЕГИСТРАЦИЯ», несмотря на вход в систему. Сразу же я подумал, что это проблема с этим конкретным php-файлом, поэтому я вошел только в этот php, минуя index. Когда я пытаюсь войти только на этой пустой странице, я получаю: Неустранимая ошибка: вызов функции, не являющейся членом, prepare() в строке 18 Я знаю, что обычно это означает, что ваша переменная не объявлена или нет был запущен, поэтому я решил устранить неполадки. Я сделал var_dump для каждой используемой переменной, которая вернула правильные результаты. Я проверил index.php, который не содержит ошибок, работает нормально и показывает, что пользователи вошли в систему. «С возвращением, RhapidFyre!» это то, что он говорит в индексе, но окно входа показывает, что я еще не вошел в систему.
loginheader.php
<?include "641a/database.php";?><div id="login"><?
$mydbid = $_SESSION['user'];
$myquery = "SELECT * FROM logins WHERE dbid = $mydbid";
$myrow = mysqli_fetch_assoc($myquery);
$myname = $myrow['nickname'];
if($_GET['do'] == "logout") {
unset($_SESSION['user']);
?><script type="text/javascript">
window.location.replace("index.php");
</script><?
}
if($_GET['do'] == 'login') {
$query = 'SELECT * FROM logins WHERE username = :username';
$query_params = array(':username' => $_POST['username']);
var_dump($query);
var_dump($query_params);
try
{
$stmt = $db->prepare($query); //LINE 18
$result = $stmt->execute($query_params);
}
catch(PDOException $ex)
{
?><script type="text/javascript">
window.location.replace("redirect.php?error=username");
</script><?
}(Further irrelevant code follows)
база данных.php
<? session_start();
$dbusername = "********";
$dbpassword = "********";
$dbhost = "localhost";
$dbname = "********";
$link = mysqli_connect($dbhost, $dbusername, $dbpassword, $dbname);
// PDO Initialization
try {
$db = new PDO("mysql:host={$dbhost};dbname={$dbname};charset=utf8", $dbusername, $dbpassword);
}
// If connection fails, die.
catch(PDOException $ex){
die("Failed to connect to the MySQL Server!" . $ex->getMessage());
}
Фрагмент index.php
<html>
<head>
<title>My Website Template</title>
<link rel="stylesheet" type="text/css" href="base.css"/>
</head>
<body>
<div id="header">
<?include "pages/titles.php";?>
<?include "pages/loginheader.php";?>
</div>
$db
равно false, что обычно означает, что ваше соединение не работает. Если бы он сказалundefined variable db
, то это потому, что он не был найден.$db
должен быть экземпляром PDO. - person Rasclatt   schedule 06.08.2016mysqli_
иPDO
? - person Rasclatt   schedule 06.08.2016index.php
сразу после включения сделайтеprint_r($db);
. Посмотрите, есть ли там PDO. Посмотрите, сохранилась ли она на той странице. - person Rasclatt   schedule 06.08.2016