0

私は、プレーンな 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 を使用して登録フォームを作成および検証する必要がありますか?

4

4 に答える 4

1

私はフォームタグを完全にスキップしていました。それらは見苦しく、アクションは 1 つしか持てず、入れ子にすることもできません。代わりに、たとえば onclick ハンドラーで ajax 投稿を使用し、必要に応じてそれらの成功ハンドラーで Web ページをリロードします。

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を無効にすることを決して気にしません.なぜなら彼らは神話だと思うからです:)

(これにはjqueryを含める必要があることに言及する価値があります)

于 2013-08-11T09:56:53.023 に答える
0

私が言ったように、これはボットによるスパムを防止する 1 つの方法です。ほとんどのボットを停止します。これを実装した後、ボットで問題が発生することはありませんでした

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'");
于 2013-08-11T09:40:40.780 に答える