За последние 24 часа нас посетил 14901 программист и 1722 робота. Сейчас ищут 632 программиста ...

Построение графика на РНР

Тема в разделе "PHP для новичков", создана пользователем dm_rut, 10 дек 2016.

  1. dm_rut

    dm_rut Активный пользователь

    С нами с:
    10 дек 2016
    Сообщения:
    71
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Ссылка - см. пост 63.
    Код из файла РНР выложил в посте 70.

    Строка 18 на странице под номером 199.
    Изменения какие-то произошли. Ставлю галочку в первое место "считать Р" - выводится кривая, убираю - кривая всё равно выводится. Ставлю галочку рядом с другими "считать Р" - пропадает, но другие не выводятся. (вторая пока вообще не имеет алгоритма, а третья имеет и могла бы появиться).

    Самое плохое - при каждом обновлении страницы выскакивает сообщение о подключении библиотеки. Его надо убрать. Как?
    Но лучше подскажите что надо добавить в строку 18, чтобы чекбоксы прописать. А jQuery нам не надо. Всё равно всё руками писать нужно.
     
    #76 dm_rut, 19 дек 2016
    Последнее редактирование: 19 дек 2016
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.582
    Симпатии:
    1.760
    А, в общем, у вас много одинаковых чекбоксов (с одинаковым name), поэтому они затираются. Про подключение библиотеки не понял.

    Ну можно назначить им id, и руками проверять через getElementById, и добавлять, что надо, в строку, хотя я просто без jQuery не рисую javaScript-ы
    --- Добавлено ---
    Вы не отлаживаете программу, а методом тыка играетесь. Я бы, если б у меня что-то не так работало, полез разбираться, почему, а не сразу бы удалил код
     
    dm_rut нравится это.
  3. dm_rut

    dm_rut Активный пользователь

    С нами с:
    10 дек 2016
    Сообщения:
    71
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Ничего я пока не убираю. Посмотрю ещё несколько раз на вылетающее каждый раз окно, если не перестанет - тогда удалю.

    Переименовал все name у чекбоксов. Теперь выглядит так:
    Код (Javascript):
    1.        <input type="checkbox" name="p1" value="p1">считать Р<Br>
    2.        <input type="checkbox" name="e1" value="e1">считать Е
    Все name теперь с номерами и все разные. Так будет работать?

    Проверил. Конечно зависимость выводов кривых от наличия галочек изменилась. Теперь кривая Р1 выводится всегда, галочки при этом можно ставить куда угодно.

    А-а-а. Заработало.
    Теперь надо как-то убрать появляющееся окно. Или прописать чекбоксы в 18 строку, а эту библиотеку снести.
     
    #78 dm_rut, 19 дек 2016
    Последнее редактирование: 19 дек 2016
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.582
    Симпатии:
    1.760
    Какое окно? jQuery не выводит ни каких окон
     
  5. dm_rut

    dm_rut Активный пользователь

    С нами с:
    10 дек 2016
    Сообщения:
    71
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    jQuery убрал. Потому что постоянно появляющееся окно сообщающее про подключение jQuery нагнетает негатив на пользователя. Он же не разбирается и будет думать, что сайт либо калькулятор ему чего-то там сейчас наподключает. К тому же неизвестно какие последствия в будущем привнесёт jQuery в функционал сайта. Многие сайты (mail.ru например или авито), ранее работающие нормально, теперь потеряли часть функционала. Например надпись, при нажатии на которую ещё месяц назад вызывался нужный функционал осталась, сейчас при нажатии ничего не происходит. Внешний вид вообще не изменился, т.е. дизайн сайта не менялся. А вот хитрые библиотеки стали другими. И если у пользователя в компьютер те же самые библиотеки не подгрузились по любой причине, то и функции работать не будут. И не работают. Собственно на это и рассчитано. На то чтобы пользователь грузил себе библиотеки, обновлял программы и системы, покупал новое железо. Т.е. не расслаблялся пользуясь рабочим компьютером, а постоянно работал на поддержанием его как в плане софта, так и в плане железа.

    Если бы всё заработало как нужно, то можно было бы смириться, но всё равно надо править руками. Поэтому небольшое добавление в 18 строчку или ещё куда-то никак не осложнит жизнь. Достаточно наладить один раз и навсегда. В случае задействования jQuery - наверняка придётся переделывать.
     
  6. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.582
    Симпатии:
    1.760
    Какие-то чудеса пишите. За 4 года, что я в веб-программировании, jQuery ни разу не выводило мне окно о том, что я её подключил. И на сайтах, где она используется (а их процентов 80, я думаю, по скромным оценкам), я такого не видел. На этом форуме, кстати, она тоже используется, и никаких лишних окошек не выводит. Можно указать конкретную версию, и тогда она не поменяется. Ну в принципе, сейчас действительно родной API JavaScript расширился, и можно обойтись и без jQuery, хотя с ней всё как-то компактнее.
     
  7. dm_rut

    dm_rut Активный пользователь

    С нами с:
    10 дек 2016
    Сообщения:
    71
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Вот тут написано как поставить. Так и сделал. Работает конечно, но такое окно предупреждения нам не нужно.

    Можно ли как-то обойтись? Что нужно прописать в строчку 18? Лучше сделать другую, специально для чекбоксов.
    Сами чекбоксы я правильно переименовал (пост 78)? Вокруг строчки imageSetPixel как сделал, так будет работать (пост 70)?
     
  8. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.582
    Симпатии:
    1.760
    :D:D:DНу так вы не разбираете, что копируете :)
    Там для примера зачем-то сделаны строки, которые выводят ваше окошко. Они не в самой библиотеке, они в ихнем примере. Вот эти строки
    Код (Javascript):
    1. <script>
    2.  $(function()
    3.  {
    4.  alert('Подключена последняя версия jQuery через Google хостинг');
    5.  });
    6.  </script>
    Вот эти строки выдают ваше окно, а совсем не сама jQuery. Если их убрать, библиотека будет, а окна не будет. Опять же, потому что вы теорию не читаете :) И вообще, я вам официальный сайт jQuery дал (http://jquery.com/), где полная документация, а вы на какой-то левый полезли искать, как подключить. На счёт того, можно ли обойтись - конечно можно, jQuery написана на чистом JavaScript, значит, всё, что она умеет, можно написать и самому, в теории. Но просто не так удобно. Например, сериализации формы в одну строчку в чистом JavaScript нет (насколько я знаю), там для этого надо свой велик рисовать
     
    dm_rut нравится это.
  9. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.582
    Симпатии:
    1.760
    Там автор статьи предполагал, что человек уже читал что-нибудь про JavaScript, и знает, для чего нужна команда alert()
     
    denis01 нравится это.
  10. dm_rut

    dm_rut Активный пользователь

    С нами с:
    10 дек 2016
    Сообщения:
    71
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Извиняюсь за панику.
    Вчера после продолжительного "изучения теории РНР" мозги закипели. Уже без разбора пихал в код всё что удавалось найти. На функцию вывода картинки не обратил внимания. jQuery вернул, картинку убрал - всё работает. Наконец-то!
    Сейчас схемы доделаю и можно пользователям показать. Будет расположен тут. Если у кого есть какие-то замечания - сообщите. Хочется сделать чтобы было правильно и удобно. Поскольку аналогов найти не удалось, то непонятно как такое вообще должно выглядеть и работать.

    mkramer, Спасибо за подсказки.
    Вы опять правы: авторы большинства статей предполагают, что их читатели уже во всём разбираются, теорию изучили и закончили с отличием соответствующее учебное заведение. Те, кто этого всего не сделал, должны прежде чем читать пройти обучение. Но если читатель и так разбирается, то зачем ему это всё читать ещё раз. Где та граница, где образование уже есть, а понимания темы статьи ещё нет? Как определить?

    Жалко только что авторы пишущие по той тематике, по которой работаю я (не связана с программированием), часто пишут откровенную пургу и специально запутывают новичков.
     
    #85 dm_rut, 20 дек 2016
    Последнее редактирование: 20 дек 2016
  11. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.582
    Симпатии:
    1.760
    Ну просто в одну статью нельзя уместить всё, на javaScript можно писать без jQuery, а значит, прежде чем читать о jQuery, предполагается, что человек изучил просто javaScript. Поэтому кто спрашивает у меня, что ему прочитать, чтоб стать веб-программистом, я даю ссылки на htmlbook.ru по html и css, learn.javascript.ru по JavaScript, php.net (которую вам уже давал ссылку, лень искать) - по php. Это, как бы, минимальный необходимый набор знаний. А потом уже идёшь и читаешь про jQuery и вообще что угодно. Тема статьи, ссылку на которую вы привели - jQuery, и автор поэтому там не объясняет основы JavaScript, я бы тоже не стал.
    --- Добавлено ---
    Вашу задачу, кстати, в теории можно было вообще без php решить, одним JavaScript, он уже несколько лет, как сам умеет графики рисовать красиво
     
  12. dm_rut

    dm_rut Активный пользователь

    С нами с:
    10 дек 2016
    Сообщения:
    71
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Да, это я знаю. Единственный момент - это то, что JavaScript стырят со страницы, а РНР с сервера - нет.
    А для меня что одно, что другое - одинаково тёмный лес.
    Ключевым моментом тут является то, что спрашивающий хочет стать программистом. Если же исключить такое желание, тогда что делать? Тоже теорию изучать? Или каждый раз обращаться к профессионалам.

    Например. Если кто-то ездит на советской автоклассике и захочет самостоятельно отрегулировать клапана, то по Вашей концепции надо пойти изучать теорию двигателестроения. А ему надо всего лишь отрегулировать клапана. Он, ничего не изучая, подойдёт к знакомому автослесарю и попросит научить один раз и без всяких теорий. Научится и будет всю жизнь это делать сам.
    Возможно пример не совсем подходящий, но если в такую ситуацию добавить неограниченную возможность изменения кол-ва или размеров цилиндров в авто и неограниченную возможность в кол-ве авто одновременно находящихся в пользовании, но в каждом случае изменения необходима регулировка, то однажды приобретённый всего за несколько уроков навык убирает все границы. А как в такой ситуации поступите Вы? Изучите всю теорию, потратив на это несколько лет жизни или каждый раз будете обращаться к услугам профессионалов. Это риторические вопросы, на них можно не отвечать. В том смысле, что каждый для себя находит ответ наиболее подходящий в данный момент. Тем более, что всегда можно отказаться от авто и пойти пешком, как и поступает большинство.
     
  13. dm_rut

    dm_rut Активный пользователь

    С нами с:
    10 дек 2016
    Сообщения:
    71
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Всё работало. Но периодически зависало выдавая ошибку 500, типа сбой сервера. Первый раз примерно в 20 часов, через день, после выкладывания ссылки на профильном форуме в 3 часа, а последний раз вырубилось когда ещё 2-х часов не было. Примерно в полночь всё восстанавливалось. Видимо это связано с нагрузкой, возможно сервер выдерживал какое-то кол-во обращений, потом орубал рнр, html работал как обычно. Обратился в тех поддержку хостинга, получил ответ: "У вас немного странный сайт вплане настроек php. Не работает у вас php, потому что он лезет в непонятные дебри и пытается выполнить php скрипты из не понятного ему места. Может быть вы меняли когда интерпретатор, или что то меняли в php.ini. Я так и не смог понять. Поэтому я пересобрал ваш сайт на другом сервере с другим php.ini. Сейчас php отрабатывает нормально." Ещё специалист хостинга написал: "У вас на странице с калькулятором 130 ошибок, естественно страница будет грузится долго." Как такое может быть - непонятно, потому что стоит пропустить одну запятую, как дримвивер сразу красным помечает, а тут 130 ошибок на 300 строк и ни одного замечания. И даже работало.
    Никакие настройки я вообще никогда не делал. Сейчас страница грузится, но чекбоксы видимо не функционируют. Подозреваю что специалист намекал на обращения к jQuery и отрубил такую возможность.
    На странице чекбоксы прописаны как в посте 78, а в коде так:
    PHP:
    1.     if ($p1 == 'p1') {
    2.         imageSetPixel($img, 20 + $x, 600 - $Yp * $P1 * $SYp, $black);
    3.    }
    4.     if ($e1 == 'e1') {
    5.         imageSetPixel($img, 20 + $x, 300 - $E1 * $SYe, $black);
    6.    }
    Кривые не рисуются, если вместо печати точек поставить вывод значения например $P1, то тоже ничего не выводится. Если точно такую же строчку вывода разместить в начале кода в этом сообщении, то значение переменной выводится как и должно быть.
    Вот такая история. Что теперь делать? Видимо надо чекбоксы по другому прописать.
     
  14. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.582
    Симпатии:
    1.760
    Насколько мне помнится, у вас там были ошибки в javaScript, которые выдаются в браузере, а не на сервере. Я вам про них не написал, поскольку думал, что вы и так знаете, и отвечал только на поставленные вопросы. Если бы были синтаксические ошибки php, интерпретатор вас бы послал сразу, а вот браузер не посылает, и старается по-любому отработать. jQuery - безобидная библиотека, работающая на минимум 80-90% сайтов, так что на неё гнать не надо. Не работает что-то из того, что писали вы. А ошибки могут быть, поскольку вы всё подряд отовсюду копируете, даже не разбираясь, что зачем написано. Весь ваш сайт мы не видели, а здесь вы предпочитали брать самые странные варианты. При 500-х ошибках что-то пишется обычно в лог ошибок, расположение которого зависит от настроек хостинга, так что надо выяснить, что конкретно происходит.
     
  15. dm_rut

    dm_rut Активный пользователь

    С нами с:
    10 дек 2016
    Сообщения:
    71
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Ссылка на страницу в посте 85, другие страницы сайта отношения к рнр не имеют. Есть ещё выполняющий расчёты script, его различными частями тоже выкладывал в этой теме.
    Всё что можно отнести к чекбоксам постом выше, больше нигде ничего нет.
    На странице перед закрывающим тегом </head> разместил это:
    HTML:
    1.  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
    ниже заменил строку 18 (пост 72) на это:
    HTML:
    1. var get = "?" + $(f).serialize()
    точно так, как Вы советовали. И всё работало, правда не долго.
    Поддержка пишет: "на разных серверах, на разных сайтах все всегда работает по разному. Потому что разные версии интерпретаторов, собраны с разными версиями модулей и т.д. Нюансов очень много, поэтому всегда каждый конкретный скрипт может понадобится допилить на конкретном сервере." Поразительно насыщенный информацией ответ.
     
  16. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.582
    Симпатии:
    1.760
    Вот те ошибки, о которых говорила вам поддержка, они в JavaScript-ах, которые вы навставляли туда с какой-то целью. В Хроме для вызова этой панели надо нажать f12 и перейти на вкладку console. По поводу ошибок php - без лога ошибок ничего сказать не могу, в логе скорее всего будет написана причина возникновения ошибки, а не просто "ошибка 500". Где у вас лог ошибок - не знаю, у разных хостеров по-разному. На php-часть jQuery вообще никак влиять не может, как и любой javascript.
    upload_2016-12-23_16-7-11.png
     
  17. dm_rut

    dm_rut Активный пользователь

    С нами с:
    10 дек 2016
    Сообщения:
    71
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Не знаю это те ошибки или нет. Изображение прикрепил. Снимок экрана 3.png
    Дело в том, что если убрать всё относящееся к чекбоксам, то кривые рисуются как и раньше. Надо восстановить только возможность выбора отображаемой кривой.
     
  18. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.582
    Симпатии:
    1.760
    Ну это всё тоже надо бы исправить, но ищите, чтоб было написано Error или Fatal Error. Notice и Warning не должны к ошибке 500 приводить
     
  19. dm_rut

    dm_rut Активный пользователь

    С нами с:
    10 дек 2016
    Сообщения:
    71
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Нет там Error или Fatal Error.
    Как исправить такие строчки:
    PHP:
    1. if (isset($_GET["L11"])) $L11 = $_GET["L11"]; else $L11 = 0;
    чтобы избавится от деления на 0. Наверно их можно упростить. Значения по умолчанию прописаны на странице.
     
  20. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.557
    Симпатии:
    631
    Код (Text):
    1. $L11 = filter_input("L11", INPUT_GET);
    --- Добавлено ---
    @dm_rut чтобы избавиться от деления на 0, надо прерывать работу скрипта, если не все переменные заданы.
    --- Добавлено ---
    Ну или вместо 0 присваивать 1 для неопределнных переменных, если это корректно по формулам.
     
  21. dm_rut

    dm_rut Активный пользователь

    С нами с:
    10 дек 2016
    Сообщения:
    71
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Так не работает. Значения не передаются.
    В том-то и дело, что все переменные заданы по умолчанию. А потом ещё и пользователь вводит. И графики рисуются. Т.е. нулей там нет. А предупреждения о делении на 0 есть. Что за бред. Как это можно исправить.
     
  22. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.557
    Симпатии:
    631
    вот здесь переменной $L11 присваивается 0 же, если форма не была еще отправлена. Там ниже присваивается другое значение по умолчанию?
     
  23. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.582
    Симпатии:
    1.760
    Ну надо выяснить математически, значит, при каких исходных данных может появиться. А вообще, не глядя на конкретный код - это всё гадание. Код надо отлаживать, смотреть, что происходит на какой строке. Поверьте, если php говорит что есть деление на 0, значит оно там где-то есть. Плюс, посмотрите ещё, хостинги обычно предоставляют отчёт о нагрузке на процессор, объём памяти и т.п. Может, вы превышаете значения, допустимые на вашем тарифе, и ошибка 500 связанна с этим.
     
  24. dm_rut

    dm_rut Активный пользователь

    С нами с:
    10 дек 2016
    Сообщения:
    71
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    При отладке я выводил на печать все данные, чтобы проследить весь алгоритм. И печатались именно то, что по умолчанию или то, что ввёл пользователь. Нулей там нет. Да и кривых бы не получалось.
    Какие могут быть значения на тарифе? Максимальный объём более чем в 10 раз больше, чем занимаемый. А какой трафик может быть от страницы размером 12-14 КВ. Чтобы превысить её надо тысячу раз скачать.
     
  25. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.582
    Симпатии:
    1.760
    Нагрузка на процессор, занимаемая память. PHP пишет, что бывают нули. Формулы я не вижу, поэтому ничего не могу сказать