• Аякс и валидация на сервере?

    Falseclock
    @Falseclock
    web-quest3: Возвращаете JSON строку и по ID полей определяйте где не правильно. Если объект вернулся пустой, значит с заполнение все ок.

    {
      "email": "некорректный формат",
      "password": "не указан пароль",
      "sex": "выберите пол",
      и т.д.
    }
    </code
  • Как проверить запрос UPDATE прошел удачно или нет?

    Falseclock
    @Falseclock
    khodos_dmitry: ааа.. ну все верно... вы используете какую-то стороннюю библиотеку, которая не возвращает данные о результате, но возможно записывает результат в какую-то переменную класса.
  • Аякс и валидация на сервере?

    Falseclock
    @Falseclock
    web-quest3: а чтобы отличать поля, рисуйте JSON строку и возвращайте ее пользователю. Туда же пишите суть ошибки и средствами JS подкрашивайте поле, делайте маркеры и т.д.
  • Аякс и валидация на сервере?

    Falseclock
    @Falseclock
    web-quest3: понимаете, если у вас 20 полей, то вам придется дублировать проверочный код и в JS и в PHP. Зачем такой костыль? Пусть проверяется в одном месте. Это раз.

    Во-вторых, вы обязаны проверять код на стороне PHP в любом случае! Хотя бы потому, что может быть ошибка в алгоритме JS. Но это не так страшно. Страшнее то, что сайты ломаются как раз таки из-за того, что проверка происходит только на стороне JS и игнорируется на стороне PHP. Кросс сайт скриптиинг и SQL инъекции как раз и происходят из-за вот таких вот ошибок. Проверка на стороне JS всего лишь для удобства пользователя, чтобы и форма лишний раз не сабмитилась и чтобы поля не приходилось по несколько раз заполнять.
  • Как проверить запрос UPDATE прошел удачно или нет?

    Falseclock
    @Falseclock
    khodos_dmitry: говорю же, код покажите. Зависит от того что вы вар дампите
  • Аякс и валидация на сервере?

    Falseclock
    @Falseclock
    web-quest3: ну и что что отключен... В эту же функцию скармливаете полученные переменные на стороне PHP и проверяете еще раз. Ваша проверочная функция по идее должна возвращать JSON строку для удобства. Например так
    JS click ->
      AJAX request
      PHP input checker -> PHP check(values) -> PHP input checker return JSON
      AJAX parse answer
    
    Form submit ->
      PHP form handler -> PHP check(values) -> PHP form handler returns result
  • Как проверить запрос UPDATE прошел удачно или нет?

    Falseclock
    @Falseclock
    khodos_dmitry: а вы просто сделаете echo mysqli_query("UPDATE bla bla bla")

    или код покажите
  • Биос Award не видит загрузучную флешку!?

    Falseclock
    @Falseclock
    Артём Андреев: без понятия ))) Тут вопрос не к Award, а к производителю мат платы. Award, Phoenix, Inside и др. - всего лишь платформа для разработка. Кто-то делает графические биосы, кто-то табличные, кто вперемешку и куда что могли засунуть - только производителю известно. Вам лишь остается побегать по всем менюшкам и поискать.
  • Биос Award не видит загрузучную флешку!?

    Falseclock
    @Falseclock
    Артём Андреев: значит в биосе надо поставить галочку, что можно загружаться и с USB носителей.
  • Биос Award не видит загрузучную флешку!?

    Falseclock
    @Falseclock
    Артём Андреев: а после записи стал NTFS небось. Проверьте.
  • Почему не отправляется изображение на почту по phpMailer?

    Falseclock
    @Falseclock
    hollanditkzn: а гитхаб не в счет? Там пароль все же можно светить?
  • Почему не отправляется изображение на почту по phpMailer?

    Falseclock
    @Falseclock
    И это вообще круто выставлять исходники, в которых пароль от почты )))
  • Почему не отправляется изображение на почту по phpMailer?

    Falseclock
    @Falseclock
    а уверены что после всех ваших манипуляций изображение вообще остается изображением?
  • Насколько в действительности возрастает нагрузка, если писать код, разбивая все на отдельные действия?

    Falseclock
    @Falseclock
    Doc: специально переделал свой SQL запрос, чтобы он мне выдавал готовую строку в JSON. Сделал бенчмаркинг на 10000 запросов в цикле. топ не поднимается выше 0.7. При этом если выдирать просто данные обычным запросом и средствами PHP переделывать один в массив в другой - 95 циклов за секунду. И это я не прикручивал сторонние библиотеки, которые мне якобы помогут.
    Если выдергивать средствами SQL готовую строку, то это 102 цикла в секунду. Разница маленькая, потому что объем данных мизерный - всего 4 строки и 12 колонок. Если выдергивать по 1000 строк и по 30 колонок в строке, то прирост уже более чем на 40%. В первую очередь потому что база работает быстрее чем препроцессоры PHP. Плюс ко всему не нужно выдергивать каждую строку, данные из оперативной памяти моментально высвобождаются и не надо загружать канал объемными данными из сокета.

    Вот сам запрос:

    SELECT 
    	JSON_OBJECT_AGG
    	(
    		year, 
    		JSON_BUILD_ARRAY(jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec)
    	)
     FROM (
    	SELECT 
    		year,
    		CASE WHEN jan IS NULL THEN 0 ELSE jan END,
    		CASE WHEN feb IS NULL THEN 0 ELSE feb END,
    		CASE WHEN mar IS NULL THEN 0 ELSE mar END,
    		CASE WHEN apr IS NULL THEN 0 ELSE apr END,
    		CASE WHEN may IS NULL THEN 0 ELSE may END,
    		CASE WHEN jun IS NULL THEN 0 ELSE jun END,
    		CASE WHEN jul IS NULL THEN 0 ELSE jul END,
    		CASE WHEN aug IS NULL THEN 0 ELSE aug END,
    		CASE WHEN sep IS NULL THEN 0 ELSE sep END,
    		CASE WHEN oct IS NULL THEN 0 ELSE oct END,
    		CASE WHEN nov IS NULL THEN 0 ELSE nov END,
    		CASE WHEN dec IS NULL THEN 0 ELSE dec END
    		
    	FROM CROSSTAB
    	(
    		'SELECT
    			EXTRACT(YEAR FROM order_date) AS year,
    			EXTRACT(MONTH FROM order_date) AS month,
    			COUNT(order_id) AS qty
    		FROM 
    			orders
    		WHERE
    			order_date > order_date - interval ''4 year'' AND
    			order_state = '?'
    		GROUP BY
    			year,
    			month
    		ORDER BY 
    			year DESC',
    		'SELECT m FROM generate_series(1,12) m'
    	) AS (
    	  year INT,
    	  jan INT,
    	  feb INT,
    	  mar INT,
    	  apr INT,
    	  may INT,
    	  jun INT,
    	  jul INT,
    	  aug INT,
    	  sep INT,
    	  oct INT,
    	  nov INT,
    	  dec INT
    	) ORDER BY year DESC
    	LIMIT 3
    ) data


    А вот результат в единственной строке, которую мы получаем.

    { "2017" : [214, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "2016" : [119, 181, 194, 200, 170, 211, 179, 199, 233, 225, 205, 154], "2015" : [124, 130, 152, 187, 159, 164, 129, 116, 115, 119, 129, 106] }


    Так что курят в сторонке ваши Doctrine или Spot. Пионер в данной области был Sybase BusinessObjects в начале 2000-х. И даже они не смогли сделать универсальный драйвер для запросов, потому что это не сколько трудно, а сколько затратно и не рентабельно жрать ресурсы сервера, когда нативным языком проще, быстрее и эффективней. Сдулись в конце 2000-х.
  • Насколько в действительности возрастает нагрузка, если писать код, разбивая все на отдельные действия?

    Falseclock
    @Falseclock
    Doc: вот типичная статья, с тестами и бенчмарками, доказывающая, что выводить самой базой в JSON быстрее чем бы то ни было... ни perl, php или JS рядом не стояли. https://hashrocket.com/blog/posts/faster-json-gene...

    Так что в топку Doctrine или Spot и т.д., Только хардкор! Ручками и головой!
  • Насколько в действительности возрастает нагрузка, если писать код, разбивая все на отдельные действия?

    Falseclock
    @Falseclock
    Doc:
    Начнем с того, что вы предоставили простейший запрос в первом комментарии.
    а зачем пугать людей странными и тяжелыми запросам, которые могут ввести в заблуждение людей... ведь вас же ввел
    Теперь вы показали запрос, который при 100 итераций повесит БД. Что уже не верно.
    этот запрос на самом деле просто переворачивает результат выборки из вертикальной таблицы в горизонтальную для формирования графика. Ничего сложного и необычного. Просто пользователи не знают всех возможностей БД и не использует заложенный инструментарий. Этот как с MS Word, когда люди выписывают номера страниц вручную, когда есть колонтитулы.

    Но и в ORM данная конструкция реализуется спокойно (в смысле без костылей). Но лучше сделать с expand интегрировав объекты под каждый тип, так быстрее будет обрабатываться.
    мне кажется вы ошибаетесь. Зачем забирать процессорное время, создавать временные массивы, перебирать их, нагружать память лишним препроцессорным кодом, когда это может сделать БД за более короткий срок и с меньшей тратой ресурсов? У меня все руки не доходят сразу выводить в JSON строке эти записи, чтобы не нагружать препроцессор логикой и лишним кодом, так как эта выборка нужна именно в строчном варианте.

    Такое ощущение, что вы показали какой то сложный запрос и пытаетесь этим гордиться.
    это один из самых обычных запросов в моей повседневной практике. Я пытаюсь заставить БД работать на все 100% что она умеет. Умеет работать с JSON и делать выборку в нем? Круто. Менять значение в отдельных полях XML записи? Круто! Нафига выгружать данные из базы, менять их и снова апдейтить, когда сделать можно инструментами самой базы?

    Я разрабатывал базы для крупнейшего мобильного оператора в КЗ и знаю что такое нагрузка и масштабируемость. 1 лишнее движение на стороне препроцессора выливается в тормоза всей системы. Поэтому всегда проводятся бенчмарки, тесты и выбор оптимального решения. в 99% случаев проще отдать оперировать данными базе, она лучше умеет это делать, чем кто либо.
  • Насколько в действительности возрастает нагрузка, если писать код, разбивая все на отдельные действия?

    Falseclock
    @Falseclock
    Doc: ха ха... рассмешили.... вы мыслите на уровне кодеров, которые штампуют веб сайты визитки...

    вы видимо не решали задачи промышленного масштаба, не сталкивались ни с рекурсиями, ни с динамическими триггерами, ни с сопоставлениями, ни с преобразователями, и даже с запросами, под типа такого, который я уверен не сможет сформировать ни доктрин, ни спот ни что бы то ни было другое. Все эти игрушки придуманы для детишек, которые не отличают LEFT от RIGHT джоинов. Например этого

    SELECT 
    				year,
    				CASE WHEN jan IS NULL THEN 0 ELSE jan END,
    				CASE WHEN feb IS NULL THEN 0 ELSE feb END,
    				CASE WHEN mar IS NULL THEN 0 ELSE mar END,
    				CASE WHEN apr IS NULL THEN 0 ELSE apr END,
    				CASE WHEN may IS NULL THEN 0 ELSE may END,
    				CASE WHEN jun IS NULL THEN 0 ELSE jun END,
    				CASE WHEN jul IS NULL THEN 0 ELSE jul END,
    				CASE WHEN aug IS NULL THEN 0 ELSE aug END,
    				CASE WHEN sep IS NULL THEN 0 ELSE sep END,
    				CASE WHEN oct IS NULL THEN 0 ELSE oct END,
    				CASE WHEN nov IS NULL THEN 0 ELSE nov END,
    				CASE WHEN dec IS NULL THEN 0 ELSE dec END
    				
    			FROM CROSSTAB
    			(
    				'SELECT
    					EXTRACT(YEAR FROM invoice_date) AS year,
    					EXTRACT(MONTH FROM invoice_date) AS month,
    					SUM(invoice_amount) / 1000 AS qty
    				FROM 
    					invoices
    				WHERE
    					invoice_date > invoice_date - interval ''4 year''
    				GROUP BY
    					year,
    					month
    				ORDER BY 
    					year DESC',
    				'SELECT m FROM generate_series(1,12) m'
    			) AS (
    			  year INT,
    			  jan NUMERIC,
    			  feb NUMERIC,
    			  mar NUMERIC,
    			  apr NUMERIC,
    			  may NUMERIC,
    			  jun NUMERIC,
    			  jul NUMERIC,
    			  aug NUMERIC,
    			  sep NUMERIC,
    			  oct NUMERIC,
    			  nov NUMERIC,
    			  dec NUMERIC
    			) ORDER BY year DESC
    			LIMIT 3