У меня есть HTML файл, который содержит регистрационную форму (входы, метки, кнопки и т.д.). У меня есть специальный div:
<div id ="errorArea"></div>
- это зарезервированное пустое пространство. Я хочу использовать для отображения сообщений об ошибках (логин уже используется, пароли не совпадают, адрес электронной почты не может быть пустым и т.д.). Существует кнопка отправки, которая запускает php. В текущем состоянии все работает нормально, поскольку я использую это для отображения сообщений:
if (!empty($myrow['id'])) {
exit ("this login is already used");
}
После нажатия кнопки отправки, если есть ошибка, новый белый пробел показывает нам предопределенный текст. Я пытаюсь достичь: показывать сообщения об ошибках внутри errorArea div, не покидая текущей страницы. Можете ли вы помочь, поскольку я не могу найти себе лучший способ сделать это. Имейте в виду, что у меня очень мало знаний в php-языке.
Обновление Возможно, есть способ обновить страницу с новыми параметрами или законно загружать другую, которая является той же самой страницей, за исключением добавления нового текста?
Update2 Может ли кто-нибудь объяснить мне, возможно ли, запустить javascript перед публикацией данных, а также запускать php-скрипт?
То, что вы хотите, - это проверка на стороне клиента, которая обычно достигается с помощью JavaScript. Я бы рекомендовал использовать библиотеку jQuery, поскольку он абстрагирует много уродства обеспечения совместимости с браузером. Следующий псевдокод - это начальная точка, если вы хотите проверить, когда пользователь попадает в submit.
$('#myForm').submit(function(e) {
// do error checking here
If (error) {
// spend error message to div
return false; // prevents standard form submission event
}
});
Другой вариант - проверить каждое поле ввода, когда пользователь закончит ввод в поле. Ниже наброски псевдокода:
$(document).on('change', '.my-form-fields', function () {
// check if valid and post message if needed
});
Может быть, мой код поможет вам)
Html с jQuery:
(function($){
"use strict";
$('document').ready(function(){
$( ".submit-button" ).on('click', function(){
var ajaxData = {
action: 'getsettings',
string: $('.name').val()
};
$.ajax({
type: 'POST',
url: 'resp.php',
data: ajaxData }).done(function(msg){
console.log(msg);
});
});
});
})(jQuery);
<input type="text" class="name">
<button class="submit-button">Button</button>
И файл resp.php с php-скриптом:
if ( 'POST' === $_SERVER['REQUEST_METHOD'] &&
isset( $_SERVER['HTTP_X_REQUESTED_WITH'] ) &&
'XMLHttpRequest' === $_SERVER['HTTP_X_REQUESTED_WITH'] ) {
if ( 'getsettings' === $_POST['action'] &&
isset($_POST['action']) &&
!empty( $_POST['action'] ) ) {
echo $_POST['string'];
/*.... Your code ....*/
}
}
Это нормально!
"без оставления текущей страницы" - очень плохая идея.
Во-первых, whet - это ваша форма? Обычно это должно привести к скрипту проверки, который пользователь не видит, а это, в свою очередь, может привести к успешной странице входа или, как вам кажется, перестроить первую страницу входа в систему с сообщением об ошибке.
Все это очень стандартно. Просто google для чего-то вроде учебника проверки формы входа в PHP (или примера).
Не волнуйтесь, PHP учится учиться (но получайте хорошую IDE, например NetBeans).
Удачи!
[Обновление] Я просто искал для php login example
и есть хорошие удары. Например, первый http://www.9lessons.info/2009/09/php-login-page-example.html, но зачем смотреть на некоторые из первых страниц хитов?
ВАЖНО: многие люди говорят вам, что ДОЛЖНЫ использовать клиентский код. Это не так.
Да, клиент-сайдеры, я могу и делаю, кодовую клиентскую сторону (я начал с простого JS, перешел на JQuery и теперь кодировал AndularJs). Я знаю, почему клиентская сторона, Ajax или иначе, это хорошая вещь, но похоже, что OP только начинается, поэтому почему бы не позволить ему сначала овладеть сервером? Затем, когда он справился с этим, он может посмотреть на клиентскую сторону (я просто боюсь, что кто-то здесь попытается поговорить с ним об использовании NodeJs на стороне сервера. Опять же, не совсем неправильно, но для новичка лучше всего начните с PHP)
Это можно сделать полностью на стороне сервера. Части входа ДОЛЖНЫ выполняться на стороне сервера (где вы собираетесь проверять пароль?).
OP, ввод какой-либо формы может быть проверен на стороне клиента (это то, что действительная дата, почтовый индекс и т.д. Является обязательным полем?)
Вы можете (я могу даже сказать "должен") сделать эту клиентскую сторону, чтобы избежать поездки туда и обратно на сервер.
Но вы также можете просто вытолкнуть весь пользовательский ввод на сервере и позволить ему разобраться. Я настоятельно рекомендую это - для более компактного.
Я советую вам, как более компактному,:
tutorial
или example
для того, что вы пытаетесь сделать. Было бы не больно покупать книгу, чтобы учиться.Клиент-сидери - мольба - пусть не начнет пламенную войну. Я знаю, почему вы выступаете за то, что вы защищаете, но это не на 100% необходимо - в этом случае - все это может быть сделано на стороне сервера, и я просто пытаюсь помочь OP учиться, а не решать, что все слишком сложно & отказаться и уйти.
Вам нужен Javascript, поскольку PHP является серверной, и вы не можете изменять текст только с помощью PHP и не оставляя/обновляя/перенаправляя, вот пример того, как проверять адрес электронной почты и добавлять текст в div
Он взят из http://www.w3schools.com/js/js_form_validation.asp и изменен на ваш случай
<!DOCTYPE html>
<html>
<head>
<script>
function validateForm()
{
var x=document.forms["myForm"]["email"].value;
var atpos=x.indexOf("@");
var dotpos=x.lastIndexOf(".");
if (atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length)
{
document.getElementById('errorArea').innerHTML = "Invalid Email";
return false;
}
}
</script>
</head>
<body>
<form name="myForm" action="demo_form.asp" onsubmit="return validateForm();" method="post">
Email: <input type="text" name="email">
<input type="submit" value="Submit">
<div id ="errorArea"></div>
</form>
</body>
</html>