Помощ с малък PHP код

2fast4you

Well-Known Member
Здравейте,
абе мъча се и му се чудя какво му е на кода.
Случаят е следният

PHP:
if ($config['option_1']) {
   if ((utf8_strlen($this->request->post['firstname']) < 1) || (utf8_strlen($this->request->post['firstname']) > 32)) {
    $json['error']['firstname'] = $this->language->get('error_firstname');
   } else { }}

$config['option_1'] тук дърпа стойност 0 или 1 от отделен конфиг файл.
Искам при стойност 1 долният код да се показва а при стойност 0 долният код да не се показва.
Стойностите се променят от админ менюто и това си го засича автоматично.

Пробвах с if (($config['option_1']) == 1).. но кода постоянно стои изключен и не мога да разбера какво му е.
 
Последно редактирано:
От: Помощ с малък PHP код

Така написано би трябвало да работи, понеже ако $config['option_1'] връща стойности 1 или 0. Иначе казано true или false. Съответно, ако $config['option_1'] е равно на 1 ще ти изпълни кода в if-а, ако е 0, няма да го изпълни, но предполагам това ти е ясно и на теб :)

Според мен по-скоро нещо ти се дъни проверката в другият if по-долу.

Можеш да пробваш следното... виж какви стойности ти връща първо $config['option_1'], след което виж дали в другият if $this->request->post[''] ти е по малко от 1 или по-голямо от 32.

Аз обикновено като се чудя къде ми се чупи кода си пускам едни контролни echo-та. Примерно сложи един в първият if и един в вторият. Ако ти се покаже първото ехо, а второто не, ще ти е ясно кое не ти е ок. :)
 
От: Помощ с малък PHP код

Така написано би трябвало да работи, понеже ако $config['option_1'] връща стойности 1 или 0. Иначе казано true или false. Съответно, ако $config['option_1'] е равно на 1 ще ти изпълни кода в if-а, ако е 0, няма да го изпълни, но предполагам това ти е ясно и на теб :)

Според мен по-скоро нещо ти се дъни проверката в другият if по-долу.

Можеш да пробваш следното... виж какви стойности ти връща първо $config['option_1'], след което виж дали в другият if $this->request->post[''] ти е по малко от 1 или по-голямо от 32.

Аз обикновено като се чудя къде ми се чупи кода си пускам едни контролни echo-та. Примерно сложи един в първият if и един в вторият. Ако ти се покаже първото ехо, а второто не, ще ти е ясно кое не ти е ок. :)

Предполагам, че не използваш IDE с debugger за това виж какво връща (сега е момента да си инсталираш един еклипс :D )
PHP:
print_r($config);
print_r($this->request->post['firstname']);
 
От: Помощ с малък PHP код

Лошото е, че това е php файл с функции а отделно tpl файл който е свързан към него е за визуализация.
Т.е. не мога да визуализирам какво номерче показва. Пробвах в tpl файла където пак съм вкарал тези функции там пък за да се махне полето:
PHP:
if ($config['option_1']) { 
echo '<div class=left><input type="text" name="firstname" /></div>'; } else {  }
Тук работи чудесно. А файла със самите функции 0 и 1 е инклууднат в проблемния php файл и tpl файла си смуче от него.

В php файла вторият if си е да провери дали firstname има по малко от 1 или повече от 32 знака за да удари грешката отдолу.

Е по този начин съм инклууднал конфиг файла с променливите 0 и 1
PHP:
$config = file_get_contents('system/config/boss.php');

И по този също за да може да смуче и tpl файла

PHP:
$this->data['config'] = include DIR_CONFIG . 'boss.php';
 
Последно редактирано:
От: Помощ с малък PHP код

Бе то и аз го гледам от сутринта и няма как а го пробвам но:

PHP:
if ($config['option_1'])
 {
   if ((utf8_strlen($this->request->post['firstname']) < 1) || (utf8_strlen($this->request->post['firstname']) > 32)) 
   {
    $json['error']['firstname'] = $this->language->get('error_firstname');
   }
 } //Тук мисля че трябва да се затваря първия if
 else {// Тука $config не е  option_1}

Пробвай така.
 
От: От: Помощ с малък PHP код

PHP:
$config = file_get_contents('system/config/boss.php');
Ето тук правиш мазало. Присвояваш на масив някакви бози от файл, които най-вероятно не са сериализирани.

Постни някакви применри данни от system/config/boss.php.
 
От: Помощ с малък PHP код

Да пробвал съм го и така. В тоя случай засича, че е включен дори и когато стойността 0.

Eто примерни функции от конфиг файла boss.php

PHP:
<?php
return array (
  'option_1' => '0',
  'option_2' => '1',
);
 
От: Помощ с малък PHP код

$config не ти е масив, че да го ползвша като такъв, а прост низ, в който си заредил съдържанието(като текст) от файла system/config/boss.php
 
От: Помощ с малък PHP код

Да пробвал съм го и така. В тоя случай засича, че е включен дори и когато стойността 0.
Тоест може би като цяло засича си номерчето но нещо не може да се справи с else.

Eто примерни функции от конфиг файла boss.php

PHP:
<?php
return array (
  'option_1' => '0',
  'option_2' => '1',
);
Както си и знаех :D
Много ясно, че няма да работи така. Все едно си написал
PHP:
$config = "<?php return array (  'option_1' => '0',   'option_2' => '1', );";

Тоя конфиг кой го прави?

Това би трябвало да свърши работа
PHP:
<?php
$tmp = file_get_contents('system/config/boss.php');  
$tmp =  str_replace ( '<?php;', '',  $tmp);
$tmp = create_function('', $tmp);
$config = $tmp();
 
От: Помощ с малък PHP код

В този случай правилняит синтаксис е $var = include '...boss.php';
 
От: Помощ с малък PHP код

Един програмист тук от форума.
По принцип не са предназначени за php файловете а само за tpl където работят чудесно.

Как може да стане тогава след като установихме проблема? :rolleyes:

В този случай правилняит синтаксис е $var = include '...boss.php';

И така не става
 
От: Помощ с малък PHP код

В този случай правилняит синтаксис е $var = include '...boss.php';
Няма как да тръгне това без eval

Един програмист тук от форума.
По принцип не са предназначени за php файловете а само за tpl където работят чудесно.

Как може да стане тогава след като установихме проблема? :rolleyes:



И така не става
Дал съм ти решението в предния пост
 
От: Помощ с малък PHP код

С твоят код сега дава следната грешка

765fc8a0990ee905.JPG


Това е линия 103
PHP:
$tmp = create_function('', $tmp);
и линия 104
PHP:
$config = $tmp();
 
От: Помощ с малък PHP код

@Torbalan Trolski щом казваш, че няма как да сработи може да го кажеш и на разработчиците на езика, защото те са на друго мнение.

@2fast4you сигурен ли си, че boss.php е коректен файл? Няма празни интервали или други знаци преди <?php или пък да има проблем с BOM.

:: редакция ::
Много бързо пействша бе младеж :D.
Т'ва mvc където си го дал няма начин да използва толкова грешен шаблон като $var = include...

Дай ред 102 ;), а не 103
 
От: Помощ с малък PHP код

@Torbalan Trolski щом казваш, че няма как да сработи може да го кажеш и на разработчиците на езика, защото те са на друго мнение.
Да бе прав си, пълна глупост съм написал в бързината, че дебъгвам една простия и като ми писне хвърлям по едно око на форума :D

С твоят код сега дава следната грешка
Начинът на AMitrev е правилния, моята боза я заеби, верно не мисля пълноценно в момента. Не че няма да разботи, ама защо да е просто, като може да е сложно. 99.(9)% е крив конфига.
 
От: Помощ с малък PHP код

Евала!! с $var = include стана.
Имаше празни интервали. Прегледах и зачистих всичко.
Хиляди благодарности всички имате репчета от мен и по някой безплатен графичен материал ако ви нужен.. :beer:
 
От: Помощ с малък PHP код

Евала!! с $var = include стана.
Имаше празни интервали. Прегледах и зачистих всичко.
Хиляди благодарности всички имате репчета от мен и по някой безплатен графичен материал ако ви нужен.. :beer:
Ще го запомня ;)
 
От: Помощ с малък PHP код

Е разбира се. Важното е да си помагаме който с каквото може :wink:
 
От: Помощ с малък PHP код

@Torbalan-е, прав си... не, че не ползвам IDE с дебъгер. Гледах го Eclipse преди време, ама нещо не ме зарадва много и в общи линии редувам Sublime text и NetBeans. Иначе да прав си... много е глупав метода който описах по-горе :D

@2fast4you, мерси за ряпата, въпреки, че докато се появя са ти помогнали и реално не помогнах кой знае колко :( ,но пък важното е, че крайният ефект е на лице. Браво на колегите за помощта :)
 
От: Помощ с малък PHP код

Това с присвояването на стойност чрез използване на стойността върната при извикването на include() ми напомня на начин, който съм използвал при разработката на един модул който правехме с теб за опенкарт. Тук така и не разбрах къде точно си объркал нещата, съдейки от последния ред код който си дал от пост #4 и този #7 освен ако не си написъл този от #4 в темплейтен файл, което би било наистина тотално лишено от смисъл. :) Ако това, което правиш е модул за опенкарт то тогава можеш да взимаш конфиг. информацията по една идея по-добър начин. Правиш си публичен метод с име install() в котнролера на модула в админ частта, в който при извикването му можеш да вкараш тази информация сериализирана в база данни посредством начините предоставени ти от мвц-то на опенкарт. Извикването на този метод става автомачично при инсталирането на дадения екстенжън/модул като "системата" проверява дали съществува, ако да се извиква. И така вече в дадения контролер взимаш конфиг инфо по стандартния начин, което можеш да използваш в съответен темплейтен файл:

PHP:
$this->data['config'] = $this->config->get('config_your_name_module');
 

Горе