Ошибка при добавлении пользователя в БД при помощи POST запроса из модального окна

402
22 сентября 2017, 21:14

Добрый вечер. Создаю телефонный справочник для организации с возможностью добавления и удаления контактов. Полный код можно найти на GIT(https://github.com/Vankalif/pbook). История следующая, логинюсь в админ панель и добавляю пользователя

Все хорошо, пользователь в БД(MySQL) добавляется, отрабатывает JS код

$("#add_user").click(function() {
var name = document.getElementById("name").value;
var phone = document.getElementById("phone").value;
var profession = document.getElementById("profession").value;
var cabinet = document.getElementById("cabinet").value;
var department = document.getElementById("department").value;
var location = document.getElementById("location").value;
$.post(
    "adminTools.php", {
        name: name,
        phone: phone,
        profession: profession,
        cabinet: cabinet,
        department: department,
        location: location
    },
    onAjaxSuccess
);
function onAjaxSuccess(data) {
    console.log(data);
    if (data == "400") {
        $("#add_answer").html("Ошибка создания");
    } else if (data == "200") {
        $("#add_answer").html("Пользователь успешно создан");
    }
}

});

в обработчике adminTools.php, в свою очередь есть проверка на дублирование данных

    require $_SERVER['DOCUMENT_ROOT'].'/db/db.php';
function compareStr (string $param, string $param2){
    $param = mb_strtolower($param);
    $param2 = mb_strtolower($param2);
    $retVal = ($param === $param2) ? true : false ;
    return $retVal;
}
if(isset($_POST['name'], $_POST['phone'], $_POST['profession'], $_POST['cabinet'], $_POST['department'], $_POST['location'])){
    // ищем пользователя в БД
    $user = R::findOne('data', 'name = ?', array($_POST['name']));
    // Если нашли, то сравниваем все поля, если есть разные записываем,
    //иначе завершаем работу скрипта
    if($user){

        if(compareStr($user->name, $_POST['name']) && 
            compareStr($user->phone, $_POST['phone']) && 
            compareStr($user->profession, $_POST['profession']) &&
            compareStr($user->cabinet, $_POST['cabinet']) &&
            compareStr($user->department, $_POST['department']) &&
            compareStr($user->location, $_POST['location'])
            ){
                die("400");
            }
    }

    $data = R::dispense('data');
        $data->name = $_POST['name'];
        $data->phone = $_POST['phone'];
        $data->profession = $_POST['profession'];
        $data->cabinet = $_POST['cabinet'];
        $data->department = $_POST['department'];
        $data->location = $_POST['location'];
        R::store($data);
        die("200");

        }

если ввести одинаковые данные, то пользователь не создастся, но тут именно кроется ошибка, пока открыто окно, пока не перезагрузил страницу и нажимаешь на кнопку он записывает одинаковых пользователей в БД. При дебаге, видно что эта функция библиотеки RedBean PHP:

$user = R::findOne('data', 'name = ?', array($_POST['name']));

не видит, что в БД уже создался пользователь. Если перезагрузить страницу и ввести то же самое, то блокировка отлично отработает. Объясните пожалуйста, почему так происходит.

PS в разработке новичок.

Answer 1

хз что за библиотека ))) скорее всего изменения не вступают в силу иза не закрытия соединения , попробуйте закрыть банальным R::close (может прокатит)))))) или поищите в доке альтернативные решение . Я бы на вашем месте удалил всю никчемную библиотеку и вписал свой код. Могу помочь если надо. Как альтернативное решение , можно добавить перезагрузку страницы.

<scrip>
$(document).ready(function(){
var myflag = 0;
$("#add_user").click(function() {
if(myflag > 0)return false;
myflag++;
var name = document.getElementById("name").value;
var phone = document.getElementById("phone").value;
var profession = document.getElementById("profession").value;
var cabinet = document.getElementById("cabinet").value;
var department = document.getElementById("department").value;
var location = document.getElementById("location").value;
$.post(
    "adminTools.php", {
        name: name,
        phone: phone,
        profession: profession,
        cabinet: cabinet,
        department: department,
        location: location
    },
    onAjaxSuccess
);
function onAjaxSuccess(data) {
    console.log(data);
    if (data == "400") {
        $("#add_answer").html("Ошибка создания");
        myflag--;
    } else if (data == "200") {
        alert("Пользователь успешно создан");
         window.location.href=window.location.href;
    }
}
});
});
</scrip>
READ ALSO
Выборка данных из 3 SQL таблиц

Выборка данных из 3 SQL таблиц

В двух словах, есть 3 таблицы в БД:

364
функция mysql_query

функция mysql_query

Здесь на сайте нашёл вопрос и к нему очень интересный комментарий, что функции mysql_query не существуетНо я её использую, и она есть в php

188
действия с датой выводом на таблицу php

действия с датой выводом на таблицу php

у меня есть три таблицы:

291
Запрос к БД и получение данных в JSON

Запрос к БД и получение данных в JSON

Пытаюсь сделать запрос к БД и получить данные в JSON формате делаю так, но открывается пустая страница без ничего, хотя в таблице есть куча записейОколо...

380