私は新しいウェブサイトで作業しています。以前の作業用コードの一部を書き直して新しいものを作成し、ログインシステムを再作成しました。残念ながら、書き換えられたバージョンは動作しませんので、何が起こっているのか説明してください。非オブジェクト上のメンバー関数呼び出し(include database.php)
私は "index.php"を持っています。これは、すべての単一ページで使用される "titlemenu.php"を保持しています。私はこのタイトルメニュー(一番上のバー)でログインボックスを実行して、ユーザーが自分のページに関係なくログインできるようにします。ログインに成功すると、現在ログインしているページを更新します。
これまでのところ、ビンゴ - それは動作します。彼らはログインし、メンバーのみのページを表示します。ただし、タイトルバーは別の話です。それはまだログインしているにもかかわらず "ログイン"と "登録"を示しています。私はこれは特定のPHPファイルに問題があったので、私はそのPHPにのみログインし、インデックスをバイパスします。 致命的なエラー:18行目の非メンバ関数prepare()を呼び出す これは通常、変数が宣言されていないか実行されていないことを意味していますが、私はそれをトラブルシューティングすることに決めました。私は使用したすべての変数にvar_dumpを実行し、有効な結果を返しました。私はindex.phpをチェックしました。これはエラーがなく、正常に動作し、ユーザーはログインしていることを示しています。 "Welcome Back、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)
database.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です。これは通常、あなたの接続が機能していないことを意味します。もしそれが '未定義の変数db'と言うなら、それは見つからなかったからです。 '$ db'はPDOインスタンスでなければなりません。 – Rasclatt
なぜmysqli_と 'PDO'接続が好奇心の外に出ていますか? – Rasclatt
$ dbがfalseを返す方法が不思議です。 "database.php"はファイルの先頭に含まれています。私はそれを反映するために私のメインポストを更新します。なぜそれが間違っているのか見ていきます。 –