@ruslan_f0x

Как сделать поиск записи в бд и отменить повторную отправку формы в бд Laravel 6?

Добрый день!
Прошу помощи!
Есть форма,которая считывает данные и отправляет их в бд. При первом заходе на страницу выдается ошибка, что $_GET пустой, если же $_GET не пустой, то при перезагрузке страницы отправляет одни и те же данные.

<form method="post">
        <label>Биржы</label>
        <select name="exchanges">
            <?
            $names_exchanges = DB::select('select name from trades;');
            ?>
            @foreach ($names_exchanges as $exchange)
                <option value="{{ $exchange->name }}">{{$exchange->name }}</option>
            @endforeach
        </select>
        <label>Название</label>
        <input name="name_ac">
        <label>Key</label>
        <input name="key">
        <label>Secret</label>
        <input name="secret">
        <input type="submit">
    </form>

Код контроллера:
public function index()
    {
        $user = Auth::id();
        $exchange = $_GET['exchanges'];
        $name_ac = $_GET['name_ac'];
        echo $key_acc = $_GET['key'];
        $secret = $_GET['secret'];

        $results = DB::select('select id from trades where name = ?', [$exchange]);
        global $trade_id;
        foreach ($results as $key => $object) {
            $trade_id = $object->id;
        }
        $checkDB = DB::table('user_trades')
            ->where('key_acc', $key_acc);

        if ($checkDB) {
            
            DB::insert('insert into user_trades (name,key_acc,skey,user_id,trade_id) values (?, ?, ?, ?, ?)', [$name_ac, $key_acc, $secret, $user, $trade_id]);

        } else {
            echo "Такой аккаунт существует";
        }

P.S. я новичок)
  • Вопрос задан
  • 214 просмотров
Пригласить эксперта
Ответы на вопрос 3
ThunderCat
@ThunderCat
{PHP, MySql, HTML, JS, CSS} developer
1) нет формы в вопросе, но не суть...
2) юзайте POST вместо GET
2.1) if ($_SERVER['REQUEST_METHOD'] === 'POST') {...
2.2) header('location: /');

Отдельным пунктом - не вставлять данные пришедшие от пользователя без обработки в запросы.

UPD: $checkDB у вас вернет true (на самом деле непустой объект запроса) если пользователь уже есть, и вы ЕЩЕ РАЗ добавляете запись... Найс...
Ответ написан
Комментировать
daemonhk
@daemonhk
ПсиХоПат
1. НИКОГДА не используйте напрямую гет и пост без обработки, делайте экранирование, приводите к нужному типу, и т.д.
2. ЖЕЛАТЕЛЬНО сравнивать данные не напрямую, а их хэши
3. Не используйте global - запросто можете затереть переменную, а потом удивляться результату
4. Учитесь дебажить, а не бежать на тостер по любому чиху, например, у вас каждый раз добавляется запись, значит, условие $checkDB всегда срабатывает. Почему? Смотрите голые запросы в pma, что вам приходит, с чем сравниваете, и т.д.
5. Получение данных делайте перед отрисовкой страницы, а не во время
Ответ написан
Комментировать
@Terran37
Программист
У вас три варианта.
1. Сделать проверку, что такой user_id уже передавался и не делать insert(через связанные сущности)
2. Сделать проверку на дубли констрейнтом на уровне бд при сохранении.
3. Сделать новое поле и ставить пометку, что данные по этому юзеру уже получили.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы