У меня есть форма, которая позволяет пользователю назначить встречу, и форма обрабатывается ajax сейчас. Ранее форма представляла собой обычную форму, в которой использовалась запись, а PHP захватывал данные и помещал их в базу данных.
После добавления в ajax данные действительно помещаются в базу данных, но сообщения, которые я должен был показать в случае успеха или неудачи, не отображаются. У кого-нибудь есть идеи как это сделать?
Код php для подачи в БД
if (isset($_POST['requestAppt'])) {
$date = $_POST['date'];
$dateFormatted = date('Y-m-d', strtotime($date));
$sanitisedDate = $conn->real_escape_string($dateFormatted);
$time = $_POST['time'];
$sanitisedTime = $conn->real_escape_string($time);
$length = $_POST['lengthOfSession'];
$sanitisedLength = $conn->real_escape_string($length);
$details = $_POST['sessionDetails'];
$sanitisedDetails = $conn->real_escape_string($details);
if (($dateFormatted != "") && ($time != "") && ($details != "") && $coachID != "") {
$pendingAppointment = "INSERT INTO ... (coach_id, user_id, date, time, duration, details, confirmed)
VALUES ('$coachID', '$userid', '$sanitisedDate', '$sanitisedTime', '$sanitisedLength', '$sanitisedDetails', 0);";
$executePendingAppointment = $conn->query($pendingAppointment);
if (!$executePendingAppointment) {
echo $conn->error;
$requestError = "Sorry, your request has not been sent. Please check your input and try again.";
} else {
$requestSuccess = "Your request has been sent.";
}
}
}
Форма
<div class='message-body'>
<form action='appointments.php' method='POST' id='makeAppts'>
<p> Date: <input class='input' type='text' id='datepicker' name='date' readonly></p>
<p>Time: <input class='input' type='text' id='timepicker' name='time' readonly></p>
<p> Duration: <div class='select'>
<select name='lengthOfSession'>
<option>30 Minutes</option>
<option>1 Hour</option>
<option>90 Minutes</option>
<option>2 hours</option>
</select>
</div>
<p>Your Coach:<input class='input' type='text' id='coach' value='$coachName' name='coachName' readonly></p>
<p>Session details: : <input class='input' type='text' id='timeSelect' placeholder='I want to work on my glutes' name='sessionDetails'></p>
";
echo "<div id='ajaxResult'> </div>";
if (isset($requestError)) {
echo "<p class='buttonError'>$requestError</p>";
} else if (isset($requestSuccess)) {
echo "<p class='buttonSucc' >$requestSuccess</p>";
}
echo "<p class='apptButton'><input type='submit' class='button is-primary appointmentSubmit' value='Request Appointment' name='requestAppt'> </p>
</form>
</div> <!-- end of message body-->
ajax
$('#makeAppts').on('submit', function() {
var that = $(this),
url = that.attr('action'),
type = that.attr('method'),
data = {};
that.find('[name]').each(function(index, value) {
var that = $(this),
name = that.attr('name'),
value = that.val();
data[name] = value;
});
$.ajax ({
url: url,
type: type,
data: data,
success: function(data){
$('#makeAppts').trigger('reset');
$('#success').fadeIn().html(data);
}
});
return false
});
I пытался сделать что-то вроде этого, но это происходит постоянно и заменяет кнопку отправки
Doing something like this will put success no matter if the query doesn't get sent, and replaces the button
$.ajax ({
url: url,
type: type,
data: data,
success: function(data){
$('#makeAppt').trigger('reset');
$('#success').fadeIn().html(data);
$('#ajaxResult').html('Success');
}
});
И это выдает ошибку каждый раз, когда страница загружается
if(isset($_POST['date'],$_POST['time'],$_POST['coachName'],$_POST['lengthOfSession'],$_POST['sessionDetails'],)) {
$requestSuccess = "Your request has been sent.";
} else {
$requestError = "Sorry, your request has not been sent. Please check your input and try again.";
}