• Как исправить функцию отправки почты?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Ну, скажем так, поправить чтобы работало не получится, нужно переписать кусок где собственно "отправка почты"(на самом деле обращение к стороннему сервису отправки почты). Собсно писать кусок где почта будет отправляться с вашего сервера, либо используйте стандартный mail(), либо подключайте php mailer.
    Вопрос: что в этой строке отрабатывалось и что туда надо теперь поместить, чтобы снова заработало?
    В этой строке была инициализация соединения с удаленным сервером, на котором работал скрипт отправки почты, так как теперь этот домен не отвечает - весь кусок который отвечал за отправку туда данных не работает, ну и на сервере там теперь уже ничего не выполняется соответственно )
    Ответ написан
    2 комментария
  • Как создать таблицу Ганна на php + js?

    lazalu68
    @lazalu68
    Salmon
    looping in a spiral

    По ссылке можно видеть до чёрта вариантов реализации того что вам нужно, на многих языках. В том числе на JS, в том числе с циклами, в том числе без циклов (определение значения ячейки по (x,y)).
    Ответ написан
    Комментировать
  • Как отправить статус код 404 и одновременно сообщение?

    p00h
    @p00h
    Фехтовальщик-стропальщик
    header('HTTP/1.1 500 Internal Server Error');

    Это всего лишь заголовок. Отправьте контент в любом виде и отобразите его.
    Ответ написан
    3 комментария
  • Как написать определения наиболее часто встречающегося символа?

    jasonOk
    @jasonOk
    Легче болтать, чем код писать
    Ответ написан
    Комментировать
  • Как перебрасывать пользователя на последнюю посещенную страницу в PHP?

    Sanasol
    @Sanasol Куратор тега PHP
    нельзя просто так взять и загуглить ошибку
    1. сессия/кука - referer записывать на странице авторизации, после авторизации по нему уходить.
    2. при переадресации на авторизацию в урл добавлять обратную ссылку.
    Ответ написан
    Комментировать
  • Как правильно написать скрипт, который будет приводить введенные пользователем данные к верхнему регистру на JS/jQuery?

    @Afadeev
    Front-end разработчик
    А зачем это делать скриптом, если можно стилями преобразовать в верхний регистр?
    в css
    #vin1 {
    text-transform: uppercase;
    }
    А потом при отправке на сервер или на сервере уже преобразовать в верхний регистр
    Ответ написан
  • Как показывать блок только десктопным или мобильным устройствам?

    @kotemedia
    Режу
    @media (max-width: 768px) {
    . adsdesktop {
        display: none;
      }
    . adsmobile {
    display: block;
     }
    }
    Ответ написан
  • Есть ли возможность сделать на сайте просмотр документов docx, pdf, xls?

    littleguga
    @littleguga
    Не стыдно не знать, а стыдно не интересоваться.
    Ответ написан
    Комментировать
  • Как скомпилировать html файлы из шаблонов?

    @undeadlol1 Автор вопроса
    Отвечаю на собственный вопрос спустя три месяца.

    Для того чтобы сгенерировать готовый html из разрозненных шаблонов, нужна такая штука как static site generator.
    Например, jekyll.
    Ответ написан
    Комментировать
  • Mysql+php как лучше всего хранить иерархические данные?

    evnuh
    @evnuh
    Поиск Гугл помог мне, впусти и ты его в свой дом
    Если максимум 6 и точно больше никогда не будет, то не грех и через pid. Но это вообще самая хреновая структура. Лучше всего Nested Sets, сразу с хранением уровня вложенности.
    Ответ написан
    Комментировать
  • PHP. Синтаксис: почему часто пишут так, а не иначе?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Посмотрите habrahabr.ru/post/47706
    Там на примере bash как раз подобный пример поясняется в пункте 3. [ $foo = «bar» ]
    Ответ написан
    1 комментарий
  • Что интересного есть в вашем стандартном шаблоне?

    @bogomazov_vadim
    Не знаю насколько интересно, но может кому пригодится. Частями найдено на просторах интернета, использую в своем template + normalize.
    Заменяем длинный текст placeholder многоточием:
    input[placeholder]          {text-overflow:ellipsis;}
    input::-moz-placeholder     {text-overflow:ellipsis;} 
    input:-moz-placeholder      {text-overflow:ellipsis;} 
    input:-ms-input-placeholder {text-overflow:ellipsis;}

    Скрываем placeholder при фокусе:
    :focus::-webkit-input-placeholder {color: transparent}
    :focus::-moz-placeholder          {color: transparent}
    :focus:-moz-placeholder           {color: transparent}
    :focus:-ms-input-placeholder      {color: transparent}

    Курсор для label + отмена раздражающего выделения при клике:
    label {
        cursor: pointer;
        -webkit-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
        -o-user-select: none;
        user-select: none;
    }

    Только вертикальный ресайз для textarea (horizontal часто ломает диз):
    textarea {
    	resize: vertical;
    }

    Убираем дефолтный курсив у address:
    address {
    	font-style: normal;
    }

    Убираем подсветку полей:
    input:focus,
    textarea:focus {
    		outline: none;
    }

    Адаптивные img:
    img {
    	height: auto;
    	max-width: 100%;
    	width: auto\9;
    }

    Адаптивные видео:
    .video {
        position: relative;
        padding-bottom: 56.25%;
        height: 0;
        overflow: hidden;
    }
    .video iframe,  
    .video object,  
    .video embed {
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
    }

    Перенос слов:
    .break-word {
            word-wrap: break-word;
    }

    Обнуляем списки глобально, т.к. часто используется для навигации и проч., в области контента можно задать другие стили.
    ul {
    	list-style: none;
    	margin: 0;
    	padding: 0;
    }

    Нумерованный список с подпунктами:
    ol {
    	counter-reset: list1;
    
    	li:before {
    		counter-increment: list1;
    		content: counter(list1) '. ';
    	}
    
    	ol {
    		counter-reset: list2;
    
    		li:before {
    			counter-increment: list2;
    			content: counter(list1) '.' counter(list2) '. ';
    		}
    
    		ol {
    			counter-reset: list3;
    
    			li:before {
    				counter-increment: list3;
    				content: counter(list1) '.' counter(list2) '.' counter(list3) '. ';
    			}
    		}
    	}
    }


    update дополнительно стили для печати

    P.S. Что-то конечно юзается не всегда, по желанию лишнее удалить, замечаниям и критике буду рад.
    Ответ написан
    5 комментариев
  • Есть ли достойный аудиокурс английского?

    @DartNyan
    Я бы посоветовал курс Петрова "Полиглот".
    Ответ написан
    Комментировать
  • Каковы основные принципы регистрации и авторизации через социальные сети OAuth2?

    hbuser
    @hbuser Автор вопроса
    Отвечу сам себе.
    Здесь есть полезная конкретная информация о технической реализации.

    А если вкратце, то...

    Для авторизации, регистрации используется все та же таблица 'users'. Вместе с обычной регистрацией и авторизацией, когда при регистрации (в самом простом виде) в таблицу 'users' добавляются email, password и login пользователя, а при авторизации проверяется соответствие введенных login'а и password'а существующим в базе данных, аналогичным образом используется и регистрация/авторизация через социальные сети. Только в данном случае источником данных о пользователе для его регистрации является не непосредственный пользователь, который вводит данные в форму, а соц. сеть. Регистрация в данном случае достаточно прозрачная, т.е. не видна пользователю. Схема примерно следующая (без особенностей работы Oauth-протокола):


    1) Пользователь выбирает вход через соц. сеть.
    2) Происходит обращение к странице авторизации в этой соц. сети, если человек еще не авторизовывался там. После ввода данных, а если он ранее авторизовывался, происходит запрос на разрешение использования его данных.
    3) Если человек отказывается, то на этом конец. Если дает согласие, то выполняется перенаправление на указанную в настройках Oauth страницу сайта.
    4) У каждого пользователя в соц. сетях есть свой уникальный идентификатор, который можно запрашивать. Для своей таблицы 'users' нужно добавить пару дополнительных полей (например, вот такие): auth_via (enum('native, 'vk', 'mailru', '...')) - для обозначения типа регистрации пользователя, и social_id - здесь будет храниться уникальный идентификатор в соц. сети. Если нужно хранить какие-то специфические данные этого пользователя из соц. сетей, то можно создать доп. поля для этих данных.
    5) После того, как пользователь дал разрешение на использование его данных, необходимо запросить нужные данные от соц. сети, в т.ч. и идентификатор пользователя в соц. сети. Вот здесь и начинается невидимый процесс регистрации. Нужно проверить есть ли в БД пользователь с таким social_id, если нет, то вставляем social_id, данные пользователя из соц. сети, по необходимости, в БД. Все, пользователь зарегистрирован.
    Если же данные о пользователе есть, то необходимо запросить актуальные данные из соц. сети, сравнить их с теми, что в базе и если они изменились, то обновить их и в своей базе данных, если нет, то просто переходим к следующему шагу.
    6) Создается сессия с данными пользователя.

    Таким образом, к существующей таблице "родной" регистрации пользователей сайта присоединяется, условно говоря, таблица, поля, необходимые для регистрации/авторизации через соц. сети., и друг-другу они не мешают.

    ca4a4b263fd1424085988c9deaeb6d5b.png

    Для пользователя, зарегистрированного из соц. сети пароля и логина, естественно, нет. Они нужны для авторизации. А т.к. пользователь авторизуется с помощью своих логина и пароля в соц. сети, то и указывать здесь нечего. И еще, можно при авторизации, к запросу проверки логина и пароля, добавить условие

    'AND WHERE `auth_via`="native"'

    , чтобы исключить пользователей, зарегистрированных из соц. сетей.

    Как видно, для каждого пользователя в таблице создается внутренний (внутрисайтовый, если так можно выразиться) первичный, автоинкрементный ключ. Соответственно, нет разницы для логики сайта между пользователем, зарегистрированным через соц. сеть и через сайт. Если говорить об интернет-магазине, то, для привязки заказов к пользователю, можно использовать единый, внутренний идентификатор ID.
    Ответ написан
    3 комментария