За последние 24 часа нас посетили 22012 программистов и 996 роботов. Сейчас ищут 825 программистов ...

Запрос INSERT в БД вставляет сразу две записи

Тема в разделе "PHP для новичков", создана пользователем Journalist, 1 ноя 2020.

  1. Journalist

    Journalist Новичок

    С нами с:
    21 авг 2020
    Сообщения:
    22
    Симпатии:
    0
    помогите пожалуйста. вставляю запись в бд, а их сразу две залетает. почему так

    index.php
    Код (Text):
    1. <?php
    2. require_once 'config/db.php';
    3. require_once 'core/function_db.php';
    4. require_once 'core/function.php';
    5. $conn = connect();
    6.  
    7.  
    8.  
    9. $route = $_GET['route']; // NULL!
    10.  
    11. $result = execQuery('INSERT INTO info (cid, title, descr_min, description, image) VALUES(1, "как меня унизили в гик шопе", "Зашел как-то в магазин гик атрибутик", "Зашел как-то в магазин гик атриубтик", "static/images/emoji.jpg")');
    12.  
    13.  
    14. switch ($route) {
    15.     case NULL:
    16.         $query = 'select * from info';
    17.         $result = select($query);
    18.         require_once 'template/main.php';
    19.         break;
    20.     case 1:
    21.         echo "i равно 1";
    22.         break;
    23.     case 2:
    24.         echo "i равно 2";
    25.         break;
    26. //    default:
    27. //        echo "i не равно 0, 1 или 2";
    28. }
    файл htaccess

    Код (Text):
    1. RewriteEngine On
    2. RewriteBase /
    3. ErrorDocument 404 /404
    4. RewriteRule ^index\.php$ - [L]
    5. RewriteCond %{REQUEST_FILENAME} !-f
    6. RewriteCond %{REQUEST_FILENAME} !-d
    7. RewriteRule ^(.*)$ /index.php?route=$1 [L]

    файл function_db.php

    Код (Text):
    1. <?php
    2.  
    3. function connect(){
    4.     $conn = mysqli_connect(SERVER, USER, PASSWORD, DB);
    5.     if (!$conn) {
    6.         die("Connection failed: " . mysqli_connect_error());
    7.     }
    8.     mysqli_set_charset($conn, "utf8");
    9.     return $conn;
    10. }
    11.  
    12. function select($query) {
    13.     global $conn;
    14.     $queryResult = [];
    15.     $result = mysqli_query($conn, $query);
    16.  
    17.     if (mysqli_num_rows($result) > 0) {
    18.         while($row = mysqli_fetch_assoc($result)) {
    19.             $queryResult[] = $row;
    20.         }
    21.     }
    22.     return $queryResult;
    23. }
    24.  
    25. function execQuery($query) {
    26.     global $conn;
    27.     if (mysqli_query($conn, $query)){
    28.         return true;
    29.     }
    30.     return false;
    31. }
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    Значит два раза файл выполняет
     
  3. Journalist

    Journalist Новичок

    С нами с:
    21 авг 2020
    Сообщения:
    22
    Симпатии:
    0
    Об этом я с горем пополам догадался. А делать то что? Есть может мысли?
     
  4. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    кто думает - у того всегда есть мысли.

    1) У вас добавление идет ВСЕГДА.... без каких либо условий, без проверок - я думаю это неправильно
    2) После добавления записи в БД обычно делают редирект на какую-либо страницу что исключает повторную отправку результата
     
  5. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Тут мысль одна. Или используй вменяемый роутинг. Или отложи пока использование ед. точки входа.

    Вставка по GET, ну-ну. Радуйся, что два, а не 122, хотя еще не вечер.
    --- Добавлено ---
    Фронт с простым роутингом на основе БД – см. концовку этой статьи и комменты к ней – специально для вас подписка на 5 лет за 10 руб.
    --- Добавлено ---
    Только не используй «роут» со слагом "favicon.ico" ;) Ограничься для начала показанным в качестве примера "page", чтобы «заработал» такой адрес: /page
     
  6. Journalist

    Journalist Новичок

    С нами с:
    21 авг 2020
    Сообщения:
    22
    Симпатии:
    0
    главное чтобы мысли были правильными, а они правильные, когда знаешь. посмотрю как делать редирект, спасибо!
    --- Добавлено ---
    я начинающий, хорошо попробуем роутинг. спасибо
    --- Добавлено ---
    одного не пойму, почему когда другие загружают мои файлы у них все нормально работает....
     
  7. Bit99

    Bit99 Новичок

    С нами с:
    14 окт 2020
    Сообщения:
    53
    Симпатии:
    4
    Что-то не пойму, в htaccess две переадресации идет? Сперва на index, а потом на этот же index, но с get параметром? Может в этом проблема?
     
  8. Journalist

    Journalist Новичок

    С нами с:
    21 авг 2020
    Сообщения:
    22
    Симпатии:
    0
    я начинающий,
    --- Добавлено ---
    да кто его знает, я просто скопировал файл, так надо было, долго объяснять... может и две переадресации, в общем сейчас разбираюсь
     
  9. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    И что? Документацию из одной странички не осилишь? Или 10 руб. нет?
    --- Добавлено ---
    Хде? Первое правило – это хрень в стиле WP.

    Второе – в стиле ТСа :) (шучу) Рерайт пути в GET-параметр – отстой и уже раритет ;)
    --- Добавлено ---
    P.S. «RewriteBase /» с вед. слешем в подстановке правила (/index.php?route=$1) обычно не используются вместе.
     
    #9 miketomlin, 2 ноя 2020
    Последнее редактирование: 2 ноя 2020
  10. Bit99

    Bit99 Новичок

    С нами с:
    14 окт 2020
    Сообщения:
    53
    Симпатии:
    4
    Ну а это хрень в стиле laravel и прекрасно работает. Если не можете дать нормальный совет нечего вообще что-то писать. Тут товарища adsoft хватает, несет какую-то чушь постоянно.
    Код (Text):
    1.  
    2.     RewriteCond %{REQUEST_FILENAME} !-d
    3.     RewriteCond %{REQUEST_FILENAME} !-f
    4.     RewriteRule ^ index.php [L]
     
  11. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Если не можете или не хотите понять мои посты, продолжайте набивать свои, не вмешивая в это грязное дело меня. Мы тут что-нибудь кроме банальных или сильно сомнительных утверждений услышим от вас? Или думали, после слова «чушь» в отношении чужих слов сразу сойдете за умного? Здесь такое не прокатит. Это не форум сеошников и т.п.