Попытка создать окно предупреждения Javascript, которое не перезагружает страницу при нажатии OK - PullRequest
0 голосов
/ 08 января 2012

У меня есть форма PHP, которую я настроил методом POST.Когда все поля не заполнены, у меня появляется окно предупреждения Javascript, которое выдает: «Пожалуйста, заполните все поля!»Когда я нажимаю «ОК» в окне оповещения, он перезагружает форму позади него, удаляя все введенные данные.Есть ли функция, которая может удерживать кнопку ОК в окне оповещения от перезагрузки всей страницы?Вот мой код:

<?php

if (isset($_POST['brandname']) && isset($_POST['firstname']) && isset($_POST['lastname']) && isset($_POST['email']) && isset($_POST['website'])){
    $brandname = $_POST['brandname'];
    $firstname = $_POST['firstname'];
    $lastname = $_POST['lastname'];
    $email = $_POST['email'];
    $website = $_POST['website'];

    if(!empty($brandname) && !empty($firstname) && !empty($lastname) && !empty($email)){
        $to = 'matt@miller-media.com';
        $subject = 'Submission Form';
        $body = $firstname;
        $headers = 'From: '.$email;

        if (@mail($to, $subject, $body, $headers)){
        }
    }else{
        echo '<script type="text/javascript">
        window.alert("Please fill out all fields!")
        </script>';
        }

    }
    ?>

Ответы [ 3 ]

2 голосов
/ 08 января 2012

Вы предупреждаете своего пользователя после публикации ответа ... в этом случае я бы повторно опубликовал всю форму заново со значениями, установленными в $ _POST, или с переменными, которые были установлены с помощью нее, например:

  <input type='text' name='brandname' value='<?php echo $_POST['brandname'];?>' />

или:

  <input type='text' name='brandname' value='<?php echo $brandname; ?>' />

и т. Д.

Но в этом случае я рекомендую использовать проверку на стороне клиента в форме (с использованием JavaScript)

2 голосов
/ 08 января 2012

Поскольку ваш пример кода является PHP-кодом, кажется, что вы публикуете форму и проверяете ее на стороне сервера, а затем вы видите предупреждение, если какое-либо поле пусто? В этом случае страница уже была перезагружена до отображения окна предупреждения. Вы смешиваете код на стороне сервера и на стороне клиента.

Если вы хотите показать окно предупреждения, если пользователь не заполнил все поля (без перезагрузки страницы), вам придется выполнить проверку с помощью JavaScript. Вы все равно должны сохранить свою PHP-валидацию!

Если вы используете, например, jQuery, вы можете сделать что-то вроде этого:

$("#your-form-id").submit(function(){
    // Check all your fields here
    if ($("#input-field-1").val() === "" || $("#input-field-2").val() === "")
    {
        alert("Please fill out all fields");
        return false;
    }
});

Конечно, это можно сделать и без jQuery. В этом случае вы можете использовать атрибут onsubmit тега формы для вызова функции JavaScript при публикации формы, и в рамках этой функции вы проверяете форму, отображаете окно с предупреждением, если какое-либо поле пусто, и затем верните false из функции, чтобы предотвратить отправку формы на сервер.

2 голосов
/ 08 января 2012

Да, я предполагаю, что вам нужно что-то вроде этого:

<script type="text/javascript">
function do_some_validation(form) {

  // Check fields
  if (! /* Contition 1 */ ) return false;
  if (! /* Contition 2 */ ) return false;
  if (! /* Contition 3 */ ) return false;
  form.submit();

}
</script>

<form onsubmit="do_some_validation(this) return false;" action="script.php" method="post">

// Fields

</form>

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

Для любых дальнейших сообщений проверки PHP вы можете передавать переменные в GET или SESSION, например.

<?php
session_start();

if (count($_POST)) {
  if (!/* Condition 1 */) $_SESSION['error'] = "Message";

  if (!isset($_SESSION['error'])) {
    // Proceed
    } else header("Location: script.php");

}
?>

На странице:

<?php if (isset($_SESSION['errir'])) {

  echo $_SESSION['error'];
  unset($_SESSION['error']);

} ?>
...