Итак, я пытаюсь реализовать проверку php на стороне сервера для формы регистрации.Я использую тонкий фреймворк вместе с шаблонами веток для отображения HTML.Я пытался использовать этот пример для достижения этой цели, но я думаю, что способ, которым я настроил свою тонкую маршрутизацию, мешает сообщениям об ошибках, отображаемым должным образом в регистрационной форме.
Способмое приложение работает в настоящее время, что пользователь переходит на страницу формы регистрации, которая представляет форму регистрации.Это показано здесь:
$app->get('/register', function(Request $request, Response $response)
{
return $this->view->render($response,
'register.html.twig',
[
'css_path' => CSS_PATH,
'landing_page' => $_SERVER["SCRIPT_NAME"],
'action_register' => './register/success',
//'initial_input_box_value' => null,
'page_title' => 'Login App - Register',
]);
})->setName('register');
'action_register' => './register/success',
представляет атрибут формы 'action' в форме ветки html и указывает, где и как обрабатываются данные формы и ответ на отправленную форму.Это можно увидеть здесь: (обратите внимание, что первые несколько строк страницы «регистрация / успех» - это пример, использованный в руководстве, которое я использовал для проверки php)
$app->post('/register/success', function(Request $request, Response $response) use ($app)
{
$nameError = " ";
if(isset($_POST['submit']))
{
if (empty($_POST["username"])) {
$nameError = "Name is required";
} else {
$name = test_input($_POST["username"]);
// check name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
$nameError = "Only letters and white space allowed";
}
}
}
function test_input($data)
{
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
$arr_tainted_params = $request->getParsedBody();
$sanitizer_validator = $this->get('validate_sanitize');
$password_hasher = $this->get('hash_password');
$tainted_email = $arr_tainted_params['email'];
$tainted_username = $arr_tainted_params['username'];
$tainted_password = $arr_tainted_params['password'];
$model = $this->get('model');
$sql_wrapper = $this->get('sql_wrapper');
$sql_queries = $this->get('sql_queries');
$db_handle = $this->get('dbase');
$cleaned_email = $sanitizer_validator->validate_email($tainted_email);
$cleaned_username = $sanitizer_validator->validate_username($tainted_username);
$cleaned_password = $sanitizer_validator->validate_password($tainted_password);
$hashed_cleaned_password = $password_hasher->hash_password($cleaned_password);
$model->set_user_values($cleaned_username, $cleaned_email, $hashed_cleaned_password);
$model->set_sql_wrapper($sql_wrapper);
$model->set_sql_queries($sql_queries);
$model->set_db_handle($db_handle);
if ($sanitizer_validator->get_validate_messages() == ' ')
{
$model->store_user_details();
$_SESSION["loggedin"] = true;
$_SESSION["username"] = $cleaned_username;
$arr_storage_result_message = '';
echo $sanitizer_validator->get_validate_messages(); //this will be turned into a proper alert prompt at a later date
}
if(isset($_SESSION["loggedin"]) && $_SESSION["loggedin"] === true)
{
return $this->view->render($response,
'display_user.html.twig',
[
'css_path' => CSS_PATH,
'landing_page' => $_SERVER["SCRIPT_NAME"],
//'action_register' => 'index.php/register',
//'initial_input_box_value' => null,
'page_title' => 'Login App - Display',
'username' => $cleaned_username,
'hashed_password' => $cleaned_password,
]);
}
});
Идея состоит в том, что пользовательсоздает учетную запись и затем входит в систему, в результате чего отображается display_user.html.twig.В противном случае сообщения об ошибках, касающихся проверки формы, должны отображаться в самой форме регистрации.Однако форма регистрации отображается только на странице / регистрации.Но регистрационная форма публикует данные и обрабатывает их на странице регистрации / успеха.
Так что я не уверен, что код руководства по проверке php находится не в том месте, или моя тонкая маршрутизация неверна для этой цели.проверки формы.Я думаю, что проблема заключается в том факте, что когда форма отправляется, она перенаправляет пользователя на новую страницу, а именно зарегистрироваться / успех.
В итоге я пытаюсь реализовать проверку формы php, такую как this в тонком приложении с использованием шаблонов веток.
Я также включу страницу register.html.twig формы регистрации, если это поможет:
{% extends 'header_footer.html.twig'%}
{% block content %}
<h3>Register A New Account</h3>
<form method = "post" action = " {{ action_register }} ">
<p>Email: <input type="text" name="email" ><br></p>
<p>Username: <input type="text" name="username" ><br></p>
<span class="error">* <?php echo $nameError;?></span> //code used in the php validation guide
<p>Password: <input type="text" name="password" ><br></p>
<!--<p>Password Confirm: <input type="text" name="password_confirm"><br></p> THIS WILL BE IMPLEMENTED LATER-->
<input type="submit" value="Create Account">
</form>
{% endblock %}