Хотя вы никогда не должны полагаться только на проверку на стороне клиента и обязательно должны обрабатывать все данные как «грязные» в PHP, есть другой способ использования JavaScipt, который позволяет запретить браузеру напрямую публиковать форму. Вместо того, чтобы устанавливать метод и действие формы, просто определите ее функцию onsubmit для создания объекта XmlHttpResponse, установите для метода значение POST и задайте данные для вашего form.serialize () и отправьте соответствующий запрос POST. Или, если скрипт PHP будет принимать параметры GET или REQUEST, вы можете (после проверки) создать запрос URL и просто настроить window.location для перенаправления на страницу PHP с соответствующими данными.
РЕДАКТИРОВАТЬ - Вот моя иллюстрация - здесь используется функция прототипа Form.serialize .
<form id="my_form" onSubmit="return checkUsername();">
Username: <input type="text" name="username" id="username" />
</form>
<script type="text/javascript">
var xhr; // global XMLHttpRequest object
var formElem = $('my_form'); // our form element
function checkUsername() {
var formData = formElem.serialize();
sendPOSTRequest('http://mydomain.com/mypath/myscript.php', formData);
}
function sendPOSTRequest(toURL, sendData) {
xhr = false;
if (window.XMLHttpRequest) {
xhr = new XMLHttpRequest();
if (http_request.overrideMimeType) {
http_request.overrideMimeType('text/html');
}
} else if (window.ActiveXObject) {
try {
xhr = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
if (!xhr) {
alert('Cannot create XHR');
return false;
}
xhr.onreadystatechange = handleResponse;
xhr.open('POST', toURL, true);
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.setRequestHeader("Content-length", sendData.length);
xhr.setRequestHeader("Connection", "close");
xhr.send(sendData);
}
function handleResponse() {
if (xhr.readyState == 4) {
if (xhr.status == 200) {
var result = xhr.responseText;
// result is now whatever content was returned by the PHP script
// do whatever you want with the result here
// for example, you might have the PHP return 'true' or some such thing, and then
// change window.location, or perhaps if it returns 'false' you put up an alert('No!')
// use your imagination, go nuts
} else {
alert('The script returned an error.');
}
}
}
</script>
Существует несколько более сложных способов создания и обработки объекта XMLHttpRequest. Я мог бы позже опубликовать обновление с некоторыми указателями.