Re[2]: Нужна простенькая капча
От: Кодт Россия  
Дата: 23.07.07 13:54
Оценка:
Здравствуйте, Дм.Григорьев, Вы писали:

Спасибо за скрипт.
Я, кажется, вкурил в сессии. Вот здесь. http://www.phpfaq.ru/sessions

Действующий макет гостевухи (минимальный пример) приведён ниже.
А в реальности там будет, естественно, дофига проверок, запись в базу и проч, и проч.
<?
/////////
// gb.php

// сессию надо открывать перед отправкой заголовков,
// т.е. перед первым выводом html-я
session_start();
?>
<html>
<head>
<title>guest book</title>
</head>
<body>
<div>Hello!</div>
<?

// проверка - это post-запрос от моей формы, или что-то иное?
function isreply()
{
    return isset($_REQUEST['posted']);
}
// получение капчи из сессии и из запроса
function getcaptcha($t)
{
    if($t)
        return $_SESSION['captcha'];
    else if(isset($_REQUEST['captcha']))
        return $_REQUEST['captcha'];
    else
        return;
}
// проверка капчи
function checkpost()
{
    $good = getcaptcha(true);
    $test = getcaptcha(false);
    if(!isset($good))
        return 'failed to establish the session';
    if(!isset($test))
        return 'failed to accept the form';
    if($test != $good)
        return "expected $good, accepted $test";
    return;
}
// вот так я покажу форму
function showform()
{
    $digit = mt_rand(0,9);
    $names = array('zero','one','two','three','four','five','six','seven','eight','nine');
    $test = $names[$digit];
    $_SESSION['captcha'] = $digit;
?>
<form method=post action=gb.php>
<table>
<tr><td>Your name:</td><td><input type=text name=who value=''></input></td></tr>
<tr><td>Your email:</td><td><input type=text name=eml value=''></input></td></tr>
<tr><td>Your homepage:</td><td><input type=text name=url value=''></input></td></tr>
<tr><td>Your opinion:</td><td><input type=text name=msg value=''></input></td></tr>
<tr><td>Please type in the digit '<?= $test ?>':</td><td><input type=text name=captcha value=''></input></td></tr>
<tr><td>&nbsp;</td><td><input type=submit value='Send!'></td></tr>
</table>
<input type=hidden name=posted value=1></input>
</form>
<?
}//showform()

// вот так я покажу еггог
function showerror($err)
{
?><div><b>Error!!! <?= $err ?></b></div><?
}

// вот так я покажу результат ввода
function showresult()
{
    $who = $_REQUEST['who'];
    $url = $_REQUEST['url'];
    $eml = $_REQUEST['eml'];
    $msg = $_REQUEST['msg'];
?>
<div>You have posted:
<ul>
    <li>Name = <?= htmlspecialchars($who) ?></li>
    <li>URL = <?= htmlspecialchars($url) ?></li>
    <li>email = <? htmlspecialchars($eml) ?></li>
    <li>msg = <? htmlspecialchars($msg) ?></li>
</ul>
</div>
<?
}

// собственно, план работ:
if(isreply())
{
    $err = checkpost();
    if(isset($err))
    {
        showerror($err);
        showform();
    }
    else
    {
        showresult();
    }
}
else
{
    showform();
}

?>
</body>
</html>
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.