Отправляя форму, она открывает файл PHP?

#php #jquery #ajax #database #forms

#php #jquery #ajax #База данных #формы

Вопрос:

Я буду по существу. Но в любом случае, ЗАРАНЕЕ СПАСИБО.

Итак, в основном, когда я отправляю созданную мной форму, она отправляет и прочее, но перенаправляет страницу в файл PHP и показывает это в браузере (не как предупреждение) :

 {"status":"success","message":"Yer message was sent."}
  

когда данные успешно проверены, и показывает это

 {"status":"fail","message":"Invalid name provided."}
  

когда форма не проверяется. Я хочу, чтобы при отправке формы она оставалась на той же странице, и если статус true или false, он должен предупреждать о сообщении в массиве.

Я запишу сценарии и имена файлов: index.html , script.js и post.php

INDEX.HTML

 <form action='post.php' id='post_message' name='post_message' method="post">
<p>
<input id='email' type="email" class='post' placeholder="Email goes in here.(Required) " class="width" name="email">
<br>
<input id='fname' type="text" class='post' placeholder="First Name (Required) " name="FirstName"><br>
<input id='lname' type="text" class='post' placeholder="Last Name (Required) " name="LastName"><br>
<input id='website' type="url" class='post' placeholder="Website? (Optional!)" class="width" name="website"><br>
<textarea id='message_text' placeholder="Your Message goes here. (Required, DUH!) " name='message'></textarea>
</p>
<button type="submit" class="submit" id='btnPost'></button>
<input type="hidden" name="action" value="post_message" id="action">
</form>
  

SCRIPT.JS

 function clearInputs(){
    $("#fname").val('');
    $("#lname").val('');
    $("#email").val('');
    $("#website").val('');
    $("#message_text").val('');
}

$('#btnPost').click(function() {

    var data = $("#post_message").children().serializeArray();

    $.post($("#post_message").attr('action'), data, function(json){

        if (json.status == "fail") {
            alert(json.message);
        }
        if (json.status == "success") {
            alert(json.message);
            clearInputs();
        }
    }, "json");
});
  

POST.PHP

 <?php
if($_POST){ 
    if ($_POST['action'] == 'post_message') {
    $fname = htmlspecialchars($_POST['FirstName']);
    $lname = htmlspecialchars($_POST['LastName']);
    $email = htmlspecialchars($_POST['email']);
    $website = htmlspecialchars($_POST['website']);
    $message = htmlspecialchars($_POST['message']);
    $date = date('F j, Y, g:i a');
    if(preg_match('/[^ws]/i', $fname) || preg_match('/[^ws]/i', $lname)) {
        fail('Invalid name provided.');
    }
    if( empty($fname) || empty($lname) ) {
        fail('Please enter a first and last name.');
    }
    if( empty($message) ) {
        fail('Please select a message.');
    }
    if( empty($email)) {
        fail('Please enter an email');
    }

    $query = "INSERT INTO portmessage SET first_name='$fname', last_name='$lname', email = '$email', website = '$website', message = '$message', date = '$date'";
    $result = db_connection($query);

    if ($result) {
        $msg = "Yer message was sent.";
        success($msg);
    } else {
        fail('Message failed, Please try again.');
    }
    exit;
}
}
function db_connection($query) {
    mysql_connect('127.0.0.1', '######', '####')
        OR die(fail('Could not connect to database.'));
    mysql_select_db('####');

    return mysql_query($query);
}

function fail($message) {
    die(json_encode(array('status' => 'fail', 'message' => $message)));
}
function success($message) {
    die(json_encode(array('status' => 'success', 'message' => $message)));
}
  

?>

И да, он отправляет форму в базу данных, но я не могу преодолеть проблему с предупреждением и перенаправлением. Еще раз спасибо!

Комментарии:

1. Извините, @hindmost, я использовал Ajax. Пожалуйста, посмотрите редактирование. Он отправил вопрос на полпути, когда я его писал. Мой плохой.

2. Вы должны предотвратить отправку формы внутри onclick обработчика кнопки, вызвав preventDefault или вернув false .

3. Не работает. возврат false не отправляет форму..

4. Это именно то, что вам нужно сделать (не отправлять форму), поскольку теперь вы выполняете два запроса post: 1) ajax post; 2) отправка по умолчанию в соответствии с action атрибутом формы. И это ваша проблема

5. Ухх, ты можешь дать ответ на это? Я не понимаю … возврат false не отправляет форму и не отправляет данные в базу данных.

Ответ №1:

Вы можете проверить свою форму на стороне клиента (используя javascript)

HTML

 <form action='post.php' id='post_message' name='post_message' method="post" onsubmit="return validate_form();">
  

Javascript

 function validate_form()
{
     var success = true;
     if($("[name=FirstName]").val() == "")
     {
         success = false;
     }
     // your test case goes here
     // you can alert here if you find any error
     return success;
}
  

Комментарии:

1. Спасибо за ответ, но как насчет недопустимых символов? (Совпадение preg); и даже если успех равен false, PHP-скрипт продолжит работу. Я хочу изучить способ PHP.

2. Вы можете протестировать всю проверку в функции validate_from(). Если какой-либо ввод нарушает регистр проверки, тогда просто возвращаемая ложная форма не будет отправлена.