Когда я разрабатываю формы, требующие обработки на PHP, я склоняюсь к тому, чтобы поместить форму и PHP в один файл, например, signup.php и использовать метод $ _GET, чтобы выяснить, что мне нужно делать с формой.
Например, если запрошен /site/signup.php, то я знаю, что мне нужно отобразить HTML-форму, но если запрошен /site/signup.php?action=newsignup (отправка html-формы), то я знаю, чтомне нужно обработать его.
Я был очень доволен этим подходом, так как он означает, что мне нужно хранить меньше файлов и что все, что взаимодействует, находится в одном файле, что облегчает отслеживание проблем (плюс я ненавижу сайты, которые постоянно перенаправляютот страницы к странице при обработке данных.)
Грубый пример того, что я хотел бы сделать:
<?php
if (isset($_GET['action'] && $_GET['action'] == "newsignup")
{
$name = cleanInput($_POST['name'];
$email = cleanInput($_POST['email'];
if(validUserName($name)== TRUE)
{
// do processing here
} else {
// fail processing here
}
if(validEmail($email)== TRUE)
{
// do processing here
} else {
// fail processing here
}
// Do database stuff etc
// Display success message
} else {
// Not $_GET so must be a new sign-up. Display html form
<form id="signup" action="signup.php?action=newsignup" method="post">
<input type="text" name="name" id="name" />
<input type="text" name="email" id="email" />
<input type="submit" id="submit" value="Submit" />
</form>
}
Теперь я начинаю использовать jQuery / Ajax для проверки на стороне клиентачтобы дать отзыв, пока пользователь заполняет форму, когда данные вводятся в текстовое поле в форме, данные проверяются в реальном времени, используя событие keyup для публикации этого текстаполе для сценария .php для проверки.Для этого я использую jQuery Post:
function name_check(){
var username = $('name').val();
if(name == "" || name.length < 4){
$('#name').css('border', '3px #CCC solid');
$('#text').text('');
}else{
$.post('jquerysignup.php', { name: $('#name').val()}, function(response) {
$('#phpout').html(response['message']); // return an error string if exists
if(response['returnval'] == 0){
$('#name').css('border', '3px green solid');
$('#submit').fadeIn('slow')
} else if (response['returnval'] == 2){
$('#name').css('border', '3px red solid');
$('#submit').fadeOut('slow')
} else {
$('#name').css('border', '3px red solid');
$('#submit').fadeOut('slow')
}
}, 'json');
} //
}
Файл jquerysignup.php содержит только функции PHP validUserName и validEmail.
Сейчас я нахожусь в положении, где есть два файла .php, один для проверки на стороне сервера и теперь один для стороны клиента.Я хочу сохранить проверку как на стороне клиента, так и на стороне сервера, но я не хочу, чтобы несколько файлов содержали дублирующиеся функции.
Я изо всех сил пытался найти или придумать интегрированное решение и знаю, что долженбыть лучшим способом сделать это, но я не могу найти никаких примеров для решения этой конкретной проблемы.
Я был бы очень признателен за некоторые рекомендации в передовой практике / решение этой проблемы.