Как запретить вывод блока если он пуст

S
На сайте с 13.11.2012
Offline
72
#31

Сделал все как вы описали, работает! :)

Единственное в вашем коде

<?php
$filename="setup/settings.txt";
include ("setup/config.php");

// Server's timezone for more accurate data
"timezone" => "Russia/Moscow",

// Cache Data - If you notice anomalies, disable this. You should enable this when you get high hits
"cache" => TRUE,

// Enable mode_rewrite? e.g. user/login instead of index.php?a=user/login
"mod_rewrite" => TRUE,

// Enable Compression? Makes your website faster
"gzip" => TRUE,

);

// Include core.php
include ('Core.php');

?>

Удалил );

Т.е. там нет $config = array(); Это верно?

Это тоже пришлось снести, выдавало ошибку.

// Server's timezone for more accurate data

"timezone" => "Russia/Moscow",

// Cache Data - If you notice anomalies, disable this. You should enable this when you get high hits

"cache" => TRUE,

// Enable mode_rewrite? e.g. user/login instead of index.php?a=user/login

"mod_rewrite" => TRUE,

// Enable Compression? Makes your website faster

"gzip" => TRUE,

Обнаружил неожиданный для меня поворот

Теперь не работает админка :(

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

index.php

<?php
session_start();
$filename="settings.txt";
include ('config.php');
include ('encryption.php');

if (isset($_POST["username"]) && !empty($_POST["username"])) {
// this code runs if login request is initiated
if ($_POST['username'] == $admin_username
&& $_POST['password'] == decryptPaswd($admin_password,getEncryptKey())){
// Set session variable
$_SESSION['loggedin'] = 1;
// Redirect to setup page
header("Location: settings.php");
exit;
}
else{
$wrong_credentials=true;
}
}
?>

Я сразу открыл settings.php, где закомментировал проверку авторизации, после чего и обнаружил пустые поля.

<?php
session_start();

//if (!(isset($_SESSION['loggedin']) && $_SESSION['loggedin'] != '')) {
//header ("Location: index.php");
//}

$filename="settings.txt";
include ('config.php');
include ('encryption.php');
?>
<!DOCTYPE html>
........................

Видимо надо было раньше об этом упомянуть :(

K
На сайте с 03.06.2015
Offline
45
#32
Smirnof:
Все данные сохраняю в settings.txt в закодированном виде.

Сперва надо посмотреть как люди делают, поискать решения, а потом сделать лучше чем люди делают. Если начат изобретать свое не зная современных трендов, стопудово изобретете костотряс (реликтовый велосипед без педалей).

Все данные сохраняйте в файле .php и тогда никто просто так из браузера его не откроет, а от запуска спасает либо банальная проверка на заранее установленную переменную в точке входа, либо нормальное перемещение файла в недоступную для публичного доступа папку.

Второе, какой смысл хранить тексты? Храните данные, вот так например

settings.php


<?php
return array('foo'=>1,'bar'=2,'baz'=>array());

Получаете вот так


$this->settings = include(CONFIG_PATH.'/settings.php');

Да, инклюда умеет возвращать как функция.

---------- Добавлено 29.07.2015 в 18:15 ----------

На вопрос как записать массив как исходный текст из данных, ответ:


file_put_contents(CONFIG_PATH.'/settings.php,'<?php return '.var_export($this->config,true).';');

Это же php, а не Си.

---------- Добавлено 29.07.2015 в 18:24 ----------

Smirnof:
ЕЩЕ КОД
..........
$zerocatename = $settings['zerocatename'];

Если уже ответили - не пинайте.

extract($settings)

и все что было элементами массива - стало переменными.

---------- Добавлено 29.07.2015 в 18:54 ----------

Досмотрел страницы до конца. Отрадно что автор темы пытается побороть типичную лапшу, однако решений не проглядывается.

Скорее всего лапша заимствована с таких цмс как DLE, и следует отметить что в современных рамках ей по-прежнему отведено немало места в жирных статических классах загружаемых безусловно на все случаи жизни. Однако есть понимание что безусловность - зло и с ним борются в том числе развитием моделей реюза и наследования вроде mixin и trait.

Короче говоря у автора темы еще нет опыта структуирования данных, обобщения по признакам, по классификации, по MVC. Без всего этого развитие ПО сайта невозможно. Лапша очень быстро сама себя ограничивает.

---------- Добавлено 29.07.2015 в 18:58 ----------

Да, инвариантом extract() является http://php.net/manual/en/function.compact.php

MYSQL PHP JS HTML CSS SEO TXT США СССР
S
На сайте с 19.11.2014
Offline
54
#33
Smirnof:
Сделал все как вы описали, работает! :)
Единственное в вашем коде


Удалил );
Т.е. там нет $config = array(); Это верно?

Это тоже пришлось снести, выдавало ошибку.

Да, правильно

Smirnof:

Обнаружил неожиданный для меня поворот
Теперь не работает админка :(
Не входит в нее, убрал проверку логина и пароля, админка открылась с пустыми данным, все поля пусты, т.е. она не может подгрузить конфиг файл и/или данные из него.
Видимо надо было раньше об этом упомянуть :(

Смотрите, вы заменили

$settings = unserialize(base64_decode($infotxt));

на

$config = unserialize(base64_decode($infotxt));

и убрали все ненужные инициализации. У вас в коде


if ($_POST['username'] == $admin_username
&& $_POST['password'] == decryptPaswd($admin_password,getEncryptKey())){

и до того, как изменили код было


$admin_username = $settings['admin_username'];
$admin_password = $settings['admin_password'];

но сейчас эти значения хранятся в массиве $config, следовательно нужно заменить


if ($_POST['username'] == $config['admin_username']
&& $_POST['password'] == decryptPaswd($config['admin_password'],getEncryptKey())){

и тогда должно всё заработать. Так и с другими переменными, если ещё не заменили

---------- Добавлено 29.07.2015 в 19:26 ----------

kostyanet:

Короче говоря у автора темы еще нет опыта структуирования данных, обобщения по признакам, по классификации, по MVC. Без всего этого развитие ПО сайта невозможно. Лапша очень быстро сама себя ограничивает.

На лапше набираются опыта ))). Сначала функциональный подход, а потом, когда уже есть некая база, можно браться и за ООП и за MVC

kostyanet:

Да, инвариантом extract() является http://php.net/manual/en/function.compact.php

Там были ненужные инициализации переменных, а так да - удобные функции.

S
На сайте с 13.11.2012
Offline
72
#34

Спасибо!

Сделал как вы описали, заработала авторизация но данные в полях все же пусты

<?php
session_start();

if (!(isset($_SESSION['loggedin']) && $_SESSION['loggedin'] != '')) {
header ("Location: index.php");
}
$filename="settings.txt";
include ('config.php');
include ('encryption.php');
?>

здесь тоже что-то нужно изменить?

В коде ниже вывод такой id="url" value="<?php echo $url ?>"

Пробовал заменить на {$this->config["url"]} не помогло

У меня есть еще один похожий на предыдущие файл process-settings.php

<?php

session_start();

if (!(isset($_SESSION['loggedin']) && $_SESSION['loggedin'] != '')) {
header ("Location: index.php");
}
include('encryption.php');

if (!empty($_POST))
{

$store = array(
'zerocatename' =>$_POST ["zerocatename"],
'zerocatesearch' =>$_POST ["zerocatesearch"],
'zerocatevideos' =>$_POST ["zerocatevideos"],
'zeronumber' =>$_POST ["zeronumber"],
'zerosortingresults' =>$_POST ["zerosortingresults"],
'onecatename' =>$_POST ["onecatename"],
'onecatesearch' =>$_POST ["onecatesearch"],
'onecatevideos' =>$_POST ["onecatevideos"],
'onenumber' =>$_POST ["onenumber"],
'onesortingresults' =>$_POST ["onesortingresults"],
...............
'admin_username' =>$_POST ["admin_username"],
'admin_password' =>encryptPaswd($_POST["admin_password"],getEncryptKey()),

);
// Live Code
$fp = fopen('settings.txt','w');
// For demo only
fwrite($fp,base64_encode(serialize($store)));
try{
//enter code to catch
echo "Saved";
}catch(Exception $ex){
//Process the exception
echo "Error code" . $ex;
}

}

else

{
echo "Landed mistakenly ?";
}
?>

Здесь видимо тоже нужно лишнее убрать, но как я понимаю в админке данные не из-за этого не отображаются?

А $_SESSION изменить, но как не знаю...

Вывод в админке заработал после метода тыка, сделал так

<?php echo $config["url"] ?> это верно?

Спасибо!

p.s. вроде работает )

Пробовал переименовать .txt файл в .php и все ссылки на него, ничего не получилось ) видимо сам код править нужно?

S
На сайте с 19.11.2014
Offline
54
#35
Smirnof:

Вывод в админке заработал после метода тыка, сделал так
<?php echo $config["url"] ?> это верно?
Спасибо!

p.s. вроде работает )

Да, хотел вам это и написать.

переменные вида $this->value заменить на $this->config['value'],

а вида $value на $config['value']

Ну, теперь видите, сколько лишних и ненужных переменных инициализировали


$store = array(

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


А $_SESSION изменить, но как не знаю

Нет необходимости что-то делать с $_SESSION исходя из сделанных изменений

S
На сайте с 13.11.2012
Offline
72
#36

Спасибо! Теперь начну разбирать то с чего все и началось, буду сокращать youtube class, буду пробовать )

Да, возможно, например

protected function getcates($nom){
// Construct URL
$part = "snippet";
$this->url = "https://www.googleapis.com/youtube/v3/search?videoEmbeddable=true&key={$this->key}&part=$part&order=data&maxResults=5&q={$this->config[$nom.'catevideos']}&type=video";
// Get Data
$data = $this->http(TRUE);
foreach ($data->items as $yt) {
$html .= $this->listQueryVideo($yt);
}
return $html;
}

И заменяете вызовы getonecate..., ...gettwocate на getcates('one'), getcates('two') и т.д

Это актуально сейчас для моего кода?

S
На сайте с 19.11.2014
Offline
54
#37
Smirnof:
Спасибо! Теперь начну разбирать то с чего все и началось, буду сокращать youtube class, буду пробовать )
И заменяете вызовы getonecate..., ...gettwocate на getcates('one'), getcates('two') и т.д

Это актуально сейчас для моего кода?

Да. Вы сведёте несколько функций к одной.

Единственное, обратите внимание в методе


protected function getcates($nom){
// Construct URL
$part = "snippet";
$this->url = "https://www.googleapis.com/youtube/v3/search?videoEmbeddable=true&key={$this->key}&part=$part&order=data&maxResults=5&q={$this->config[$nom.'catevideos']}&type=video";
// Get Data
$data = $this->http(TRUE);
foreach ($data->items as $yt) {
$html .= $this->listQueryVideo($yt);
}
return $html;
}

на $this->url и $this->key, как себя поведут и будут ли выскакивать ошибки?

S
На сайте с 13.11.2012
Offline
72
#38

{$this->key} давал ошибку, я заменил на {$this->config["key"]}, верно?

Не могу сообразить где и как изменить это {$this->config[$nom.'catevideos']}

И заменяете вызовы getonecate..., ...gettwocate на getcates('one'), getcates('two') и т.д
S
На сайте с 19.11.2014
Offline
54
#39
Smirnof:
{$this->key} давал ошибку, я заменил на {$this->config["key"]}, верно?

Не могу сообразить где и как изменить это {$this->config[$nom.'catevideos']}

$this->config[$nom.'catevideos'] не надо менять, а вот

$this->url ругаться не будет, поэтому смотрите, получаете вы то, что нужно или нет и если нет, то возможно

придётся заменить $this->url на $this->config["url"];

Просто я не знаю, как вы определяли поля класса и какие там взимосвязи и зависимости

S
На сайте с 13.11.2012
Offline
72
#40

Хорошо.

Я имел ввиду, что не могу понять, как скрипт узнает, что делать с {$this->config[$nom.'catevideos']}

Ведь если я удалю все и оставлю только

protected function getcates($nom){
// Construct URL
$part = "snippet";
$this->url = "https://www.googleapis.com/youtube/v3/search?videoEmbeddable=true&key={$this->key}&part=$part&order=data&maxResults=5&q={$this->config[$nom.'catevideos']}&type=video";
// Get Data
$data = $this->http(TRUE);
foreach ($data->items as $yt) {
$html .= $this->listQueryVideo($yt);
}
return $html;
}

вряд ли все заработает, видимо что-то нужно изменить.

Т.е. как скрипт узнает что вставить в $nom.' и то, что это значение может быть разным, запутался :(

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

Прочел еще раз, видимо нужно изменить все getonecate, gettwocate на getcates('one'), getcates('two') и т.д., попробую. )

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