プロジェクトでは、基本的なログイン システムを作成する必要があります。REST を使用してページ全体を管理しようとしています。今、私はここでいくつかの重要な概念が欠けているか誤解していると信じていますが、私は何年もの間これを行う方法を理解しようとしてきました. この演習ではライブラリの使用が許可されていないため、JQuery を使用できません。
だからここに私の問題があります:私はユーザー名の長さとパスワードの長さなどをチェックする.jsファイルを持っています....この.jsファイルには、ユーザー名とメールをPHPに送信して存在しないことを確認するajax関数もありますSQL を使用して、その電子メールまたはユーザー名を持つ既存のユーザー。
function checkUser()
{
var ajax = new Ajax(); // instantiates my external ajax class
var email = document.getElementById("newEmail").value;
var username = document.getElementById("newUserName").value
ajax.post("index.php?method=register&check=check", "newEmail=" + email + "&newUserName=" + username, callbackCatch)
}
function callbackCatch(param)
{
var responseMessages = JSON.parse(param.responseText);
emailMessage = responseMessages.emailMessage;
userNameMessage = responseMessages.userNameMessage;
userEmailIsOk = responseMessages.userEmailIsOk;
userNameIsOk = responseMessages.userNameIsOk;
release = true;
if((userEmailIsOk + userNameIsOk) != 2)
{
console.log(userEmailIsOk + userNameIsOk);
release = false;
}
updateMessageFields();
}
JSON 文字列を取得して解析し、フォームの値と比較します。すべてが見つかりダンディになったら、フォーム ページの登録ボタンをクリックします。これにより、すべてのフィールドが php ファイルにポストされます。ただし、これを行うと、外部 ajax クラスが毎回何らかの形でアクセスされ、エラーが発生するようです: NS_NOINTERFACE: コンポーネントに要求されたインターフェイスがありません。
私は、投稿を行うたびに AJAX がバックグラウンドで実行されているため、フォームからでも、この場合は互換性のないパラメーターを送り返そうとすると想定しています。
これを修正する方法がわかりません。転送を処理することになっている私の PHP ファイルは次のようになります。
require_once("../database/table.php");
クラステスト{
private $SQLtable;
private $newEmail;
private $newPswrd;
private $newUserName;
private $newFullName;
public function test()
{
$this->SQLtable = new table();
$this->initClassVars();
$this->generateUserName();
$this->regUser();
}
function initClassVars()
{
if(isset($_POST["newPassword"]))
{
$this->newPswrd = $_POST["newPassword"];
}
if(isset($_POST['newUserName']))
{
$this->newUserName = $_POST['newUserName'];
}
if(isset($_POST["newEmail"]))
{
$this->newEmail = $_POST["newEmail"];
}
if(isset($_POST["newFullName"]))
{
$this->newFullName = $_POST["newFullName"];
}
}
function generateUserName()
{
if(isset($_POST["newFullName"]))
{
$suggestedUserName = str_replace(" ", "", $this->newFullName);
$this->newUserName = $suggestedUserName;
}
}
function regUser()
{
$this->SQLtable->registerUser($this->newEmail, $this->newPswrd, $this->newFullName, $this->newUserName);
$sessionKey = $this->genKey();
$this->SQLtable->authUser($this->newEmail, $this->newPswrd, $sessionKey);
header("location:Location:index.php?method=feed&key=$sessionKey&user=$this->newEmail");
exit;
}
function genKey($length = 16)
{
$options = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; //Range
$key = ""; //Empty holder for key
for($i = 0; $i < $length; $i++)
{
$code = rand(0, strlen($options) - 1);
$key .= $options[$code]; // Loops through as long as the $length is set and adds a random string char from $options to build a new key.
}
return $key;
}
}
ご覧のとおり、API キーを使用して認証を制御しようとしています。私はまだそれでクッキーを動作させていませんが、この登録をソートする方法を理解した後はうまくいきません.
不明な場合は申し訳ありません。これはstackoverflowに関する私の最初の質問であり、基本的に、約8か月前までコード行を書いたことがないので、初心者のコードで我慢してください:D. ありがとう..
わかりましたので、HTML と関数が呼び出されている場所は次のとおりです。これは私のフォーム HTML ファイルです。Doctype とヘッダーは、何度も何度も使用するため、個別に追加されます。
<body>
<h1> Thanks! <!-- $user -->, you're almost there. We just need a few more details </h1>
<form id="registerUser" name="registerUser" action="index.php?method=test" method="post">
<p>
<label for="newFullName">Full Name: </label>
<input type="text" id="newFullName" name="newFullName" value="$newFullName" />
<span id="nameMessage"></span>
</p>
<p>
<label for="newUserName">User Name: </label>
<input type = "text" id="newUserName" name="NewUserName" value="$newUserName" />
<span id="nicknameMessage"><!-- $newUserNameMessage --></span>
</p>
<p>
<label for="newEmail">Email: </label>
<input type="text" id="newEmail" name="newEmail" value="$newEmail" />
<span id = "newEmailMessage"><!-- $newEmailMessage --></span>
</p>
<p>
<label for ="newPassword">Password: </label>
<input type="password" id="newPassword" name="newPassword" value="$newPswrd" />
<span id = "newPasswordMessage"></span>
</p>
<input type="submit" id="register" disabled="disabled" value="Register" onclick=""/>
</form>
<p><a href="../../../Index.html"> Click here to go back to the login site and login. </a></p>
<script type="text/javascript" language="javascript" src="../../js/net/ajaxHandler.js"> </script>
<script type="text/javascript" language="javascript">var bootstrap = new ajaxHandler(); bootstrap.init(); </script>
</body>
</html>
JS ファイル全体は次のとおりです。少し面倒ですが、これは私がとてもいじっているためです。
var ajaxHandler = function()
{
var self = this;
var release = true;
var nameField;
var userField;
var emailField;
var passWordField
var emailMessage;
var userNameMessage;
self.init = function()
{
addEventListeners();
checkFormForErrors();
}
self.redirect = function ()
{
}
function addEventListeners()
{
nameField = document.getElementById("newFullName");
userField = document.getElementById("newUserName");
emailField = document.getElementById("newEmail");
passWordField = document.getElementById("newPassword");
Event.addEventListener(nameField, 'click', checkFormForErrors);
Event.addEventListener(userField, 'click', checkUser);
Event.addEventListener(emailField, 'click', checkUser);
Event.addEventListener(passWordField, 'click', checkFormForErrors);
Event.addEventListener(nameField, 'keyup', checkFormForErrors);
Event.addEventListener(userField, 'keyup', checkUser);
Event.addEventListener(emailField, 'keyup', checkUser);
Event.addEventListener(passWordField, 'keyup', checkFormForErrors);
}
function checkPassword()
{
var passWordIsOk;
var patt = /\s/;
var whiteSpace = patt.test(passWordField);
var passwordLength = passWordField.value.length;
if (passwordLength < 8 )
{
document.getElementById("newPasswordMessage").innerHTML = "Your passowrd must be at least 8 charachters long. ";
passWordIsOk = false
if (whiteSpace)
{
document.getElementById("newPasswordMessage").innerHTML += "Your Password cannot contain any spaces.";
passWordIsOk = false
}
}
else
{
document.getElementById("newPasswordMessage").innerHTML = "Password looks good";
passWordIsOk = true
}
return passWordIsOk;
}
function checkName()
{
var userNameIsOk;
var nameMessage = document.getElementById("nameMessage");
if (!nameField.value)
{
nameMessage.innerHTML = "You need to enter a name."
userNameIsOk = false;
}
else
{
nameMessage.innerHTML = "Name looks great."
userNameIsOk = true;
}
return userNameIsOk;
}
function checkEmailSyntax()
{
var EmailIsOk = true
var patt = /^([\w!.%+\-])+@([\w\-])+(?:\.[\w\-]+)+$/ ;
var format = patt.test(emailField.value);
if (!format)
{
document.getElementById("newEmailMessage").innerHTML = "Your email does not appear to be in the right format."
EmailIsOk = false;
}
return EmailIsOk
}
function checkFullNameSyntax()
{
var nameIsOk = true
if (document.getElementById("newUserName").value == "")
{
document.getElementById("nicknameMessage").innerHTML = "You must enter a username. You can always change it later."
nameIsOk = false
}
return nameIsOk;
}
function checkUser()
{
var ajax = new Ajax();
var email = document.getElementById("newEmail").value;
var username = document.getElementById("newUserName").value
ajax.post("index.php?method=register&check=check", "newEmail=" + email + "&newUserName=" + username, callbackCatch)
}
function callbackCatch(param)
{
var responseMessages = JSON.parse(param.responseText);
emailMessage = responseMessages.emailMessage;
userNameMessage = responseMessages.userNameMessage;
userEmailIsOk = responseMessages.userEmailIsOk;
userNameIsOk = responseMessages.userNameIsOk;
release = true;
if((userEmailIsOk + userNameIsOk) != 2)
{
console.log(userEmailIsOk + userNameIsOk);
release = false;
}
updateMessageFields();
var ajax = "";
}
function updateMessageFields()
{
document.getElementById("nicknameMessage").innerHTML = userNameMessage;
document.getElementById("newEmailMessage").innerHTML = emailMessage;
checkFormForErrors();
}
function checkFormForErrors()
{
console.log('hi');
var nameOk = checkFullNameSyntax()
console.log(nameOk);
var passOk = checkPassword()
console.log(passOk);
var userOk = checkName()
console.log(userOk);
var emailOk = checkEmailSyntax()
console.log(emailOk);
console.log(release);
document.getElementById("register").disabled = true;
if(release && nameOk && passOk && userOk && emailOk)
{
console.log('hey');
console.log(release && nameOk && passOk && userOk && emailOk)
document.getElementById("register").disabled = false;
}
}
}