スポンサー


    ウェブデザイン基礎講座

    フォトショップ講座

    HTML&CSS講座

    グラフィック講座

    Flash講座

    3D講座

    ウェブプログラミング講座

    サイトメンテナンス講座

    サイト紹介

    スペシャルリンク

サイト内検索

 メールマガジン

テクニック

Homeウェブプログラミング > PHPとGDを使ってCAPTCHAを実装する方法

PHPとGDを使ってCAPTCHAを実装する方法

投稿日:2008年3月4日   レベル:初心者    ソフトウェア:PHP Editors
ウェブサイトから送信を行うフォーム(お問い合わせページ、フォーラムへの投稿)を作ります。


Step1:フォームの制作準備
ウェブサイトから送信を行うフォーム(お問い合わせページ、フォーラムへの投稿)を作ります。

program_12998_01.jpg

<form method="post" action="">
<table bgcolor="#CCCCCC">
<tr><th>Contact us (Post new message):</th></tr>
<tr><td><textarea cols="30" rows="5"></textarea></td>&l
t;/tr>
<tr><th><input type="submit" value="Submit"></th></tr> </table>
</form>


Step2:CAPTCHA サンプルソース


続いて自動登録を行うスパム投稿を防ぐ必要があります。そのための一般的な方法はCAPTCHA−ランダムに生成される文字列の画像−を実装することです。

program_12998_02.jpg

簡単かつ素早くできるPHPソリューション

1. 画像を生成するPHPスクリプトを記述します。

<?php
session_start();
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

function _generateRandom($length=6)
{
$_rand_src = array(
array(48,57) //digits
, array(97,122) //lowercase chars
// , array(65,90) //appercase chars
);
srand ((double) microtime() * 1000000);
$random_string = "";
for($i=0;$i<$length;$i++){
$i1=rand(0,sizeof($_rand_src)-1);
$random_string .= chr(rand($_rand_src[$i1][0],$_rand_src[$i1][1]));
}
return $random_string;
}

$im = @imagecreatefromjpeg("captcha.jpg");
$white = ImageColorAllocate ($im, 255, 255, 255);
$black = ImageColorAllocate ($im, 0, 0, 0);
$rand = _generateRandom(3);
$_SESSION['captcha'] = $rand;
ImageString($im, 5, 2, 2, $rand[0]." ".$rand[1]." ".$rand[2]." ", $black);
$rand = _generateRandom(3);
ImageString($im, 5, 2, 2, " ".$rand[0]." ".$rand[1]." ".$rand[2], ImageColorAllocate ($im, 255, 0, 0));
Header ('Content-type: image/jpeg');
imagejpeg($im,NULL,100);
ImageDestroy($im);
?>


2. CAPTCHAの実装が必要なページの一番上に次の行を追加します。

<?php session_start() ?>


3. メッセージの送信を行う行の前に、CAPTCHAが訪問者による入力が有効かをチェックするよう次の行を追加します。

<?php
if($_SESSION["captcha"]==$_POST["captcha"])
{
//CAPTHCA is valid; proceed the message: save to database, send by e-mail ...
}
?>


4. 最後にフォームにCAPTCHAを追加します。

program_12998_03.jpg

<?php session_start() ?>
<form method="post" action="">
<table bgcolor="#CCCCCC">
<tr><th>Contact us (Post new message):</th></tr>
<tr><td><textarea cols="30" rows="5" name="message"></textarea></td></tr>
<tr><td align="center">CAPTCHA:<br>
(antispam code, 3 black symbols)<br>
<table> <tr> <td> <img src="captcha.php" alt="captcha image"> </td> <td> <input type="text" name="captcha" size="3" maxlength="3"> </td> </tr> </table>
</td></tr>
<tr><th><input type="submit" value="Submit"></th></tr>
</table>
</form>
<?php
if(isset($_POST["captcha"]))
if($_SESSION["captcha"]==$_POST["captcha"])
{
//CAPTHCA is valid; proceed the message: save to database, send by e-mail ...
echo 'CAPTHCA is valid; proceed the message';
}
else
{
echo 'CAPTHCA is not valid; ignore the submission';
}
?>

引用:Web Design Library 著者:Encaps翻訳:菊池



スポンサードリンク

コメント

ランダム記事5件

2016年5月の人気記事ランキング