[HTML / PHP]: прервать обновление страницы - PullRequest
0 голосов
/ 30 октября 2009

В форме я вызываю файл PHP, если проверка прошла успешно. Заголовок моей формы выглядит так:

<form method="POST" action="inst.php" style="margin:0px;"name="form1" onSubmit="return CheckUsername(document.getElementById('username').value);">

</form>

Проблема в том, что даже если проверка не удалась, она показывает пустую страницу при попытке открыть файл PHP, когда он должен остаться на той же странице. Файл PHP содержит код для доступа к базе данных, чтобы проверить, существует ли пользователь.

Есть ли способ проверить значение в базе данных без обновления страницы?

Ответы [ 3 ]

2 голосов
/ 30 октября 2009

Весьма вероятно, что функция JavaScript имеет ошибку. Функция проверки не будет выполнена, и форма будет отправлена ​​(!). Проверьте консоль Javascript в Firefox на наличие ошибок, они будут появляться там, даже если страница уже была перезагружена.

Однако вы никогда не должны полагаться на проверку на стороне клиента. Я очень рекомендую проверить и скрипт PHP.

1 голос
/ 30 октября 2009

Хотя вы никогда не должны полагаться только на проверку на стороне клиента и обязательно должны обрабатывать все данные как «грязные» в 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. Я мог бы позже опубликовать обновление с некоторыми указателями.

0 голосов
/ 30 октября 2009

После того, как запрос POST был отправлен, браузер сам обрабатывает ответ, но в каждом браузере, с которым я сталкивался, он отображает результат запроса в некоторых, будь то сообщение о том, что он получил ответ (200 404 и т. д.), пустая страница или что-то еще, поэтому я боюсь, что вам придется восстановить свою страницу и отправить ее обратно клиенту (с недопустимыми записями в элементах формы) в качестве ответа.

Это боль, но так работает HTTP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...