Работя върху нов уебсайт и пренаписах част от работещия си код за новия, за да пресъздам системата за влизане. За съжаление, пренаписаната версия не работи, така че позволете ми да обясня какво се случва.
Имам "index.php", който съдържа "titlemenu.php", който се използва на всяка отделна страница. Възнамерявам да стартирам полето за влизане в това заглавно меню (горна лента), така че хората да могат да влизат независимо коя е тяхната собствена страница и когато успешно влязат, това опреснява страницата, на която са в момента, така че да са влезли.
Досега бинго - работи. Те са влезли и разглеждат страници само за членове. Заглавната лента обаче е друга история. Все още показва „ВХОД“ и „РЕГИСТРАЦИЯ“, въпреки че съм влязъл. Веднага реших, че това е проблем с този конкретен php файл, така че влязох само в този php, заобикаляйки индекса. Когато се опитам да вляза само на тази празна страница, получавам: Фатална грешка: Извикване на функция, която не е член, подготви() на ред 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="/bgbase.css"/>
</head>
<body>
<div id="header">
<?include "pages/titles.php";?>
<?include "pages/loginheader.php";?>
</div>
$db
е невярно, което обикновено означава, че връзката ви не работи. Ако щеше да пише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