LINUX.ORG.RU
решено ФорумTalks

Мой первый говнокод на php

 , ,


0

1

Всем привет, 9 лет подряд сталкивался регулярно с просмотром php-кода, работая на хостинге и отдельно с Wordpress, и понял неделю назад что достаточно насмотрелся. Оказывается я что-то даже умею. Сильно не ругайте, может что-то сделал не так, возможно у спецов-погромистов это вызовет тошноту или смехз, поэтому пишу в Talks.

Я пытаюсь сделать отправку формы, для этого создал функцию, а error.log мне говорит:

mod_fcgid: stderr: PHP Fatal error:  Cannot redeclare save_counter() (previously declared in /путь/wpb_wl_hooks.php on line 105
где у меня находится
function save_counter() {
который если переименовать – толку не даст.

Сам код – это вставка специального поля в показ товара WooCommerce в Wordpress.

Он выводит поле счетчика напечатанных страниц принтером, сдаваемым в аренду. Юзер может увеличить значение и сохранить его, уменьшить нет. Значение хранится в формате IDпостаWP:ЦифраСчетчика через запятую, а код ищет совпадение и подставляет значение в счетчик при показе товара, если нашелся среди данных из профиля юзера.

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

Вот сам код, который я писал: http://pastebin.ru/dtpFkPdE

и вот весь файл php если нужен: http://pastebin.ru/MgWp1fFJ


Вангую что у тебя этот файл вызывается два раза за один запуск php, при втором вызове получается повторное определение уже определённой функции и PHP орёт что он cannot redeclare save_counter()

Помести определение функции в более подходящее место. Ну или оберни его костылём который проверяет определена-ли вункция и выполняет её определение только если она не определена.

MrClon ★★★★★
()
Ответ на: комментарий от MrClon

да, вызывается столько раз сколько есть лайтбоксов с товарами

я бы поместил её в functions.php, но тогда переменные не будут работать, или будут?

emostar
() автор топика

А теперь забаньте его за технические вопросы в толксах, заходишь такой, чтобы потанцевать, или почитать очередной я-говно-тред, а работа достаёт тебя и тут.

r_asian ★☆☆
()
Ответ на: комментарий от emostar

Какие переменные? Не помню как там что в PHP с областями видимости, погугли и почитай сам. Ключевые слова: [php области видимости]

MrClon ★★★★★
()
Ответ на: комментарий от r_asian

а это разве не говнотред с тупым вопросом? :D

emostar
() автор топика
Ответ на: комментарий от MrClon

ну вот эти, в скобочках которые

update_user_meta($user_ID, 'resource', $_POST['poledited']);

id юзера допустим всё равно одно и то же, пока он залогинен, а значение поля инпута со страницы хз

emostar
() автор топика
Ответ на: комментарий от r_asian

Use require_one and include_once, Luke.

что реквирить? код же не в отдельном файле, да и вызывать его надо столько раз сколько товаров вылезет на странице, они спрятаны в лайтбоксы

emostar
() автор топика
Ответ на: комментарий от r_asian

да, теперь ошибки не лезут, спасибо, только форма ничё не сохраняет ибо я калека :D

есть варианты, мастер-джедай? юзер вводит циферки в $_POST['poledited'], он у меня в форме а не в инпуте который внутри формы. я не понимаю как его присобачить чтобы это работало при нажатии кнопки

emostar
() автор топика
Ответ на: комментарий от MrClon

так я специально в файл функций не ложу его, переменные же. или мне их глобально объявлять на всё село? :D

emostar
() автор топика
Ответ на: комментарий от r_asian

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

emostar
() автор топика
Ответ на: комментарий от emostar

Ну зачем ты продолжаешь меня нервировать? А тебе русским языкам написал: определение функции в специальном файле, вызов функции там где нужно. Зачем определять функцию там-же где она используется?

MrClon ★★★★★
()
Ответ на: комментарий от r_asian

Мнимальное отсутствие быдлокода это уже перфекционизм?

У корешка там походу что-то вроде

foreach ($arr as $val) {
 function print_hello_bar($bar) {
  echo 'hello $bar'
 }
 print_hello_bar($val)
}

А ты предлагаешь ещё и обернуть function в if, вместо того что-бы банально вынести его из цикла.

MrClon ★★★★★
()
Ответ на: комментарий от Valkeru

в файле functions.php темы Wordpress как раз все функции и прописываются, вписал туда, с файла убрал. Они по идее везде работают по всему сайту. Ошибок нет, но и форма не работает. Подозреваю что где-то что-то не так или с $POST или с кавычками...не понимаю как эта форма должна брать данные и куча что писать.

Она состоит из:

echo '<form method="post" id="pole" class="pole" name="pole" value="'.$_POST['pole'].'">';

внутри формы инпут по кускам, ибо в линию не выходило, а я криворукий:

$fullcounter.= '<input type="number" min="';
	$fullcounter.= $polecount;
	$fullcounter.= '" placeholder="';
	$fullcounter.= $polecount;
	$fullcounter.= '" />';
	echo $fullcounter;

ну и в конце кнопка, уже после окончания php-кода в котором элементы выше.

<button type="submit" class="sendresource" action="<?php do_action( 'bingo' );?>" >UPDATE</button>

Всё, тут форма закрывается.

emostar
() автор топика
Ответ на: комментарий от emostar

что реквирить? код же не в отдельном файле, да и вызывать его надо столько раз сколько товаров вылезет на странице, они спрятаны в лайтбоксы

Как вордпресс на мозги начинающих влияет, однако. Программирование надо изучить сперва. Мне это напомнило, как у меня ребёнок как-то попросил с компьютерной игрушкой помочь, квестом. Пришлось объяснять, что чтобы в такие игрушки играть, надо сперва читать научиться.

Wizard_ ★★★★★
()
Ответ на: комментарий от Wizard_

вордпресс – отличный конструктор, а Вам в политику нужно, столько написали слов, такое красноречие – но никто ничего не понял. кстати я уже 4 раза успел всё переписать с разделением кода. не работает. $_POST['pole'] я присваивал другой переменной, чтобы проще было с ней работать, даже глобальной обьявлял, не передается, это какое-то сильное колдовство. я проверяю эхом, но эхо не показывает.

Собственно еще есть одна загвоздка, я обьявлял переменную

$composed = preg_replace("/($poleid):($polecount)/", $poleid.":".$_POST['pole'], $resource_count, 1, $count);
которая формирует финальное содержимое для записи, и если делать echo то $_POST['pole'] туда не попадает, так как $composed формируется ещё до ввода в это поле. как заставить $composed срабатывать после заполнения поля?

emostar
() автор топика
Ответ на: комментарий от emostar

как заставить $composed срабатывать после заполнения поля?

Вы вынуждаете людей потакать вам в быдлокоде. Не хорошо.

if (isset($_POST['pole']) && $_POST['pole']) {
    //your code...
}
Вы должны взять, и хотя бы поверхности изучить MVC-парадигму, а также посмотреть любой фреймворк, благо в интернете информации тонны. Не нужно писать это быдлоуродство, иначе привыкнете.

znenyegvkby
()
Ответ на: комментарий от znenyegvkby

помог мужик, от души!

написал я всё, в двух частях, работает идеально, хотя хотелось бы запилить его в виде плагина, да с настройками, но я только начал писать, всё впереди :D

http://pastebin.ru/2krqISqw

emostar
() автор топика

Сделайте меня развидеть это. И еще вопрос: всё вордпрессоговно такое говно, или только твое? Не обижайся.

drull ★☆☆☆
()
Последнее исправление: drull (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.