За последние 24 часа нас посетил 33021 программист и 1821 робот. Сейчас ищут 865 программистов ...

Почему не добавляется в Базу Данных

Тема в разделе "PHP для новичков", создана пользователем tavintavan, 11 май 2018.

  1. tavintavan

    tavintavan Новичок

    С нами с:
    29 апр 2018
    Сообщения:
    34
    Симпатии:
    3
    Подскажите где ошибка. Почему не добавляется в Базу Данных
    Структура БД

    [​IMG]

    есть файл index.php - контроллер

    PHP:
    1. <?php
    2. // начальный файл
    3. require_once("database.php");
    4. require_once("models/func.php");
    5.  
    6. $link = db_connect();
    7.  
    8. if(isset($_GET['action'])){
    9.     $action = $_GET['action'];
    10. }else{
    11.     $action = "";
    12. }
    13.  
    14. if($action == "add"){
    15.     if(!empty($_POST)){
    16.         video_add($link, $_POST['video'], $_POST['datetime'], $_POST['timezone']);
    17.         header("Location: index.php");
    18.     }
    19.     include("views/form.php");
    20. }else{
    21.     $video = video_get($link, $_GET['id']);
    22.     include("views/video.php");
    23. //echo var_dump($video);
    24. }
    25. ?>
    Файл формы ввода form.php - въюшка

    HTML:
    1. <!DOCTYPE html>
    2.     <meta charset="utf-8">
    3.     <title>Paste a link to the video</title>
    4.     <link rel="stylesheet" href="./css/style.css">
    5.     <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
    6. </head>
    7.  
    8.     <div class="container">
    9.         <h2>Paste a link to the video</h2>
    10.         <div>
    11.             <form method="post" action="form.php?action=add">
    12.                 <label>
    13.  
    14.                     <b>Link to video</b><br>
    15.                     <input type="text" name="title" value="" size="45" class="form-item" autofocus required>
    16.  
    17.                 </label><br>
    18.                 <label>
    19.                     <input type="submit" value="Сохранить" class="btn">
    20.                 </label>
    21.             </form>
    22.         </div>
    23.         <footer>
    24.             <p>Copyright&copy; tavintavan</p>
    25.         </footer>
    26.     </div>
    27. </body>
    28. </html>
    И файл моделей - func.php

    PHP:
    1. function video_add($link, $video, $datetime, $timezone)
    2. {    //Подготовка
    3.     $video = trim($video);
    4.  
    5.     //datetyme, берем из компьютера
    6.     $datetime = date('Y-m-d H:i:s');
    7.  
    8.     //tymezone,  надо узнать?
    9.     $timezone = '';
    10.  
    11.     //Проверка
    12.     if ($video == '')
    13.         return false;
    14.  
    15.     //Запрос
    16.     $t = "INSERT INTO video (video, datetime, timezone) VALUES ('%s', '%s', '%s')";
    17.  
    18.     $query = sprintf($t, mysqli_real_escape_string($link, $video), mysqli_real_escape_string($link, $datetime), mysqli_real_escape_string($link, $timezone));
    19.  
    20.  
    21.     $result = mysqli_query($link, $query);
    22.  
    23.     if (!$result)
    24.     {
    25.         die (mysqli_error($link));
    26.     }
    27.  
    28.     return true;
    29. }
     

    Вложения:

    • mysql.jpg
      mysql.jpg
      Размер файла:
      36,3 КБ
      Просмотров:
      56
    #1 tavintavan, 11 май 2018
    Последнее редактирование: 11 май 2018
  2. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    657
    Может, тут: "datetime". Хотя заставлять нас заниматься гаданием не оч. красиво с вашей стороны.
    --- Добавлено ---
    Что за ошибка возвращается?
     
  3. tavintavan

    tavintavan Новичок

    С нами с:
    29 апр 2018
    Сообщения:
    34
    Симпатии:
    3
    А как должно быть красиво?
    Дело в том что ничего не возвращает.
     
  4. marsik

    marsik Активный пользователь

    С нами с:
    30 дек 2008
    Сообщения:
    246
    Симпатии:
    17
    Сделайте, что бы возвращало.
     
  5. tavintavan

    tavintavan Новичок

    С нами с:
    29 апр 2018
    Сообщения:
    34
    Симпатии:
    3
    Вставил во вьюшку form.php
    PHP:
    1.  <?php
    2.         echo "<pre>";
    3.             var_dump($_POST);
    4.             var_dump($_GET);
    5.         echo "</pre>";
    6.         ?>
    Выводит

    PHP:
    1. array(4) {
    2.   ["video"]=>
    3.   string(9) "asssssssd"
    4.   ["datetime"]=>
    5.   string(19) "2018-05-13 12:20:26"
    6.   ["timezone"]=>
    7.   string(5) "UTS+8"
    8.   ["save"]=>
    9.   string(18) "Сохранить"
    10. }
    11. array(1) {
    12.   ["action"]=>
    13.   string(3) "add"
    14. }
    Однако все равно в базу данных не записывает
     
  6. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    657
    @tavintavan, не тупи. Какую ошибку печатает mysqli_error? Если ничего не печатает, то запрос выполняется успешно или до него даже дело не доходит.
    --- Добавлено ---
    PHP:
    1.     if(!empty($_POST)){
    2.         video_add($link, $_POST['video'], $_POST['datetime'], $_POST['timezone']);
    3.         header("Location: index.php");
    4.     }
    5.     include("views/form.php");
    Проверяйте конкретные POST-параметры. Если отдаете Location, то нефиг к нему в догонку цеплять какой-то контент.
     
  7. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Забавно
    --- Добавлено ---
    Плохой машина:mad:! Не делает что я ему говорю.:D
    --- Добавлено ---
    Отлично данные поступают...
    @tavintavan посмотри куда ты данные из формы отправляешь.
     
  8. twim32

    twim32 Активный пользователь

    С нами с:
    29 мар 2017
    Сообщения:
    275
    Симпатии:
    58
    Включи ошибки и зри в корень! (Вставить в самом начале индекс.пхп)
    Код (Text):
    1. error_reporting(E_ALL);
    2. ini_set('display_errors', 1);
     
  9. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Мозг включить надо.
     
  10. tavintavan

    tavintavan Новичок

    С нами с:
    29 апр 2018
    Сообщения:
    34
    Симпатии:
    3
    Логика получается сдедующая:

    по следующей web строке
    PHP:
    1. http://localhost/skelet/index.php?action=add
    выводится форма form.php

    в ней переписал ссылку на файл, на эту ссылку
    PHP:
    1. <form method="post" action="index.php">
    После ввода данных в указанную форму эти данные методом пост отправляются на страницу index.php, который подгружает из файла func.php функцию добавления video_add() в результате должно записаться данные в базу
    однако записи нет.
    Похоже что данные POST не доходят до функции добавления video_add() либа данная функция кривая

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////
    функции
    PHP:
    1. error_reporting(E_ALL);[/B][/B][/B][/B][/B][/B]
    2. [B][B][B][B][B][B]ini_set('display_errors', 1);

    Ошибку не выводят




     
    #10 tavintavan, 15 май 2018
    Последнее редактирование: 15 май 2018
  11. tavintavan

    tavintavan Новичок

    С нами с:
    29 апр 2018
    Сообщения:
    34
    Симпатии:
    3
    ну или ошибка с относительными абсолютными ссылками на файлы
     
  12. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    657
    У тебя один и тот же адрес используется и на чтение (view/edit), и на запись (что в общем-то правильно), чЁ ты тогда один index.php пихаешь в экшин формы?
    --- Добавлено ---
    Нужно – тек. адрес с якорем возврата, только тек. адрес или только якорь возврата, либо на худой конец оставить совершенно пустой экшин и якорь вместе с адресом указывать при редиректе.
     
    #12 miketomlin, 15 май 2018
    Последнее редактирование: 15 май 2018
  13. tavintavan

    tavintavan Новичок

    С нами с:
    29 апр 2018
    Сообщения:
    34
    Симпатии:
    3
    Справился
    Создал другую структуру папок
    теперь есть 2 index.php
    один в корне, другой в папке admin
    admin/index.php
    PHP:
    1. <?php
    2.  
    3. // начальный файл
    4. require_once("../database.php");
    5. require_once("../models/func.php");
    6.  
    7. $link = db_connect();
    8.  
    9. if(isset($_GET['action'])){
    10.     $action = $_GET['action'];
    11.  
    12. }else{
    13.     $action = "";
    14. }
    15.  
    16. if($action == "add"){
    17.     if(!empty($_POST)){
    18.    
    19.         video_add($link, $_POST['video'], $_POST['datetim'], $_POST['timezone']);
    20.         }
    21. }
    22.  
    23.     include("../views/form.php");
    24.  
    25. ?>
    views/form.php

    HTML:
    1. <form method="post" action="">
    2.                 <label>
    3.                     <b>Link to video</b>
    4.                     <br />
    5.                     <input type="text" name="video" value="" size="45" class="form-item" autofocus required>
    6.                     <input type="hidden" name="datetim" value="<?=date('Y-m-d H:i:s')?>">
    7.                     <input type="hidden" name="timezone" value="UTS+8"><br />
    8.                 </label><br />
    9.                 <label>
    10.                     <input type="submit" name="save" value="Сохранить" class="btn">
    11.                 </label>
    12.             </form>
    models/func.php

    PHP:
    1. function video_add($link, $video, $datetim, $timezone)
    2. {    //Подготовка
    3.     $video = trim($video);
    4.  
    5.     //Проверка
    6.     if ($video == '')
    7.         return false;
    8.     //Запрос
    9.     $t = "INSERT INTO video (video, datetim, timezone) VALUES ('%s', '%s', '%s')";
    10.     $query = sprintf($t, mysqli_real_escape_string($link, $video), mysqli_real_escape_string($link, $datetim), mysqli_real_escape_string($link, $timezone));
    11.     $result = mysqli_query($link, $query);
    12.     if (!$result)
    13.     {
    14.         die (mysqli_error($link));
    15.     }
    16.     return true;
    17. }

    --- Добавлено ---
    Только не понял action="" экшен то у меня пустой.Куда тогда передались данные что они записались в базу данных.
     
  14. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    657
    Редирект в ответ на POST куда делся?

    Выбрал «худой конец», кто бы сомневался :) Данные передались в шестое измерение и теперь будут капать тебе на мозг во сне в ночь с пятницы на субботу.
     
  15. tavintavan

    tavintavan Новичок

    С нами с:
    29 апр 2018
    Сообщения:
    34
    Симпатии:
    3
    Да поставил редирект работает нормально , возвращает нужную страницу.