Не работает $_GET. В чем проблема?

12
G
На сайте с 24.11.2010
Offline
63
2132

Всем привет!

Подскажите, пожалуйста, из-за чего не работает $GET параметр и как можно узнать причину?

Суть в следующем. Перехожу в админку (все статьи, что есть, нормально отображаются, ссылки на удалить/редактировать так-же корректно отображаются). Перехожу на шаблон с добавлением статьи. Заполняю поля и при нажатии на "Добавить" переходит просто на главную страницу в админке - статья не добавляется. В чем может быть дело?

Index.php в админке:

```

<?php

require_once ("../config.php");
require_once ("../models/articles.php");
$link = db_connect();
if(isset($_GET['action']))
$action = $_GET['action'];
else
$action = "";

if($action == "add"){
if(!empty($_POST)){
articles_new($link, $_POST['title'], $_POST['date'], $_POST['description']);
header ("Location: index.php");
}
include ("../views/admin/add.php");
}else{
$articles = articles_all($link);
include("../views/admin/admin_panel.php");
}

?>

В модели функция:

function articles_new($link, $title, $date, $description){

$title = trim($title);
$description = trim($description);
if ($title == '')
return false;
$t = "INSERT INTO articles (title, date, description) VALUES ('%s','%s','%s')";
$query = sprintf($t, mysqli_real_escape_string($link, $title),mysqli_real_escape_string($link,$date),mysqli_real_escape_string($description));
$result = mysqli_query($link, $query);
if (!result)
die(mysqli_error($link));
return true;
}

Страница с добавлением статьи:


<div class="container">
<h1>Панель управления</h1>
<a href="index.php">Главная страница</a>
<form method="post" action="index.php?action=add">
<label>
Заголовок
<input type="text" name="title" class="form-item" autofocus required>
</label>
<label>
Дата
<input type="date" class="form-item" name="date" required>
</label>
<label>
Описание
<textarea class="form-item" name="description" required></textarea>
</label>
<input type="submit" value="Добавить" class="btn">

</form>
<?php include("footer.php"); ?>
</div>

var_dump($_GET); и var_dump($_REQUEST); выводит:

array(1) { ["action"]=> string(3) "add" }

var_dump($_POST) выводит:

array(0) { }

но и он не используется нигде. Только $_GET использовал.

Выводил все на странице добавление материалов.

Что не так в коде и как искать проблему?

NellSEO
На сайте с 03.06.2017
Offline
12
#1

Если кратко - надо смотреть исходники.

$_POST используется формой для отправки данных:

<form method="post" action="index.php?action=add">

, может быть это поможет.

M
На сайте с 04.12.2013
Offline
223
#2

Grep, а с чего вы решили, что не работает? Возможно, в самом добавлении ошибка, а редирект прописан в коде, что в общем-то правильно, только его нужно делать не хз куда, а обратно на форму (или на крайняк на список при наличии соотв указания). После header Location нужно делать exit, если нет полного разветвления и в тек. ветке команда не последняя.

NellSEO, так есть же.


if(isset($_GET***91;'action'***93;))
$action = $_GET***91;'action'***93;;
else
$action = "";
Почитайте про тернарный оператор, включая упрощенку в послед. версиях.

---------- Добавлено 05.06.2017 в 13:52 ----------


if (!result)

$

---------- Добавлено 05.06.2017 в 13:56 ----------

Можно просто писать в конце вызова ф-ции or die, хотя в целом это конечно костыльный подход, так в продакшине не делают.

Домены и скрипт для коротких ссылок: https://u75.ru/domains-for-shortcuts
S
На сайте с 30.09.2016
Offline
469
#3
Grep:
var_dump($_POST) выводит:
array(0) { }
но и он не используется нигде. Только $_GET использовал.

Может быть, я что-то недопонял, но в коде прописано условие добавления статьи

if(!empty($_POST))
Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
G
На сайте с 24.11.2010
Offline
63
#4

Сделал проверки:

if(isset($_GET['action']))

$action = $_GET['action'];

else

$action = "";

if($action == "add"){

if(!empty($_POST)){

echo "Данные успешно заполнены!".var_dump($_POST)." Статья добавлена, поздравляю!<br>";

articles_new($link, $_POST['title'], $_POST['date'], $_POST['description']);

header ("Location: in``dex.php");

}else echo "Пока-что все пусто...";

var_dump($_GET); и var_dump($_REQUEST); выводит:

array(1) { ["action"]=> string(3) "add" }

Request Method:POST

Content-Type:text/html; charset=UTF-8

title:asdasdasd

date:2017-06-14

description:asdad

Вроде все отправляется. Все, по идеи, должно работать.

Пришел к выводу, что не работает сама функция. Но не могу понять как произвести проверку.

Сама функция:

function articles_new($link, $title, $date, $description){

$title = trim($title);

$description = trim($description);

$t = "INSERT INTO articles (title, date, description) VALUES ('%s','%s','%s')";

$query = sprintf($t, mysqli_real_escape_string($link, $title),mysqli_real_escape_string($link,$date),mysqli_real_escape_string($description));

$result = mysqli_query($link, $query);

if (!result)

die(mysqli_error($link));

return true;

}

Взять, к примеру, две переменные тайтл и дескрипш:

$title = trim($title);

$description = trim($description);

и после $title = trim($title); выводим echo "Проверка заголовка"? И как проверить sprintf и переменную $t?

S
На сайте с 30.09.2016
Offline
469
#5

А попробуйте

mysqli_real_escape_string($link, $description)
AS
На сайте с 07.11.2014
Offline
24
#6

Самый простой способ проверки (кроме error-лога), вставить echo и смотреть где обрывается выполнение.

Добавьте перед $result = mysqli_query($link, $query);

echo $query;

и посмотрите какой запрос формируется, попробуйте его выполнить руками в базе.

Добавьте после $result = mysqli_query($link, $query);

echo 'test';

и посмотрите, выведется это сообщение или нет.

А вообще, включите отображение ошибок, проще с отладкой будет, в самом начале файла добавьте:

ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
error_reporting(-1);

Если у вас есть какой-то главный файл, через который проходят все запросы, лучше добавьте это в него. Когда разберетесь, уберите эти строки.

p.s.

Кстати да, ссылки на соединение действительно не хватает.

mysqli_real_escape_string($description)
G
На сайте с 24.11.2010
Offline
63
#7

Спасибо, ребята! Действительно проглядел подключение к базе в mysqli_real_escape_string. И еще пару моментов подправил. Ошибки пропали.

Теперь такая проблема, после попытки добавить в базу статью:

Incorrect date value: '' for column 'date' at row 1

Не верное значение в 'date' в строке 1, как я понимаю. Что не так?

Вид базы у меня следующий:

1) id

2) title

3) description

4) img

5) alt

6) anons

7) author

8) date

9) show

10) category

Пока-что вставляю через функцию только заголовок, дату, описание и картинку. Заголовок, описание, картинка - это строки. А как дату правильно прописать?

INSERT INTO articles (title, date, description, img) VALUES ('%s','%s','%s','%s')";

M
На сайте с 04.12.2013
Offline
223
#8

2017-06-07

AS
На сайте с 07.11.2014
Offline
24
#9

Судя по ошибке, в поле даты вставляется пустое значение.

G
На сайте с 24.11.2010
Offline
63
#10

Спасибо всем, что помогаете! В админке статьи добавляются. Еще раз спасибо за помощь!

Только после отправки (нажатии на кнопку "Добавить") появляется ошибка. Не понимаю, пока-что, её значение. В файле index.php не обновляется информация в шапке или о чем эта ошибка? Как это можно исправить? И еще один момент.

Ошибка: Warning: Cannot modify header information - headers already sent by (output started at E:\OpenServer\OpenServer\domains\myblog\admin\index.php:13) in E:\OpenServer\OpenServer\domains\myblog\admin\index.php on line 15

index.php:

```

if(isset($_GET['action']))

$action = $_GET['action'];

else

$action = "";

if($action == "add"){

if(!empty($_POST)){

echo "Данные успешно заполнены!".var_dump($_POST)." Статья добавлена, поздравляю!<br>";

articles_new($link, $_POST['title'], $_POST['date'], $_POST['description']);

header ("Location: in``../views/admin/index.php");

}else echo "Пока-что все пусто...";

include ("../views/admin/add.php");

}else{

$articles = articles_all($link);

include("../views/admin/admin_panel.php");

}

```

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий