2017-08-15 18 views
0

小さな問題があります。私はセッションで、単純なレジスタ/ログインシステムを作成しようとしていると私はこのエラーを得た:致命的なエラー:非オブジェクトのメンバー関数query()を呼び出すエラー

Fatal error: Call to a member function query() on a non-object in C:\xampp\htdocs\members\includes\login.inc.php on line 9

これは、コードの該当する行です:

$result = $conn->query($sql); 

私はそれが働いていた試みた最初の時間を。

コードの残りの部分は:それは結構です内

<?php 
if ($_SERVER['REQUEST_METHOD'] == 'POST') 
{ 
    $email  = $_POST['email']; 
    $password = md5($_POST['password']); 
    $sql = "SELECT email, password FROM member WHERE email = '$email' AND password = '$password'"; 
    $result = $conn->query($sql); 

また、私はMYSQLを接続するために使用さをdb.php、およびすべてのものを持っています。

+0

_ $ conn_はどこに定義されていますか? –

+0

使用しているデータベースライブラリが何であれ、間違いで例外がスローされないようです。 (必須の注釈:SQLインジェクションとパスワードのハッシュについては、googleを参照してください) –

+0

デバッグのヘルプを求める質問(「なぜこのコードは機能しませんか?」)には、目的の動作、特定の問題またはエラー、質問自体に。明確な問題文がない質問は、他の読者にとって有用ではありません。参照:[mcve]を作成する方法。あなたの*質問を改善するために "編集"リンクを使用してください - コメントでより多くの情報を追加しないでください。ありがとう! – GhostCat

答えて

1

I cannot understand why, the first time I tried it was working I guess and now this kind of error.

I'm also having the db.php which is used to connect the MYSQL and everything inside is fine.. could someone explain me why I keep facing this error ?

私は推測するつもりです。私は、データベース接続の設定を「処理する」別のファイル(おそらくdb.phpと呼ばれる)があると推測しています。私はさらにあなたのウェブアプリケーションにrequire()(またはinclude())のファイルチェーンがあると推測しています。

これは私が気にするよりも多くの時間を思い出しました。これは、コードを過去に残しておく必要があるPHP内の論理的な塊に分ける非常に古くからの方法です。

私は、あなたが以前にを別のスクリプトで定義していたと推測しています。の前にのコードが含まれています。コード実行の後半で依存関係にあったグローバル変数。

問題はです。これは、の問題です。クイック/ハックの修正は、$connの名前を変更するか、元の宣言を元に戻し、グローバルになっていることを確認して、の前にのコードが実行されていることを確認してください。

適切な修正(私見)は、フレームワーク使用して見ている(Laravel、ルーメン、CodeIgniterの、Yiiのを、多くのがあります - お好きなところをお選びください)と依存性注入、オートローディングと名前空間のトピックをよく読んで。なぜグローバル変数宣言がメンテナンス不可能なコードになるのか考えてみてください。簡単にあなたのプロジェクトに自動的にロードすることができ

あなたは完全なフレームワークに行くには本当に消極的であれば、最低でもdoctrineのようないくつかのデータベース抽象化ライブラリを見ている(そしてそれがdbalサブライブラリーです) via composer

-1

先頭から:

「db.php」が必要です。 $ conn = new db();

0

Sascha既に指摘されているように、$connはまったく定義されていないか、オブジェクトではありません(エラーメッセージ)。

あなたが提供したコードサンプルから、使用している接続オブジェクトの種類を特定するのは難しいですが、あなたのケースではPDOまたはmysqliのいずれかになるとは言えません。

簡単にするため、mysqliを使用しましょう。 (上記引用したドキュメントから撮影短縮例)mysqliのに基づいて、作業コードサンプルは、次のようになります。

$conn = new mysqli("localhost", "my_user", "my_password", "world"); 
$result = $conn->query($sql); 

あなたのコードが今SQLの傾向があるとして、あなたが本当に、いわゆるプリペアドステートメントのために行く必要がありますがすでに述べたように注射する。

私は結婚式の答えをリンクし、準備された声明に関連するPHP文書へのリンクを提供していたと思いますが、私の評判の点がないと私にはできませんので、PHPの迅速な検索をしてください&準備されたステートメント。

関連する問題