我想问一下,为什么有一个脚本打印表单比普通的HTML更好或更好。有什么区别?当我输入:
<form><input type="button" value="button" /></form>
或
<script type="text/javascript">
$form = $("<form></form>");
$form.append('<input type="button" value="button" />');
$('body').append($form);
</script>
如果用户在浏览器中禁用了javascript,该怎么办?
为了安全起见,普通的html和php是否足够,或者我应该使用javascript来构建和验证注册表单?
答案 0 :(得分:4)
我将从你的第一个问题开始 最好在HTML中制作表单,因为在禁用javascript的情况下,您的客户将使用您的应用程序遇到问题。
Secons问题:
最好使用PHP验证,因为javascript可能被具有基本黑客技能的人所欺骗。例如,在禁用JavaScript后,您的验证脚本将无效。
答案 1 :(得分:1)
没有必要使用Javascript生成它,你所做的只是让它变得更难,更难以维护。当你需要更改表单html时,处理Javascript字符串文字是非常讨厌。
答案 2 :(得分:1)
我用来完全跳过表单标签,它们很难看,你只能有一个动作,你不能嵌套它们。相反,我在onclick处理程序中使用ajax发布,并在必要时在这些成功处理程序中重新加载网页:
var data = {formvar1:3, formvar2: "foo"};
$.post('/foo/bar.php', data, function(webpage)
{
location.reload();
});
或者如果ajax处理程序返回json:
var data = {formvar1:3, formvar2: "foo"};
$.post('/foo/bar.php', data, function(result)
{
if (result.success)
{
alert("nice work!");
location.reload();
}
else
{
alert(result.message);
}
}, 'json');
哦,我的回答有点迟了所以你可以自由地忽略它。我从不关心人们禁用javascript因为我认为他们是一个神话btw:)
(值得一提的是这个东西需要包括jquery)
答案 3 :(得分:0)
就像我说的这是防止机器人向你发送垃圾邮件的一种方法。它将阻止大多数机器人。执行此操作后,我再也没有机器人的问题了
<强>的MySQL 强>
CREATE TABLE IF NOT EXISTS `key_validation` (
`key` varchar(64) NOT NULL,
`date` varchar(32) NOT NULL,
UNIQUE KEY `key` (`key`),
KEY `date` (`date`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
PHP REST Web服务(getKey.php)
<?php
//file that creates a connection to the database
require "db_connect.php";
if($_GET['mode'] == "get_key") {
$key = md5(microtime().rand());
mysql_query("INSERT INTO key_validation (`key`,`date`) VALUES ('$key','".time()."')");
echo json_encode($key);
exit();
}
?>
<强>的JavaScript 强>
function insertKeyIntoForm(form) {
$.getJSON('getKey.php?mode=get_key', function(data) {
$('<input>').attr({
type: 'hidden',
id: 'verify_key',
name: 'verify_key',
value: data
}).appendTo(form);
});
}
insertKeyIntoForm('#myFormId');
PHP将注册过程归档
//TODO
//permanently block ip addresses that requests this service more than x number of times a minute
function func_query_first_cell($query) {
if ($p_result = mysql_query($query)) {
$result = mysql_fetch_row($p_result);
}
return $result[0];
}
//to make sure is no spammer
if(func_query_first_cell("SELECT `key` FROM key_validation WHERE `key`='$verify_key'") == "")
exit();
else
db_query("DELETE FROM key_validation WHERE `key`='$verify_key'");