Подскажите где ошибка. Почему не добавляется в Базу Данных Структура БД есть файл index.php - контроллер PHP: <?php // начальный файл require_once("database.php"); require_once("models/func.php"); $link = db_connect(); if(isset($_GET['action'])){ $action = $_GET['action']; }else{ $action = ""; } if($action == "add"){ if(!empty($_POST)){ video_add($link, $_POST['video'], $_POST['datetime'], $_POST['timezone']); header("Location: index.php"); } include("views/form.php"); }else{ $video = video_get($link, $_GET['id']); include("views/video.php"); //echo var_dump($video); } ?> Файл формы ввода form.php - въюшка HTML: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Paste a link to the video</title> <link rel="stylesheet" href="./css/style.css"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous"> </head> <body> <div class="container"> <h2>Paste a link to the video</h2> <div> <form method="post" action="form.php?action=add"> <label> <b>Link to video</b><br> <input type="text" name="title" value="" size="45" class="form-item" autofocus required> </label><br> <label> <input type="submit" value="Сохранить" class="btn"> </label> </form> </div> <footer> <p>Copyright© tavintavan</p> </footer> </div> </body> </html> И файл моделей - func.php PHP: function video_add($link, $video, $datetime, $timezone) { //Подготовка $video = trim($video); //datetyme, берем из компьютера $datetime = date('Y-m-d H:i:s'); //tymezone, надо узнать? $timezone = ''; //Проверка if ($video == '') return false; //Запрос $t = "INSERT INTO video (video, datetime, timezone) VALUES ('%s', '%s', '%s')"; $query = sprintf($t, mysqli_real_escape_string($link, $video), mysqli_real_escape_string($link, $datetime), mysqli_real_escape_string($link, $timezone)); $result = mysqli_query($link, $query); if (!$result) { die (mysqli_error($link)); } return true; }
Может, тут: "datetime". Хотя заставлять нас заниматься гаданием не оч. красиво с вашей стороны. --- Добавлено --- Что за ошибка возвращается?
Вставил во вьюшку form.php PHP: <?php echo "<pre>"; var_dump($_POST); var_dump($_GET); echo "</pre>"; ?> Выводит PHP: array(4) { ["video"]=> string(9) "asssssssd" ["datetime"]=> string(19) "2018-05-13 12:20:26" ["timezone"]=> string(5) "UTS+8" ["save"]=> string(18) "Сохранить" } array(1) { ["action"]=> string(3) "add" } Однако все равно в базу данных не записывает
@tavintavan, не тупи. Какую ошибку печатает mysqli_error? Если ничего не печатает, то запрос выполняется успешно или до него даже дело не доходит. --- Добавлено --- PHP: if(!empty($_POST)){ video_add($link, $_POST['video'], $_POST['datetime'], $_POST['timezone']); header("Location: index.php"); } include("views/form.php"); Проверяйте конкретные POST-параметры. Если отдаете Location, то нефиг к нему в догонку цеплять какой-то контент.
Забавно --- Добавлено --- Плохой машина! Не делает что я ему говорю. --- Добавлено --- Отлично данные поступают... @tavintavan посмотри куда ты данные из формы отправляешь.
Включи ошибки и зри в корень! (Вставить в самом начале индекс.пхп) Код (Text): error_reporting(E_ALL); ini_set('display_errors', 1);
Логика получается сдедующая: по следующей web строке PHP: http://localhost/skelet/index.php?action=add выводится форма form.php в ней переписал ссылку на файл, на эту ссылку PHP: <form method="post" action="index.php"> После ввода данных в указанную форму эти данные методом пост отправляются на страницу index.php, который подгружает из файла func.php функцию добавления video_add() в результате должно записаться данные в базу однако записи нет. Похоже что данные POST не доходят до функции добавления video_add() либа данная функция кривая ////////////////////////////////////////////////////////////////////////////////////////////////////////////// функции PHP: error_reporting(E_ALL);[/B][/B][/B][/B][/B][/B] [B][B][B][B][B][B]ini_set('display_errors', 1); Ошибку не выводят
У тебя один и тот же адрес используется и на чтение (view/edit), и на запись (что в общем-то правильно), чЁ ты тогда один index.php пихаешь в экшин формы? --- Добавлено --- Нужно – тек. адрес с якорем возврата, только тек. адрес или только якорь возврата, либо на худой конец оставить совершенно пустой экшин и якорь вместе с адресом указывать при редиректе.
Справился Создал другую структуру папок теперь есть 2 index.php один в корне, другой в папке admin admin/index.php PHP: <?php // начальный файл require_once("../database.php"); require_once("../models/func.php"); $link = db_connect(); if(isset($_GET['action'])){ $action = $_GET['action']; }else{ $action = ""; } if($action == "add"){ if(!empty($_POST)){ video_add($link, $_POST['video'], $_POST['datetim'], $_POST['timezone']); } } include("../views/form.php"); ?> views/form.php HTML: <form method="post" action=""> <label> <b>Link to video</b> <br /> <input type="text" name="video" value="" size="45" class="form-item" autofocus required> <input type="hidden" name="datetim" value="<?=date('Y-m-d H:i:s')?>"> <input type="hidden" name="timezone" value="UTS+8"><br /> </label><br /> <label> <input type="submit" name="save" value="Сохранить" class="btn"> </label> </form> models/func.php PHP: function video_add($link, $video, $datetim, $timezone) { //Подготовка $video = trim($video); //Проверка if ($video == '') return false; //Запрос $t = "INSERT INTO video (video, datetim, timezone) VALUES ('%s', '%s', '%s')"; $query = sprintf($t, mysqli_real_escape_string($link, $video), mysqli_real_escape_string($link, $datetim), mysqli_real_escape_string($link, $timezone)); $result = mysqli_query($link, $query); if (!$result) { die (mysqli_error($link)); } return true; } --- Добавлено --- Только не понял action="" экшен то у меня пустой.Куда тогда передались данные что они записались в базу данных.
Редирект в ответ на POST куда делся? Выбрал «худой конец», кто бы сомневался Данные передались в шестое измерение и теперь будут капать тебе на мозг во сне в ночь с пятницы на субботу.