现在,我只是使用基本表单来检查密码。我希望它检查密码并基本保留在page.html上,以便我可以使用JavaScript来提醒错误的密码或其他内容。我真的不确定该怎么做。它似乎会带我到check.php。我对整个过程不太确定,任何帮助表示赞赏!谢谢!
page.html中
<form action="check.php" method="post">
<input type="password" name="password" />
<input type="submit" value="Submit" />
</form>
check.php
<?php
$password = $_POST['password'];
if ( $password != "testing" ) {
die();
}
?>
答案 0 :(得分:10)
PHP运行在Web服务器上,该服务器通常在物理上不同的计算机(服务器端)运行,而不是运行webbrowser(客户端)。这些机器通常通过网络连接。 HTTP是一种网络协议。 webbrowser发送HTTP请求。 Web服务器检索HTTP请求,其URL指示应将其转发到PHP以进行进一步处理。 PHP检索HTTP请求并执行处理并返回HTTP响应。通常是普通的香草HTML页面的味道。 Web服务器将HTTP响应发送回Web浏览器。
JavaScript在webbrowser上运行,对PHP一无所知,因为它在Web服务器上运行。 PHP反过来也对JavaScript一无所知(尽管它可以生成一些JS代码,而这些代码又通过HTTP发送到webbrowser)。在JS和PHP之间进行通信的唯一方法是HTTP。让JS触发HTTP请求并检索HTTP响应的方法之一是使用XMLHttpRequest
。这是Ajax背后的核心技术。
我在您的问题历史中看到您已经熟悉jQuery。它是一个JS库,具有许多方便的函数来触发ajaxical请求。在这种特定情况下,您希望使用$.post
。 E.g。
$('#formId').submit(function() {
$.post('check.php', $(this).serialize(), function(valid) {
if (valid) {
alert('Valid!');
} else {
alert('Invalid!');
}
});
return false; // Important! This blocks form's default action.
});
使用check.php
:
<?php
echo $_POST['password'] != "testing";
?>
然而,这不是unobtrusive。如果用户已禁用JS,则所有操作都将失败。最好的办法是检查PHP是否有jQuery触发了ajaxical请求并进行相应处理:
if ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
// Ajax.
} else {
// No ajax.
}
或者,您可以让jQuery也可以访问不同的URL或添加额外的参数。
更新:以下是不使用jQuery时JavaScript的外观:
document.getElementById('formId').onsubmit = function() {
var xhr = (window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
if (xhr.responseText) {
alert('Valid!');
} else {
alert('Invalid!');
}
}
}
xhr.open('POST', 'check.php', true);
xhr.send(serialize(this));
return false; // Important! This blocks form's default action.
}
function serialize(form) {
var query = '';
for(var i = 0; i < form.elements.length; i++) {
var e = form.elements[i];
if (!e.disabled && e.name
&& ((e.type != 'checkbox' && e.type != 'radio') || e.checked)
&& (e.type != 'submit' || e == document.lastClicked))
{
if (query.length) query += '&';
query += e.name + '=' + encodeURIComponent(e.value);
}
}
return query;
}
document.onclick = function(e) {
e = e || event;
document.lastClicked = e.target || e.srcElement;
}
臃肿和冗长,是的;)
答案 1 :(得分:2)
如果您想要保持在同一页面上,则必须使用ajax。我建议使用jquery和jquery's post function。
基本上,您创建了一个在单击登录按钮时调用的javascript函数。该函数将向check.php发送请求。 Check.php将输出一条状态消息(可能为1表示成功,0表示失败)将返回到原始脚本。从那里你可以输出一条消息说无效密码,或者设置一个cookie,如果它是正确的。
答案 2 :(得分:2)
您尝试做的简单解决方案(基本上是AJAX)是:
当然,这些都是广泛的。实际上,你需要你的php脚本在发出AJAX请求(由JavaScript发出请求)时提供一种响应,并在常规表单POST请求页面时提供另一种响应 - 你确实希望它在没有JavaScript - 对吧?您可能希望JavaScript更新页面内容而不是警告框。您需要PHP脚本设置会话变量,以便他们访问的下一页知道他们已登录。
广泛招数。
阅读jQuery AJAX documentation可能有所帮助。
答案 3 :(得分:0)
在设计网站时,如果没有它,一切正常后,请务必添加JavaScript。原因是双重的。首先,有些人在没有打开的情况下浏览。另一个原因是,那些破解者总是可以查看和编辑JavaScript。
此方法要求您具有单独的PHP文件,以验证密码是否成功。原始页面上的所有内容(HTML和JS)都应该只发送密码并可能等待请求。要使事物保持在同一页面上,您可以使用AJAX发送输入密码并打印出它收到的响应。如果你不想要头脑上的开销,jQuery使AJAX变得简单。
通过HTTPS使用POST比使用GET和HTTP更好。当然,跟踪会话变量,您可能还想限制从第一次收到表单到实际提交表单的时间。