#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(). Если какой-либо ввод нарушает регистр проверки, тогда просто возвращаемая ложная форма не будет отправлена.