этот код правильный?(Метод PHP POST с использованием catpcha) - PullRequest
1 голос
/ 22 апреля 2011

Я очень новичок в разработке php; и я решил создать систему входа пользователя. Для системы я хочу использовать систему captcha. Моя проблема в том, что когда я нажимаю кнопку «Отправить», я не могу отправить данные формы (два текстовых поля: имя пользователя и адрес электронной почты). Чтобы заставить это работать; я создал метод, который получает данные формы, эти данные отправляются следующим образом: method_name ($ POST ["username"], $ POST ["mail"]); Я хочу знать, если это правильно, или у него будут проблемы с безопасностью или что-то еще.

спасибо.

pd: извините за мой английский ... не хорошо. это страница указателя

    <?php
require_once('recaptchalib.php');
require_once('home.php');

$publickey = "foo";
$privatekey = "bar";

$error = null;

if ($_POST['action'] == "register") {
    $re_ip = $_SERVER["REMOTE_ADDR"];
    $re_challenge = $_POST["recaptcha_challenge_field"];
    $re_response = $_POST["recaptcha_response_field"];

    $resp = recaptcha_check_answer($privatekey, $re_ip, $re_challenge, $re_response);

    if ($resp->is_valid) {
        // procesar registro
            hello($_POST["username"],$_POST["usermail"]);
        exit;
    } else {
        $error = $resp->error;
    }
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>reCAPTCHA Demo</title>
<style type="text/css">

body {
    font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
    font-size: 12px;
    color: #333;
    line-height: 18px;
}
.casilla {
    font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
    font-size: 11px;
    color: #333;
    padding: 2px 4px;
    width: 298px;
    margin-left: 3px;
}
h3 {
    color: #03C;
    font-size: 16px;
}

</style>
<link rel="stylesheet" href="stylesheets/css3buttons.css" media="screen"/>
</head>
<body>
<h3>Registro</h3>
<form method="post">
    <label for="username">Usuario</label><br />
    <input name="username" type="text" class="casilla" id="username" /><br />
    <label for="usermail">Email</label><br />
    <input name="usermail" type="text" class="casilla" id="usermail" /><br />
    <label for="usercheck">Verificaci&oacute;n</label><br />
    <?php echo recaptcha_get_html($publickey, $error); ?>
    <input type="hidden" name="action" value="register" />
    <button type="submit" name="btsend" value="Enviar">Iniciar Sesión</button>
</form>
</body>
</html>
**and this is other page**

    <!--
To change this template, choose Tools | Templates
and open the template in the editor.
-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
    </head>
    <body>
        <?php
        function hello($var1,$var2)
        {
            $mailFilter = "^(([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5}){1,25})+([;.](([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5}){1,25})+)*$";
            echo"HELLO WORLD\n".$var1."---".$var2;
            if (preg_match($mailFilter, $var2)) {
            echo "A match was found.";
            } else {
                echo "correo valido.";
            }
        }
        ?>
    </body>
</html>

1 Ответ

1 голос
/ 22 апреля 2011

Если форма не может быть отправлена, я бы предположил, что в объявлении формы отсутствует URL action=. Обычно вы пишете:

 <form method="POST" action="index.php">

Второе - это регулярное выражение электронной почты. Он пропускает типичные допустимые символы, но также не использует правильные разделители PCRE. Скорее используйте это вместо руководства preg_match $mailFilter:

 if (filter_var($var2, FILTER_VALIDATE_EMAIL)) {
...