2017-01-12 10 views
-1

フォーラムを見てきましたが、私を助けたものは見つかりませんでした。 ここに完全なコードがあります。エラーは$ result = $ conn-> query($ query)で発生します。 私はPHPに新しいので、私の上で簡単に行く、笑。致命的なエラー:メンバー関数のquery()エラーを呼び出す

<?php 
include 'Register.html'; 
if(isset($_POST['Submit'])) 
{ 
    SignUp(); 
} 
global $conn; 
$servername = "localhost"; 
$username1 = "root"; 
$password1 = ""; 
$dbname = "fiesta_db"; 

// Create connection 
$conn = new mysqli($servername, $username1, $password1, $dbname); 

// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
    return $conn; 
} 

function NewUser() 
{ 
    $username = $_POST['username']; 
    $email = $_POST['email']; 
    $password = $_POST['password']; 


    $register = "INSERT INTO website (username, email, password) 
    VALUES ($username, $email, $password)"; 

    if ($conn->query($register) == TRUE) { 
    echo "Successfully registered."; 
    } 
    else { 
    echo "Wrong syntax"; 
    } 
} 
function SignUp() 
{ 
    if(!empty($_POST['username'])) 
    { 
    global $conn; 
    $query = "SELECT * FROM website WHERE username ='$_POST[username]' AND email ='$_POST[email]'; "; 
    $result = $conn->query($query); 


    if ($result->num_rows != 0) 
    { 
     NewUser(); 
    } 
    else { 
     echo "Username or Email already exist!"; 
    } 
    } 
    $conn->close(); 
} 
?> 

はここ

<!DOCTYPE HTML> 
<html> 
<head> 
<title>Sign-Up</title> 
</head> 
<body id="body-color"> 
<div id="Sign-Up"> 
<form action='register_do.php' method='post' 
    accept-charset='UTF-8'> 
<fieldset > 
<legend>Register</legend> 
<input type='hidden' name='submitted' id='submitted' value='1'/> 
<label for='username' >Username:</label> 
<input type='text' name='username' id='username' maxlength="50" /> 
<label for='email' >Email Address:</label> 
<input type='text' name='email' id='email' maxlength="50" /> 
<label for='password' >Password:</label> 
<input type='password' name='password' id='password' maxlength="50" /> 
<input type='submit' name='Submit' value='Submit' /> 

</fieldset> 
</form> 
</div> 
</body> 
</html> 

君たちは(完全ちょうどより多くの詳細を追加しようとしていない)に役立つことを願ってレジスタページで、私はもうこれがすべてであることを示すために、コードを持っていません。 バンプ

+1

*正確な*エラーと*ラインそれが起こるん正確にどのような*上では何ですか? '$ conn'が初期化されていないというエラーが表示された場合は、どこで初期化しますか?このコードはどこにもありません。 (これがうまく動作するようにするには、驚くべきSQLインジェクションの脆弱性が存在することに気付く価値があります) – David

+0

これは完全なコードではありません。PHPにも新しくなりました。 – Musti

+0

@ Fred-ii - 明らかに問題は不完全です。しかし、彼が与えた少しのエラーメッセージでさえ、問題は '$ conn'の値であることが明らかです。特定のメソッド名を見ずに「メソッド呼び出し」エラーに気付いただけで、99%の時間で同じ問題が発生すると想定しています。 – Barmar

答えて

0

メインコードで$connに割り当てる前に、SignUp()を呼び出しています。そのコードを下に移動します。

$servername = "localhost"; 
$username1 = "root"; 
$password1 = ""; 
$dbname = "fiesta_db"; 

// Create connection 
$conn = new mysqli($servername, $username1, $password1, $dbname); 

// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
    return $conn; 
} 

if(isset($_POST['Submit'])) 
{ 
    SignUp(); 
} 

また、メインコードでglobal $conn;文は必要ありません。関数の外部に割り当てられた変数は自動的にグローバルになります。関数内で文を必要とするだけで、グローバル変数にアクセスすることができます。

またNewUser()でクエリ内の引用符が欠落している:

$register = "INSERT INTO website (username, email, password) 
    VALUES ('$username', '$email', '$password')"; 

そしてSignUp()で、あなたは間違った条件を使用しています。ユーザ名が利用可能であるならば、それはする必要がありますので、SELECTクエリは、0行を返します。

if ($result->num_rows == 0) { 
    NewUser(); 
} else { 
    echo "Username or Email already exist!"; 
} 
+0

ありがとうございましたが、今はユーザーが既に存在していると言っています。 – Musti

+0

クエリーをエコーし​​て手で実行して、何が戻ってくるかを確認してください。 – Barmar

+0

どうすればいいですか? – Musti

関連する問題