[PHP-users 29470] Re: 数字認証画面を作りたい

鈴木孝征 takamasa @ thaliana.myhome.cx
2006年 6月 22日 (木) 16:59:27 JST


鈴木と申します。

> 数列が書かれたイメージを表示し、
> いくつかの選択候補の中から正しい数列を選んでもらう
> 数字認証画面を作っているのですが、
> 画像表示のところでつまづいています。

まずHTMLの出力とイメージの出力をわけましょう。
html.phpで
<html>
<body>
<img src="runner.php?num=1">
</body>
</html>
として、

runner.phpの中で
//ベース画像読み込み
$num_im1 = imagecreatefrompng('../image/num_im_base1.png');
(途中省略)
header('Content-type: image/png');
imagepng($num_im1);
//合成画像破棄
imagedestroy($num_im1);
とやりましょう。

まずhttp://your.server/runner.php?sel_num=1にアクセスしてきちんと目的の
画像を表示できるようにしてから次に進んだほうがいいと思います。

> また、正しい数字を選択したかどうかをどうやって確認すればよいのか
> (今のrunner.phpで生成した数字を、リンクにより再表示されるrunner.php
> にどうやって持ち越せばよいか)がわかりません。

基本的にセッションを使う必要があると思います。
a.php : HTMLを表示
b.php : 画像を送信
c.php : a.phpから送られてきたデータを解析
という3つのスクリプトを作成して、練習してはいかがでしょう。一つのPHP
ファイルでも処理できないことはないと思いますが、最初は個別に開発したほう
が理解が進むと思います。

以下参考までに(思いつきで書いていますのできっと動作しないでしょう)
a.php
<?php
session_start();
$_SESSION['number'] = 1234;
?>
<html>
<body>
<img src='b.php'>
<form action="c.php">
<input type='text' name='number'>
<input type='submit' value='送信'>
</form>
</body>
</html>

b.php
<?php
session_start();
//ベース画像読み込み
$num_im1 = imagecreatefrompng('../image/num_im_base1.png');

//数字の色の作成
$num_color1 = imagecolorallocate($num_im1, 255, 0, 0);

//数字の決定
$num1 = $_SESSION['number'];

//画像へ数字を書き込み
imagestring($num_im1, 100, 0, 0, $num1, $num_color1);

//合成画像出力
header('Content-type: image/png');
imagepng($num_im1);
//合成画像破棄
imagedestroy($num_im1);
?>

c.php
<?php
if($_SESSION['number'] == $_REQUEST['number']){
	print "OK";
}else{
	print "failed";
}
?>



PHP-users メーリングリストの案内