Когда я разрабатываю формы, требующие обработки в PHP, я стараюсь поместить форму и PHP в один файл, например. signup.php и используйте метод $ _GET, чтобы выяснить, что мне нужно делать с формой.jQuery/Ajax & PHP form processing design
Например, если запрашивается /site/signup.php, тогда я знаю, что мне нужно отобразить HTML-форму, но если запрашивается /site/signup.php?action=newsignup (по форме html submit), тогда я знаю, что мне нужно его обработать.
Я был очень доволен этим подходом, так как это означает, что мне нужно поддерживать меньше файлов и что все, что взаимодействует, находится в одном файле, что облегчает проблемы трассировки (плюс я ненавижу сайты, которые постоянно переадресовываются со страницы на страницу при обработке данных .)
грубый пример того, что я хотел бы сделать, это:
<?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, чтобы отправить сообщение t extbox для скрипта .php для проверки. Для этого я использую JQuery сообщение:
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, один для проверки на стороне сервера и теперь один для клиентской стороны. Я хочу сохранить как проверку на стороне клиента, так и серверную, но я не хочу хранить несколько файлов, которые содержат повторяющиеся функции.
Я пытаюсь найти или создать комплексное решение, и я знаю, что должен быть лучший способ сделать это, но я не могу найти примеров для решения этой конкретной проблемы.
Я бы очень признателен за некоторые рекомендации в наилучшей практике/решении этого.
Спасибо за ваши отзывы, я был подумал о методе, который вы описали, но причина для запроса вопроса заключалась в том, чтобы увидеть, была ли «лучшая практика» для этого типа сценария, а не для технического решения. Я думаю, все зависит от того, сколько вы хотите отделить клиентский код от серверной части. Я все еще в двух умах о том, как решить эту проблему, но на данный момент я решил, что код процесса формы должен оставаться таким, как есть, и отправлять события jQuery в отдельный .php-файл, который содержит функции validUserName и validPassword , – amer