簡単なSPA
会員登録システムを作っています。登録すると、ユーザーはデータベースに保存され、プロファイル ページにリダイレクトされます。かなり単純に思えますが、「joe」、パスワード「joe」、電子メール「joe@joe.com」で登録しようとすると、プロファイル ページにリダイレクトされ、自分のユーザー名が「root」であることが表示されます。mysqli 接続変数がデータの保存と混同されていないことを確認し$username
ました (値が「root」であるため)。これが私のコードです:
checkreglogin.php
<?php
session_start();
$host="localhost"; // Host name
$username="root"; // Mysql username
$password="bonjour3"; // Mysql password
$db_name="itit"; // Database name
$tbl_name="members"; // Table name
// Connect to server and select databse.
$mysqli = new mysqli("$host", "$username", "$password", "$db_name")or die("cannot connect");
// Define $myusername and $mypassword
$rmyusername=$_POST['rmyusername'];
$rmypassword=$_POST['rmypassword'];
$myemail=$_POST['myemail'];
$sql2 = $mysqli->prepare("SELECT * FROM $tbl_name WHERE username=? and password=?");
$sql2->bind_param('ss',$rmyusername,$rmypassword);
$sql2->execute();
$sql2->store_result();//apply to prepare statement
$numRows = $sql2->num_rows;
if($numRows != null) {
echo "Username taken.";
session_destroy();
}
else {
// Insert data into mysql
$sql = "INSERT INTO $tbl_name(username, password, email)VALUES(?,?,?)";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("sss", $rmyusername, $rmypassword, $myemail);
$stmt->execute();
$_SESSION['username'] = $rmyusername;
}
?>
上記のスクリプトは、ユーザーが登録すると実行されます。次に、以下のプロファイル ページに「リダイレクト」されます (実際には SPA であるからではありません)。
テンプレート/login_success.php
<?php
session_start();
?>
<h1>Login Successful</h1>
<h2>Username: <? echo $_SESSION['username']?></h2>
<div id="logoutlinkdiv" >
<a href = "#" >Log out</a>
</div>
ユーザー名には「joe」と表示されるはずですが<? echo $_SESSION['username']?>
、代わりに「root」と表示されます...
アップデート
js/application.js
$(document).ready(function() {
$.get('templates/regform.php', function(data) {
$('#register').html(data);
$("#registerform").submit(function(e) {
e.preventDefault();
if ($('#rmyusername').val() != '' || $('#rmypassword').val() != '' || $('#myemail').val() != '') {
if(!isValidEmailAddress($('#myemail').val())) {
alert("Please enter a valid email address");
}
else {
$.post("checkreglogin.php", $(this).serialize(), function(){
$("#main").load("templates/login_success.php");
$("#login").remove();
$("#register").remove();
});
}
} else {
alert('Please enter a Username/Password and email.');
}
});
});
});
アップデート
$_POST
呼び出しを呼び出しに変更し$_GET
、URLを使用してユーザーを作成しましたが、機能しましたが、警告のある空白のページが表示されました:
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /Users/Eamon/Sites/checkreglogin.php:1) in /Users/Eamon/Sites/checkreglogin.php on line 3