За последние 24 часа нас посетили 14847 программистов и 1725 роботов. Сейчас ищут 1096 программистов ...

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

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

  1. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.582
    Симпатии:
    1.760
    Ну так данные появляются в окнах, а я говорю про скрипт построения графика.
    PHP:
    1. if (isset($_GET["L11"])) $L11 = $_GET["L11"]; else $L11 = 8;
    Там же не обязательно 0 ставить, можно любое значение
    --- Добавлено ---
    И тогда вместо кучи ошибок деления на 0 будет строиться сразу график на дефолтных данных. Ну или не будет строиться (поскольку не будут установлены галочки), но что-нибудь нарисуется. Я до этого нули оставлял, поскольку думал, что это соответствует вашей логике.
    --- Добавлено ---
    Так у вас будет куча notice об undefined variable, и опять переполненный лог ошибок. Вы никак не поймёте причину бед - скрипт запускается без исходных данных, подставляет вместо них 0 и пытается сделать действия, и плюётся предупреждениями. Поэтому варианты - либо исключить запуск скрипта без исходных данных, и я писал как, либо сделать, чтоб скрипт работал без ошибок и в этом случае (как вариант, подставлять те данные, что в окошках). Вот не думал, что физику будет сложно понять такую простую вещь. php здесь не причём вообще, это ВЫ запускаете скрипт без исходных данных, сразу указав его в атрибуте src тега img, и ВЫ не предусмотрели корректного его поведения для такого случая.
     
    #126 mkramer, 25 дек 2016
    Последнее редактирование: 25 дек 2016
  2. dm_rut

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

    С нами с:
    10 дек 2016
    Сообщения:
    71
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    У моей логики, как и во всей электроакустике нет нулей. Там или бесконечность минус чуть-чуть или бесконечно малые величины. Например 10000 или 0.0001.
    Завтра надеюсь обнулят логи, получу доступ и заменю в этих строчках нули на 0.0001.
    <Скрипт> запускается с исходными данными, точнее после того, как они объявлены. По любой логике программа выполняется сверху вниз, если не заявлено другое. Как я мог догадаться, что это не так. Тем более что всё по этой логике и работало. Как физик, я вижу, что графики рисуются и никогда не поверю, что это возможно в случае если в процессе происходит деление на ноль. В расчёте нет деления на ноль по любому, а в косяках php я не разбираюсь. Но костыль вставлю. Если уж без него не обойтись.
     
  3. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.582
    Симпатии:
    1.760
    С какой целью? Ну вы просто не до конца понимаете, как работает web. Вы даёте html с вашей формой, а в нём есть этот злополучный <img src='script.php'>. Браузер начинает отображать ваш html, видит картинку, ему нужно считать картинку. И он запускает скрипт без параметров и даются эти нули, поскольку вы такую логику написали. Вы могли написать логику, что если не передано параметров, отдать картинку с нарисованными осями. Могли не писать в <img> свойства src. Могли написать src на статическую картинку (хороший, кстати, вариант, например, на такую: http://prntscr.com/dntctu. А вы всё ещё ситуации не понимаете. Уж не знаю, как ещё объяснить. http://phpfaq.ru/na_tanke
     
  4. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.582
    Симпатии:
    1.760
    никак не поймёте, что это ваш косяк, а не php. Вы запустили скрипт указанием его в свойстве src без исходных данных. А всё потому, что вы теорию знать не хотите.
     
  5. dm_rut

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

    С нами с:
    10 дек 2016
    Сообщения:
    71
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Цель простая: для расчёта не имеет значения какая там будет цифра, если даже наличие нуля он не заметил.
    Интересная логика у php. Вот Вы пишите: "Браузер начинает отображать ваш html, ...". Не будем перескакивать. Сначала браузер видит таблицу с дефолтными данными. И ведь видит их, иначе откуда они попадают в расчёт. А потом доходит дело до скриптов (они находятся ниже), рисования всяких осей и расчётов. Но Вы утверждаете, что сначала рисуется картинка, происходит расчёт с нулями прописанными в этих строчках, а только потом браузер видит данные. Получается браузер сначала делает расчёт с нулями, а потом отображает страницу на экране пользователя. Интересно а браузер делает расчёт до того, как пользователь нажимает на ссылку на страницу или после?

    Очень "понятная" логика получается. Конечно, всё элементарно. Это я совсем "ситуации не понимаю", "теории не знаю" и "ничего не хочу читать". Без строчек нельзя, строчки без цифр нельзя, нули тоже нельзя, а 0.0001 - "С какой целью? С простой: потому что как же ещё? Какие у меня ещё варианты?

    Мёртвые картинки не подходят, уже пробовал. Как я потом буду к ним координаты привязывать.
     
    #130 dm_rut, 26 дек 2016
    Последнее редактирование: 26 дек 2016
  6. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.582
    Симпатии:
    1.760
    Ну неужели непонятно? Отображается страница http://www.aie.sp.ru/Calculator_filter2.php - ваша форма. Вся эта страница! В ней есть такой фрагмент кода (он есть сразу, до того как пользователь что-то нажмёт или вообще что-то сделает, а раз есть, браузер обязан его обработать и отобразить):
    HTML:
    1. <td width=720>
    2.      
    3.         <!-- выведим наш рисунок в браузер, указав желаемые размеры!-->
    4.         <img id="myimg" border="0" style="width:718px; height:620px;" src="script.php" alt="" />
    5.      
    6.         <script type="text/javascript">
    7.          
    8.             // Функция вызываемая при отправке формы, что бы форма не отправлялась функция должна вернуть false
    9.             function sub (f) {
    10.              
    11.                 // получим значения полей ввода из формы
    12.                 var U = f.U.value;
    13.              
    14.                 var L11 = f.L11.value;
    15.                 var Rl11 = f.Rl11.value;
    16.                 var C11 = f.C11.value;
    17.                 var Rd1 = f.Rd1.value;
    18.              
    19.                 var R31 = f.R31.value;
    20.                 var C31 = f.C31.value;
    21.                 var L31 = f.L31.value;
    22.                 var Rl31 = f.Rl31.value;
    23.                 var L32 = f.L32.value;
    24.                 var Rl32 = f.Rl32.value;
    25.                 var C32 = f.C32.value;
    26.                 var Rd3 = f.Rd3.value;
    27.              
    28.                 var R21 = f.R21.value;
    29.                 var C21 = f.C21.value;
    30.                 var L21 = f.L21.value;
    31.                 var Rl21 = f.Rl21.value;
    32.                 var Rd2 = f.Rd2.value;
    33.              
    34.                 // здесь нужно проверять x1-2 и y1-2 на правильность, т.е. что бы были цифрами и не были пустыми
    35.                 if ( U == "" || L11 == "" || Rl11 == "" || C11 == "" || Rd1 == "" || R31 == "" || C31 == "" || L31 == "" || Rl31 == "" || L32 == "" || Rl32 == "" || C32 == "" || Rd3 == "" || R21 == "" || C21 == "" || L21 == "" || Rl21 == ""|| Rd2 == "" ) {
    36.                     alert ("Заполните все поля ввода !");
    37.                     return false;
    38.                 }
    39.              
    40.                 //формируем GET запросvar get = "?" + $(f).serialize()
    41.                 var get = "?" + $(f).serialize()
    42.              
    43.                 // меняем src нашего рисунка тем самым делая новый запрос к скрипту iso.php
    44.                 document.getElementById("myimg").src = "script.php"+get;
    45.              
    46.                 // что бы форма не отправлялась и не перезагружала страницу возвращаем false
    47.                 return false;
    48.             }
    49.          
    50.         </script>
    51.  
    52. </td>
    И дальше происходит следующее. И это не логика php (php отработал уже для этой страницы, раз она появилась в браузере, он к браузеру никакого отношения не имеет, работает на сервере), это логика браузера. Смотрите, нормальная ссылка на script.php со всеми данными формируется только в момент нажатия кнопки. Но, ещё раз, до нажатия кнопки браузеру надо как-то отобразить вашу страницу. Он разбирает html - видит форму, отображает. Всё прекрасно, красивая форма. Дальше он видит тег img, ему надо отобразить картинку! Как он это делает? Он посылает на сервер запрос в соответствии с тем, что написано в атрибуте src. А у вас до того, как кнопка нажата, что написано в src? Правильно, script.php, без единого параметра. И сервер получает данный запрос, а там php-файл, для него запускается php-машина. И получается что первый раз, ещё до того, как пользователь нажал на кнопку, ваш script.php отрабатывает без исходных данных, и плюётся ворнингами про деление на ноль - такая у него логика, когда без исходных данных. Уже потом, после того как пользователь нажал на кнопку, src у картинки меняется через javascript с подставленными исходными данными, видя это сервер теперь уже снова посылает запрос на сервер, и скрипт снова отрабатывает, и имея исходные данные уже нули никуда не подставляет (в вашем варианте 0 подставляются только когда данных нету) и корректно рисует ваш любимый график. Поэтому, в принципе, достаточно просто убрать src у img изначально, чтоб он подставлялся только по нажатию кнопки, и всё сразу заработает корректно. Или подставить url статической картинки - просто осей, к примеру, которая потом, при смене атрибута src будет полностью заменена графиком. Вы, по ходу, не сильно понимаете даже логику работы того, что написали.

    И не смешиваете функции браузера и php. Браузер только посылает запросы на сервер и принимает их, формирует картинку на основе html, скачивает файлы, а также выполняет javascript-код (но не PHP-код! Он о нём понятия не имеет. Ему по сути всё равно, что у вас на сервере - PHP, Ruby, Python, Perl, C#, NodeJS, вариантов бесконечно много, поскольку теоретически можно любой язык туда прикрутить, я перечислил наиболее распространённые и уже прикрученные). Поэтому в вашем случае браузер вообще не делает никаких рассчётов, ни с нулями, ни с чем-то ещё. Он бы их делал, если бы вы их написали на JavaScript. А так, он видит src у картинки, посылает запрос на сервер, в этом запросе именно то, что написано в src. А в src написана команда серверу запустить script.php без исходных данных. Кстати, ещё, как вариант, вы можете подставить в src какие-нибудь исходные данные, и тогда что-то умное выведется сразу (http://www.aie.sp.ru/script.php?U=8...3=7&R21=0.4&C21=3.85&L21=0.38&Rl21=0.25&Rd2=7). А потом у вас при каждом нажатии на кнопку "считать" src подменяется и грузится новая картинка, а старая уничтожается.

    И кстати, зачем там вверху вот эта чушь ещё, которая ошибками в консоль пуляется?
    upload_2016-12-26_6-8-4.png
     
    #131 mkramer, 26 дек 2016
    Последнее редактирование: 26 дек 2016
  7. dm_rut

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

    С нами с:
    10 дек 2016
    Сообщения:
    71
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Та чушь вверху висит в интерненте уже 10 лет (без 3-х месяцев), одинаковая на паре десятков страниц и ещё ни разу не вызывала никаких вопросов. Это делал не я и зачем это нужно - понятия не имею. Тут по принципу: работает - не трогай. Зато эта чушь набирает в кибераналитике 1470 баллов. Когда мне предлагают "оптимизировать" сайт, а мне скучно и хочется развлечься, то я всегда прошу продемонстрировать примеры работ этих оптимизаторов и объяснить смысл "оптимизации" с понижением баллов, часто в два раза. Много интересного узнал.

    Ещё недавно вместо строки 41 было это:
    PHP:
    1.     //формируем GET запрос
    2.                 var get = "?L11="+L11+"&C11="+C11+"&L12="+L12+"&C12="+C12;
    Это случайно не тот код, который объясняет какие данные надо подставлять вместо нулей?
    Если это не он, то наверно надо его придумать и написать?

    Рисовать отдельно картинку и отдельно картинку с графиками, чтобы сначала показывать одну, а потом другую - это очень по php-шному, т.е. одного раза всегда не достаточно. Это для того, чтобы жизнь мёдом не казалась, и если захочется что-то поменять, то менять придётся в двух местах. Понятно, что это придумано для создания рабочих мест программистов. Но у меня такой цели нет.

    Может быть всё-таки лучше одну строку с объяснениями для сервера по поводу первичных данных?

    В общем заменил нули на 0.0001 и ошибки прекратились. Несколько раз заходил и перезагружал - новых нет. Подожду до вечера, сравню вечерние логи с утренними.
     
  8. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.582
    Симпатии:
    1.760
    Нет, не те строки. Они тоже срабатывали уже после нажатия кнопки, и serialize() делает тоже самое, только автоматически. Я вам 25 раз конкретную строку указываю. В посте №131 в листинге строка 4 провоцирует вызов скрипта без исходных данных
    --- Добавлено ---
    Ну да, теперь вхолостую рассчитывается правда график для этих данных (0.0001), но поскольку галочки не отмечены, рисуются только сетки. Пусть будет так хотя бы, с вами каши не сваришь :)
     
  9. dm_rut

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

    С нами с:
    10 дек 2016
    Сообщения:
    71
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Очень даже сваришь. Потому что я всегда использую советы лучших, местами даже гениальных советчиков и в конце получаю работающий результат, который не имеет аналогов. Как в случае этого конкретного калькулятора, так и в других областях.
    С теми, с которыми "можно кашу сварить", кроме разговоров ничего обычно не получается. Люди они конечно хорошие, даже иногда замечательные, но с результатом часто проблемы. Особенно это заметно при непосредственном сравнении. А сравниваем мы постоянно, почти каждый день.

    mkramer Спасибо Вам Большое.
    Если потребуется помощь по нашему профилю - обращайтесь. Там внизу контакты есть.