С Новым годом! Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
0 / 0 / 4
Регистрация: 21.08.2017
Сообщений: 208

Вставка записей из формы в базу данных через jQuery-AJAX

05.08.2018, 08:22. Показов 3175. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Я пишу сайт для стоматологического кабинета. Есть форма для записи пациента к врачу, и нужно вставить пациента и дату приёма, а при отправке формы вывести модальное окно с ответом от сервера. У меня вопрос: почему мой файл 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
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<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
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
$(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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?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 'Данные не получены!';
}
?>
Миниатюры
Вставка записей из формы в базу данных через jQuery-AJAX   Вставка записей из формы в базу данных через jQuery-AJAX  
Вложения
Тип файла: zip stomkab.zip (3.90 Мб, 3 просмотров)
Тип файла: zip sql.zip (119.1 Кб, 2 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.08.2018, 08:22
Ответы с готовыми решениями:

Запись данных в базу без обновления всей формы (jquery+ajax)
Добрый вечер! Есть форма с большим количеством полей для ввода. Не могу сделать так, чтобы данные из 2-х полей, при нажатии на кнопку...

Сохранение формы через ajax с записью файла в базу данных
Здравствуйте! У меня есть форма, расположенная в модальном окне. Форма предназначена для сохранения информации в базу данных. Одной из...

Jquery+ajax отправка данных формы
Здравствуйте. Да, и по форумам лазил, и в инете рылся, но проблему решить не смог. Рассчитываю на вашу помощь. При нажатии на ссылку...

6
0 / 0 / 4
Регистрация: 21.08.2017
Сообщений: 208
05.08.2018, 13:33  [ТС]
Я уже даже переименовал поля формы и индексы элементов массива POST, не помогло, всё те же ошибки выскакивают. Предложите пожалуйста другие варианты решения этой проблемы. Из другого форума написали о попытке использования необъявленных переменных. Как вписать эти недостающие 4 поля? Переменные были объявлены, в PHP они объявляются автоматически, не надо предварительно писать char phone, char date, char time.

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
                             <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="nomer_telefona" 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="pochta" 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="data_priema" class="checkout-input checkout-name" min="1920-01-01" max="2075-01-01" placeholder="Дата приёма" required>
                                     <input type="time" name="vremya_priema" 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>
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$familija=$_POST['surname'];
$familija = str_replace(' ', '', $familija);
$imja=$_POST['name'];
$imja = str_replace(' ' ,'', $imja);
$otchestvo=$_POST['patronymic'];
$otchestvo = str_replace(' ' ,'', $otchestvo);
$phone=$_POST['nomer_telefona'];
$e_mail=$_POST['pochta'];
$e_mail = str_replace(' ', '', $e_mail);
$medspec_id = @intval($_POST['med_spec']);
$services = @intval($_POST['services']);
$doctors = @intval($_POST['doctors']);
$date=$_POST['data_priema'];
$time=$_POST['vremya_priema'];
Как принудительно объявить эти переменные?

Пожалуйста, помогите! Преподаватели уехали в отпуск, однокурсники тоже не могут справиться. К сожалению, я дотянул до последнего, мог бы обращаться к преподавателям,не боясь, что меня завалят на защите, но теперь я остался один, и на Вас одна надежа.
Миниатюры
Вставка записей из формы в базу данных через jQuery-AJAX  
0
0 / 0 / 4
Регистрация: 21.08.2017
Сообщений: 208
05.08.2018, 22:45  [ТС]
Добрый вечер! Оказывается, плагин jQuery, который установлен на моём сайте, не поддерживает атрибуты тега input из HTML5. Заменил на "text" и навесил паттерны, и всё заработало.

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
                                 <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="text" name="nomer_telefona" 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="text" name="pochta" size="80" class="checkout-input checkout-name" pattern="([A-z0-9_.-]{1,})@([A-z0-9_.-]{1,}).([A-z]{2,8})" placeholder="E-mail" title="Введите адрес электронной почты в формате <имя_пользователя>@<Название_сайта>.<домен_государства>. Имя пользователя и название сайта содержат не менее 1 символа, а домен государства - от 2 до 8 букв" 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="text" name="data_priema" class="checkout-input checkout-name" pattern="[0-9]{4}-[0-9]{2}-[0-9]{2}" placeholder="Дата приёма" title="Введите дату приёма пациента в формате <ГГГГ>-<ММ>-<ДД>" maxlength="10" required>
                                     <select name="vremya_priema" class="checkout-input checkout-name" required>
                                       <option>Выберите время приёма</option>
                                       <option value="08:00">8:00</option>
                                       <option value="08:49">8:49</option>
                                       <option value="09:38">9:38</option>
                                       <option value="10:27">10:27</option>
                                       <option value="11:16">11:16</option>
                                       <option value="12:05">12:05</option>
                                       <option value="13:43">13:43</option>
                                       <option value="14:32">14:32</option>
                                       <option value="15:21">15:21</option>
                                       <option value="16:10">16:10</option>
                                       <option value="16:59">16:59</option>
                                       <option value="17:48">17:48</option>
                                       <option value="19:26">19:26</option>
                                     </select>
 
                                 </p>
 
                                 <p>
                                     <input type="submit" value="Записаться" class="checkout-btn">
                                 </p>
Но, избавившись от первого "камня преткновения", я получил две другие ошибки:

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in C:\xampp\htdocs\stomkab\insert.php on line 28

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in C:\xampp\htdocs\stomkab\insert.php on line 32

В чём могут быть проблемы с функцией mysqli_num_rows?

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<?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['nomer_telefona'];
$phone = str_replace(' ', '', $phone);
$e_mail=$_POST['pochta'];
$e_mail = str_replace(' ', '', $e_mail);
$medspec_id = @intval($_POST['med_spec']);
$services = @intval($_POST['services']);
$doctors = @intval($_POST['doctors']);
$date=$_POST['data_priema'];
$time=$_POST['vremya_priema'];
$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", strtotime($date)) == "Saturday") && (strcmp($time, "17:00") >= 0)) {
    echo 'Извините, но в этот день приём до 17:00!';
} elseif (date("l", strtotime($date)) == "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 'Ошибка! Некорректный ввод личных данных!'.'<br />';
}
$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 'Запись на приём оформлена!'.'<br />'.'Ваша цена составляет '.$price.' рублей';
} else {
    echo 'Ошибка! Некорректный ввод данных о приёме!';
}
}
} else {
echo 'Данные не получены!';
}
?>
Имена таблиц прописаны верно, и в кавычки по совету других форумчан я пробовал заключать названия всех таблиц и колонок во избежании путаницы со служебными именами PHP, но предупреждения никуда не делись.

Есть ли эквиваленты mysqli_num_rows? Единственный вариант - переделать весь сайт в PDO, но я боюсь к сентябрю все долги не закрыть.
Миниатюры
Вставка записей из формы в базу данных через jQuery-AJAX  
0
767 / 323 / 157
Регистрация: 26.05.2016
Сообщений: 2,127
05.08.2018, 23:20
Mysli - query видимо не правильный, просто для эксперемента сделайте обычный запрос с select без max
0
0 / 0 / 4
Регистрация: 21.08.2017
Сообщений: 208
06.08.2018, 08:51  [ТС]
Скорее всего, такое может быть, при передаче даты или времени, если кто-то введёт месяц больше 12 или число больше 31, а также часы больше 23 или минуты больше 59. Но я всё вводил правильно, на дату наложил паттерн для формата ГГГГ-ММ-ДД, а время сделал выпадающим списком:

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<input type="text" name="data_priema" class="checkout-input checkout-name" pattern="[0-9]{4}-[0-9]{2}-[0-9]{2}" placeholder="Дата приёма" title="Введите дату приёма пациента в формате <ГГГГ>-<ММ>-<ДД> без пробелов" maxlength="10" required>
<select name="vremya_priema" class="checkout-input checkout-name" required>
  <option>Выберите время приёма</option>
  <option value="08:00">8:00</option>
  <option value="08:49">8:49</option>
  <option value="09:38">9:38</option>
  <option value="10:27">10:27</option>
  <option value="11:16">11:16</option>
  <option value="12:05">12:05</option>
  <option value="13:43">13:43</option>
  <option value="14:32">14:32</option>
  <option value="15:21">15:21</option>
  <option value="16:10">16:10</option>
  <option value="16:59">16:59</option>
  <option value="17:48">17:48</option>
  <option value="19:26">19:26</option>
</select>
Попытался выводить, сработал ли запрос или нет, и первый запрос действительно не выполнился из-за ошибки в этих двух инпутах:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
$time_query=mysqli_query($link, "SELECT * FROM appointment WHERE date = $date AND time = $time");
if($time_query) {echo "TRUE";} else {echo "FALSE";}
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", strtotime($date)) == "Saturday") && (strcmp($time, "17:00") >= 0)) {
    echo 'Извините, но в этот день приём до 17:00!';
} elseif (date("l", strtotime($date)) == "Sunday") {
    echo 'Извините, но этот день - выходной!';
} elseif (mysqli_num_rows($time_query) > 0) {
    echo 'Приём в указанные дату и время уже назначен!';
}
Со всеми ли версиями jQuery такие же проблемы, и какие версии уже перешли на html5?
Я подключил jQuery 3.3.1 через CDN и вернул все атрибуты INPUT-TYPE обратно, но проблемы возникли со связанными выпадающими списками, где я использовал метод $.post(). Я слышал что в третьих версиях jQuery изменилась сигнатура:

$.post([settings]);

Как использовать метод $.post() в версиях 3.1.1 и выше? Или параметры нужно передавать в виде массива, а не в виде строки? А jQuery 2.2.4 уже поддерживает HTML5?
Как скачать jQuery? Я использовал IE-11, но при нажатии на ссылку он всего лишь выдал код, а загрузка файла не началась. У Вас есть архивы jquery-3.3.1-min.zip?
Миниатюры
Вставка записей из формы в базу данных через jQuery-AJAX   Вставка записей из формы в базу данных через jQuery-AJAX   Вставка записей из формы в базу данных через jQuery-AJAX  

Вставка записей из формы в базу данных через jQuery-AJAX  
0
767 / 323 / 157
Регистрация: 26.05.2016
Сообщений: 2,127
06.08.2018, 16:40
Цитата Сообщение от БузинВладимир Посмотреть сообщение
Как скачать jQuery? Я использовал IE-11, но при нажатии на ссылку он всего лишь выдал код, а загрузка файла не
создайте js файл и копируйте туда этот код

Добавлено через 22 секунды
https://jquery-docs.ru/jQuery.post/

Добавлено через 12 секунд
http://api.jquery.com/jquery.post/
0
0 / 0 / 4
Регистрация: 21.08.2017
Сообщений: 208
07.08.2018, 20:43  [ТС]
Наконец-то переход на PDO решил все проблемы:



connect_pdo.php

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$host='localhost';
$db='stomat';
$user_mysql='root';
$pass_mysql='';
try {
$connection = new PDO("mysql:host=$host;dbname=$db", $user_mysql, $pass_mysql);
$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$statement = $connection->query("set character_set_client='utf8'");
$statement = $connection->query("set character_set_results='utf8'");
$statement = $connection->query("set collation_connection='utf8_general_ci'");
} catch (PDOException $e) {
    die( 'Ошибка! Всё. Приехали... '.$e->getMessage() );
}
?>
insert.php

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<?php
include_once 'connect_pdo.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['nomer_telefona'];
$phone = str_replace(' ', '', $phone);
$e_mail=$_POST['pochta'];
$e_mail = str_replace(' ', '', $e_mail);
$services = @intval($_POST['services']);
$doctors = @intval($_POST['doctors']);
$date=@date("Y-m-d", strtotime($_POST['data_priema'])) or die("Ошибка! Некорректный ввод даты приёма!");
$time=@date("H:i", strtotime($_POST['vremya_priema'])) or die("Ошибка! Некорректный ввод времени приёма!");
$statement = $connection->prepare("SELECT COUNT(*) FROM appointment WHERE date = :date_of_appointment AND time = :time_of_appointment");
$statement->bindParam(':date_of_appointment', $date);
$statement->bindParam(':time_of_appointment', $time);
$statement->execute();
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", strtotime($date)) == "Saturday") && (strcmp($time, "17:00") >= 0)) {
    echo 'Извините, но в этот день приём до 17:00!';
} elseif (date("l", strtotime($date)) == "Sunday") {
    echo 'Извините, но этот день - выходной!';
} elseif ($statement->fetchColumn() > 0) {
    echo 'Приём в указанные дату и время уже назначен!';
} else {
$statement = $connection->query('SELECT COUNT(*) FROM patient');
$new_pat_id = $statement->fetchColumn() + 1;
$statement = $connection->prepare("INSERT INTO patient VALUES (:patnum, :lastname, :firstname, :otchestvo, :telephone, :pozhta)");
$statement->bindParam(':patnum', $new_pat_id);
$statement->bindParam(':lastname', $familija);
$statement->bindParam(':firstname', $imja);
$statement->bindParam(':otchestvo', $otchestvo);
$statement->bindParam(':telephone', $phone);
$statement->bindParam(':pozhta', $e_mail);
$statement->execute();
if($statement->rowCount() > 0) {
    echo 'Ваши личные данные сохранены!'.'<br />';
} else {
    echo 'Ошибка! Некорректный ввод личных данных!'.'<br />';
}
$statement = $connection->query('SELECT COUNT(*) FROM appointment');
$new_app_id = $statement->fetchColumn() + 1;
$statement = $connection->prepare("INSERT INTO appointment VALUES (:id_app, :id_pat, :id_doc, :date_of_appointment, :time_of_appointment, :usluga)");
$statement->bindParam(':id_app', $new_app_id);
$statement->bindParam(':id_pat', $new_pat_id);
$statement->bindParam(':id_doc', $doctors);
$statement->bindParam(':date_of_appointment', $date);
$statement->bindParam(':time_of_appointment', $time);
$statement->bindParam(':usluga', $services);
$statement->execute();
if($statement->rowCount() > 0) {
    $statement = $connection->prepare("SELECT price FROM service WHERE service_id = :services");
    $statement->bindParam(':services', $services);
    $statement->execute();
    $price_row = $statement->fetch(PDO::FETCH_ASSOC);
    $price = $price_row['price'];
    echo 'Запись на приём оформлена!'.'<br />'.'Ваша цена составляет '.$price.' рублей';
} else {
    echo 'Ошибка! Некорректный ввод данных о приёме!';
}
}
} else {
echo 'Данные не получены!';
}
?>
stomkab-main.html

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
                             <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="text" name="nomer_telefona" 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="text" name="pochta" size="80" class="checkout-input checkout-name" pattern="([A-z0-9_.-]{1,})@([A-z0-9_.-]{1,}).([A-z]{2,8})" placeholder="E-mail" title="Введите адрес электронной почты в формате <имя_пользователя>@<Название_сайта>.<домен_государства> без пробелов. Имя пользователя и название сайта содержат не менее 1 символа, а домен государства - от 2 до 8 букв" 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="text" name="data_priema" class="checkout-input checkout-name" pattern="[0-9]{4}-[0-9]{2}-[0-9]{2}" placeholder="Дата приёма" title="Введите дату приёма пациента в формате <ГГГГ>-<ММ>-<ДД> без пробелов" maxlength="10" required>
                                     <select name="vremya_priema" class="checkout-input checkout-name" required>
                                       <option>Выберите время приёма</option>
                                       <option value="08:00">8:00</option>
                                       <option value="08:49">8:49</option>
                                       <option value="09:38">9:38</option>
                                       <option value="10:27">10:27</option>
                                       <option value="11:16">11:16</option>
                                       <option value="12:05">12:05</option>
                                       <option value="13:43">13:43</option>
                                       <option value="14:32">14:32</option>
                                       <option value="15:21">15:21</option>
                                       <option value="16:10">16:10</option>
                                       <option value="16:59">16:59</option>
                                       <option value="17:48">17:48</option>
                                       <option value="19:26">19:26</option>
                                     </select>
                                 </p>
 
                                 <p>
                                     <input type="submit" value="Записаться" class="checkout-btn">
                                 </p>
 
                             </form>
Но мне по-прежнему непонятна новая сигнатура метода $.post в jQuery выше 3.0.0 Судя по документации, атрибут settings - это ассоциативный массив типа PlanObject, а это значит, нужно писать

$.post({url: $(this).action(), data: $(this).serialize(), dataType: 'json'}).done(success);
вместо

$.post($(this).action(), $(this).serialize(), success, 'json');
Или фигурные скобки и индексы массива можно опустить, но использовать done вместо success? На новую библиотеку я переходить не решился.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.08.2018, 20:43
Помогаю со студенческими работами здесь

Вставка данных в базу из формы
Я запутался, как из значение из textarea name вставить в таблицу opisanie колонку opis id 1 &lt;form name='upload'...

JQuery & ajax отправка данных формы
Здравствуйте. Давно мучаюсь с проблемой и никак не могу найти решение: Имеется страница администратора с боковыми закладками, на...

Вставка картинки в базу данных через C#
Какой фуекцией можно реализовать вставку(загрузку из папки) картинку в таблицу базы данных?))) Ведь можно правда так сделать)

Отправка данных с формы через ajax
Всем привет) У меня появились сразу 2 проблемы (вроде всё верно написано, но не работает). В общем вот у меня есть вот 1 форма ...

Ajax отправка данных из формы в базу mysql и вывод из базы mysql
$(function() { $('#chat_submit').click(function(e) { e.preventDefault(); var chat_name =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru