VladimirBuzin
Member
- Регистрация
- 18.03.2018
- Сообщения
- 19
Добрый день! Я пишу сайт для стоматологического кабинета. Есть форма для записи пациента к врачу, и нужно вставить пациента и дату приёма, а при отправке формы вывести модальное окно с ответом от сервера. У меня вопрос: почему мой файл PHP не смог считать номер телефона пациента, его e-mail, а также дату и время приёма и сослался на ошибки:
Notice: Undefined index: phone_number in C:\xampp\htdocs\stomkab\insert.php on line 10
Notice: Undefined index: email in C:\xampp\htdocs\stomkab\insert.php on line 11
Notice: Undefined index: appointment_date in C:\xampp\htdocs\stomkab\insert.php on line 16
Notice: Undefined index: appointment_time
Почему данные из этих полей не ушли на сервер? Я перепроверил названия полей в атрибуте name и индексы элементов массива POST, на вид они совпадают, но почему при пересылке данных из этих полей пошли ошибки? Сможете указать ошибки в моём коде и в комментариях предложить возможные варианты решения?
Файл stomkab-main.html
<div class="page-wrapper">
<!--Тело сайта-->
<div class="container" id="yak1">
<form id="InsertForm" action="#" method="POST" class="checkout">
<div class="checkout-header">
<h1 class="checkout-title">
Записаться на приём
<span class="checkout-price">GO!</span>
</h1>
</div>
<p>
<input type="text" name="surname" size="30" class="checkout-input checkout-name" pattern="[А-Яа-яЁё]{2,30}" placeholder="Фамилия" title="Введите фамилию на русском языке, от 2 до 30 символов" maxlength="30" required>
<input type="text" name="name" size="30" class="checkout-input checkout-name" pattern="[А-Яа-яЁё]{2,30}" placeholder="Имя" title="Введите имя на русском языке, от 2 до 30 символов" maxlength="30" required>
<input type="text" name="patronymic" size="30" class="checkout-input checkout-name" pattern="[А-Яа-яЁё]{7,30}" placeholder="Отчество" title="Введите отчество на русском языке, от 7 до 30 символов" maxlength="30" required>
<input type="tel" name="phone_number" size="30" class="checkout-input checkout-name" pattern="\+([0-9]{1,3})(\([0-9]{2,5}\))([0-9]{5,7})" placeholder="Номер телефона" title="Введите номер телефона в формате +<код страны>(<код региона/оператора>)<номер телефона>. Код страны содержит от 1 до 3 цифр, код региона/оператора - от 2 до 5 цифр, а номер телефона - от 5 ддо 7 цифр" maxlength="30" required>
</p>
<p>
<input type="email" name="email" size="80" class="checkout-input checkout-name" pattern="([A-z0-9_.-]{1,})@([A-z0-9_.-]{1,}).([A-z]{2,8})" placeholder="mail@example.com" maxlength="80" required>
<select name="med_spec" id="med_spec" class="checkout-input checkout-name" required>
<option value="0">Выберите область медицины</option>
<option value="1">Терапия</option>
<option value="2">Хирургия</option>
<option value="3">Ортопедия</option>
<option value="4">Ортодонтия</option>
<option value="5">Пародонтология</option>
</select>
<select name="services" id="services" class="checkout-input checkout-name" disabled required>
<option value="0">Выберите услугу</option>
</select>
<select name="doctors" id="doctors" class="checkout-input checkout-name" disabled required>
<option value="0">Выберите врача</option>
</select>
</p>
<p>
<input type="date" name="appointment_date" class="checkout-input checkout-name" min="1920-01-01" max="2075-01-01" placeholder="Дата приёма" required>
<input type="time" name="appointment_time" class="checkout-input checkout-name" min="8:00" max="20:00" placeholder="Время приёма" list="time-list" required>
<datalist id="time-list">
<option value="08:00">
<option value="08:49">
<option value="09:38">
<option value="10:27">
<option value="11:16">
<option value="12:05">
<option value="13:43">
<option value="14:32">
<option value="15:21">
<option value="16:10">
<option value="16:59">
<option value="17:48">
<option value="19:26">
</datalist>
</p>
<p>
<input type="submit" value="Записаться" class="checkout-btn">
</p>
</form>
</div>
<!--Тело сайта-->
</div>
<!--Модальное окно-->
<div class="modal-wrapper">
<div class="modal">
<div class="head">
<a class="btn-close trigger" href="#">
<i class="fa fa-times" aria-hidden="true"></i>
</a>
</div>
<div class="content">
<div class="good-job">
<i class="fa fa-thumbs-o-up" aria-hidden="true"></i>
<h1></h1>
</div>
</div>
</div>
</div>
Файл selects.js
$(document).ready(function () {
$('#med_spec').change(function () {
var med_spec = $(this).val();
if (med_spec == '0') {
$('#services').html('<option>Выберите услугу</option>');
$('#services').attr('disabled', true);
$('#doctors').html('<option>Выберите врача</option>');
$('#doctors').attr('disabled', true);
return(false);
}
$('#services').attr('disabled', true);
$('#services').html('<option>Загрузка...</option>');
var url = 'get_services.php';
$.post(
url,
"med_spec=" + med_spec,
function (result) {
if (result.type == 'error') {
alert('Ошибка!');
return(false);
}
else {
var options = '';
$(result.services).each(function() {
options += '<option value="' + $(this).attr('service_id') + '">' + $(this).attr('service_name') + '</option>';
});
$('#services').html('<option value="0">Выберите услугу</option>'+options);
$('#services').attr('disabled', false);
$('#doctors').html('<option>Выберите врача</option>');
$('#doctors').attr('disabled', true);
}
},
"json"
);
});
$('#services').change(function () {
var med_spec = $('#med_spec').val();
var services = $(this).val();
if (services == '0') {
$('#doctors').html('<option>Выберите врача</option>');
$('#doctors').attr('disabled', true);
return(false);
}
$('#doctors').attr('disabled', true);
$('#doctors').html('<option>Загрузка...</option>');
var url = 'get_doctor.php';
$.post(
url,
"med_spec=" + med_spec,
function (result) {
if (result.type == 'error') {
alert('Ошибка!');
return(false);
}
else {
var options = '';
$(result.doctors).each(function() {
options += '<option value="' + $(this).attr('doctor_id') + '">' + $(this).attr('doctor_surname') + ', ' + $(this).attr('doctor_name') + '</option>';
});
$('#doctors').html('<option value="0">Выберите врача</option>'+options);
$('#doctors').attr('disabled', false);
}
},
"json"
);
});
$('#InsertForm').submit(function(e) {
e.preventDefault();
$.ajax({
type: $(this).attr('method'),
url: 'insert.php',
data: $(this).serialize(),
success: function(result){
$('.modal-wrapper').toggleClass('open');
$('.page-wrapper').toggleClass('blur-it');
$('div.modal-wrapper > div.modal > div.content > div.good-job > h1').html(result);
return false;
}
});
});
});
Файл insert.php
Notice: Undefined index: phone_number in C:\xampp\htdocs\stomkab\insert.php on line 10
Notice: Undefined index: email in C:\xampp\htdocs\stomkab\insert.php on line 11
Notice: Undefined index: appointment_date in C:\xampp\htdocs\stomkab\insert.php on line 16
Notice: Undefined index: appointment_time
Почему данные из этих полей не ушли на сервер? Я перепроверил названия полей в атрибуте name и индексы элементов массива POST, на вид они совпадают, но почему при пересылке данных из этих полей пошли ошибки? Сможете указать ошибки в моём коде и в комментариях предложить возможные варианты решения?
Файл stomkab-main.html
<div class="page-wrapper">
<!--Тело сайта-->
<div class="container" id="yak1">
<form id="InsertForm" action="#" method="POST" class="checkout">
<div class="checkout-header">
<h1 class="checkout-title">
Записаться на приём
<span class="checkout-price">GO!</span>
</h1>
</div>
<p>
<input type="text" name="surname" size="30" class="checkout-input checkout-name" pattern="[А-Яа-яЁё]{2,30}" placeholder="Фамилия" title="Введите фамилию на русском языке, от 2 до 30 символов" maxlength="30" required>
<input type="text" name="name" size="30" class="checkout-input checkout-name" pattern="[А-Яа-яЁё]{2,30}" placeholder="Имя" title="Введите имя на русском языке, от 2 до 30 символов" maxlength="30" required>
<input type="text" name="patronymic" size="30" class="checkout-input checkout-name" pattern="[А-Яа-яЁё]{7,30}" placeholder="Отчество" title="Введите отчество на русском языке, от 7 до 30 символов" maxlength="30" required>
<input type="tel" name="phone_number" size="30" class="checkout-input checkout-name" pattern="\+([0-9]{1,3})(\([0-9]{2,5}\))([0-9]{5,7})" placeholder="Номер телефона" title="Введите номер телефона в формате +<код страны>(<код региона/оператора>)<номер телефона>. Код страны содержит от 1 до 3 цифр, код региона/оператора - от 2 до 5 цифр, а номер телефона - от 5 ддо 7 цифр" maxlength="30" required>
</p>
<p>
<input type="email" name="email" size="80" class="checkout-input checkout-name" pattern="([A-z0-9_.-]{1,})@([A-z0-9_.-]{1,}).([A-z]{2,8})" placeholder="mail@example.com" maxlength="80" required>
<select name="med_spec" id="med_spec" class="checkout-input checkout-name" required>
<option value="0">Выберите область медицины</option>
<option value="1">Терапия</option>
<option value="2">Хирургия</option>
<option value="3">Ортопедия</option>
<option value="4">Ортодонтия</option>
<option value="5">Пародонтология</option>
</select>
<select name="services" id="services" class="checkout-input checkout-name" disabled required>
<option value="0">Выберите услугу</option>
</select>
<select name="doctors" id="doctors" class="checkout-input checkout-name" disabled required>
<option value="0">Выберите врача</option>
</select>
</p>
<p>
<input type="date" name="appointment_date" class="checkout-input checkout-name" min="1920-01-01" max="2075-01-01" placeholder="Дата приёма" required>
<input type="time" name="appointment_time" class="checkout-input checkout-name" min="8:00" max="20:00" placeholder="Время приёма" list="time-list" required>
<datalist id="time-list">
<option value="08:00">
<option value="08:49">
<option value="09:38">
<option value="10:27">
<option value="11:16">
<option value="12:05">
<option value="13:43">
<option value="14:32">
<option value="15:21">
<option value="16:10">
<option value="16:59">
<option value="17:48">
<option value="19:26">
</datalist>
</p>
<p>
<input type="submit" value="Записаться" class="checkout-btn">
</p>
</form>
</div>
<!--Тело сайта-->
</div>
<!--Модальное окно-->
<div class="modal-wrapper">
<div class="modal">
<div class="head">
<a class="btn-close trigger" href="#">
<i class="fa fa-times" aria-hidden="true"></i>
</a>
</div>
<div class="content">
<div class="good-job">
<i class="fa fa-thumbs-o-up" aria-hidden="true"></i>
<h1></h1>
</div>
</div>
</div>
</div>
Файл selects.js
$(document).ready(function () {
$('#med_spec').change(function () {
var med_spec = $(this).val();
if (med_spec == '0') {
$('#services').html('<option>Выберите услугу</option>');
$('#services').attr('disabled', true);
$('#doctors').html('<option>Выберите врача</option>');
$('#doctors').attr('disabled', true);
return(false);
}
$('#services').attr('disabled', true);
$('#services').html('<option>Загрузка...</option>');
var url = 'get_services.php';
$.post(
url,
"med_spec=" + med_spec,
function (result) {
if (result.type == 'error') {
alert('Ошибка!');
return(false);
}
else {
var options = '';
$(result.services).each(function() {
options += '<option value="' + $(this).attr('service_id') + '">' + $(this).attr('service_name') + '</option>';
});
$('#services').html('<option value="0">Выберите услугу</option>'+options);
$('#services').attr('disabled', false);
$('#doctors').html('<option>Выберите врача</option>');
$('#doctors').attr('disabled', true);
}
},
"json"
);
});
$('#services').change(function () {
var med_spec = $('#med_spec').val();
var services = $(this).val();
if (services == '0') {
$('#doctors').html('<option>Выберите врача</option>');
$('#doctors').attr('disabled', true);
return(false);
}
$('#doctors').attr('disabled', true);
$('#doctors').html('<option>Загрузка...</option>');
var url = 'get_doctor.php';
$.post(
url,
"med_spec=" + med_spec,
function (result) {
if (result.type == 'error') {
alert('Ошибка!');
return(false);
}
else {
var options = '';
$(result.doctors).each(function() {
options += '<option value="' + $(this).attr('doctor_id') + '">' + $(this).attr('doctor_surname') + ', ' + $(this).attr('doctor_name') + '</option>';
});
$('#doctors').html('<option value="0">Выберите врача</option>'+options);
$('#doctors').attr('disabled', false);
}
},
"json"
);
});
$('#InsertForm').submit(function(e) {
e.preventDefault();
$.ajax({
type: $(this).attr('method'),
url: 'insert.php',
data: $(this).serialize(),
success: function(result){
$('.modal-wrapper').toggleClass('open');
$('.page-wrapper').toggleClass('blur-it');
$('div.modal-wrapper > div.modal > div.content > div.good-job > h1').html(result);
return false;
}
});
});
});
Файл insert.php
Код:
<?php
include_once 'connect.php';
if (!empty($_POST)) {
$familija=$_POST['surname'];
$familija = str_replace(' ', '', $familija);
$imja=$_POST['name'];
$imja = str_replace(' ' ,'', $imja);
$otchestvo=$_POST['patronymic'];
$otchestvo = str_replace(' ' ,'', $otchestvo);
$phone=$_POST['phone_number'];
$e_mail=$_POST['email'];
$e_mail = str_replace(' ', '', $e_mail);
$medspec_id = @intval($_POST['med_spec']);
$services = @intval($_POST['services']);
$doctors = @intval($_POST['doctors']);
$date=$_POST['appointment_date'];
$time=$_POST['appointment_time'];
$time_query=mysqli_query($link, "SELECT * FROM appointment WHERE date = $date AND time = $time");
if (strcmp($date, date("Y-m-d")) < 0) {
echo 'Ошибка ввода даты!';
} elseif (((strcmp($date, date("Y-m-d")) === 0) && (strcmp($time, date("H:i")) <= 0)) || (strcmp($time, "08:00") < 0) || (strcmp($time, "20:00") >= 0)) {
echo 'Ошибка ввода времени!';
} elseif ((date("l") == "Saturday") && (strcmp($time, "17:00") >= 0)) {
echo 'Извините, но в этот день приём до 17:00!';
} elseif (date("l") == "Sunday") {
echo 'Извините, но сегодня выходной день!';
} elseif (mysqli_num_rows($time_query) > 0) {
echo 'Приём в указанные дату и время уже назначен!';
} else {
$regs=mysqli_query($link, "SELECT MAX(patient_id) AS pat_max FROM patient");
if (mysqli_num_rows($regs) != 0) {
$row = mysqli_fetch_assoc($regs);
$new_pat_id = $row['pat_max'] + 1;
} else {
$new_pat_id = 0;
}
$pat_ins=mysqli_query($link, "INSERT INTO patient VALUES ($new_pat_id, $familija, $imja, $otchestvo, $phone, $e_mail)");
if($pat_ins) {
echo 'Запись прошла успешно!'.'<br />';
} else {
echo 'Ошибка в запросе!';
}
$app_regs=mysqli_query($link, "SELECT MAX(appointment_id) AS app_max FROM appointment");
if (mysqli_num_rows($app_regs) != 0) {
$app_row = mysqli_fetch_assoc($app_regs);
$new_app_id = $app_row['app_max'] + 1;
} else {
$new_app_id = 0;
}
$app_ins=mysqli_query($link, "INSERT INTO appointment VALUES ($new_app_id, $new_pat_id, $doctors, $date, $time, $services)");
if($pat_ins) {
$price_query=mysqli_query($link, "SELECT price FROM service WHERE service_id=$services");
$price_row = mysqli_fetch_assoc($price_query);
$price = $price_row['price'];
echo 'Цена за обслуживание составляет '.$price.' рублей';
} else {
echo 'Ошибка в запросе!';
}
}
} else {
echo 'Данные не получены!';
}
?>
Вложения
-
3,9 МБ Просмотры: 30
-
119,1 КБ Просмотры: 29
-
59,9 КБ Просмотры: 24
-
50,5 КБ Просмотры: 24