私はPerl(CGIモジュールを使用しています)とrecaptchaを使って申し込みフォームを作成しています。フォームは正常に動作し、SQLデータベースにデータを送信します。ただし、フォームを使用して別のユーザーを作成すると、データベースに入力されたデータは最初のユーザーと同じになります。 my $var = $cgi->param('param_name');
を使用して確認ページのフォームデータを取得しています。パラメータを消去する必要がありますか、それとも別のものですか。 (私は$cgi->delete_all();
を試みたが、それは何もしていないようでした)Perl CGI以前のデータを再利用するフォーム
フォーム認証コード:(それは文字通りプロトタイプなので、セキュリティがまだ解決されていません)
my $challenge = $q->param('recaptcha_challenge_field');
my $response = $q->param('recaptcha_response_field');
my $username = $q->param('Username');
my $password = $q->param('Password');
my $name = $q->param('Name');
my $email = $q->param('Username');
my $security = $q->param('Security');
my $answer = $q->param('Answer');
my $permissions = 1;
# Verify submission
my $result = $c->check_answer(
"my_private_key", $ENV{'REMOTE_ADDR'},
$challenge, $response
);
if ($result->{is_valid}) {
insert_new_user();
print $q->redirect('cgi-bin/admin/text_campaign.pl');
}
else {
# Error
print $q->redirect('login.pl?crc=false');
}
###############################################################################
# Sub Routines #
###############################################################################
sub insert_new_user
{
my $sql = "INSERT INTO users (u_username, u_password, u_realname, u_email, u_security_question, u_security_answer, PRIVILEGES_idPRIVILEGES)
VALUES(?, ?, ?, ?, ?, ?, ?) ";
my $sth=$dbh->prepare($sql);
$sth->execute($username, $password, $name, $email, $security, $answer, $permissions);
$sth->finish();
return;
}
同じことを意味しますか?フォームを読み込んだとき、または挿入した後に同じレコードが取得されたときに、事前に設定されていますか? FastCGIやmod_perlなどを使用していますか? – Cfreak
こんにちは、それは同じレコードです。私は、いくつかのテスト情報で「新規ユーザー1」としてフォームに記入して提出します。これは期待どおりのSQLデータベースに入りますが、フォームに戻っていくつかのテスト情報で「新規ユーザー2」として入力すると、「新規ユーザー1」と同じ情報を持つSQLデータベースに移動します。ソースファイルを変更してもう一度入力した場合にのみ、別の情報が入力されます。私はCGIとCaptcha :: reCAPTCHAモジュール以外は使用していません。 – Enigma
POSTの代わりにGETを使用してフォームを送信していますか?おそらく以前の投稿のURLに値が入っていた可能性があります。 – gpojd