Вопросы по PHP программированию

Тема в разделе "Веб разработка", создана пользователем SeregaZ, 6 апр 2016.

  1. SeregaZ

    SeregaZ В доску свой

    Сообщения:
    391
    Симпатии:
    38
    Задумал я сделать что-то типа стим клиента для игр для старой приставки Sega Mega Drive для разминки мозгов. куча вопросов по коду появилось :) причем как в самом PHP, так и в java скриптах html'a и так-же в моем горе-языке программирования, где нет толкового функционала по работе с веб страничками. вот для начала хотелось бы решить все проблемы с PHP.

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

    с загрузкой файлов - в моем случае это будут четыре скриншота - вроде разобрался. теперь бы понять куда их сохранять :) по идее скрипт должен их переименовывать - то есть имена всегда одинаковые, а вот папки должны быть разные. папка - она же будет айди игры. типа 1, 2, 3, 100, 2342 и так далее. по идее когда автор производит заполнение этой формы со своим релизом игры - номер папки, то есть айди будет дописан в текстовой файл на сервере. когда один пользователь - проблем как бы и невозникнет. но что если пользователей будет трое? один вводит, второй в это-же время удаляет свои релизы, а третий правит скажем? они ж разорвут этот текстовой файл :) как бы выкрутится в этом плане с многозадачностью?

    мне на ум приходит записывать в этот текстовой файл только один номер - последней игры. скажем 3234 - а когда автор заполняет форму и отправляет, то в бесконечном рипите в цикле php пытается создать папку +1 к этому индексу. если папка создалась - значит все в порядке, копируем туда скриншоты и описания. если папка не создалась - прилетела ошибка, что данная папка существует, то прибавлять еще +1 и так до посинения пока не даст наконец создать папку. это бы решило проблему много задачности. или даже не вести этот файл с последним номером айди, а прям тупо с папки номер 1 и пока не создаст папку. не думаю что прям игр будет миллион и эти попытки создания будут занимать по полчаса. хостингер правда может ругаться :) ну да фиг с ним. до этого еще не скоро.

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

    вот хотелось бы проконсультироваться - насколько подобные методы нагрузят сервер? не хочется чтобы хостингер ругался. и может быть есть какие-то команды или код готовый - который как раз предназначен для подобной многозадачности? напомню что мисикуэль там недадут :) придется обходится только PHP.
     
    : PHP
  2. SeregaZ

    SeregaZ В доску свой

    Сообщения:
    391
    Симпатии:
    38
    так. создание "свободной" папки вроде бы набросал:
    PHP:
    <?php
    $id 
    100//типа стартовый индекс - нужно будет еще чтение из файла последнего использованного замутить
    do {
    $id $id 1//понятно. прибавить к индексу единичку
    $result = @mkdir("/"+$id0700); //попытатся создать папку. собачка в данном случае заблочит вывод ошибок что папка уже существует. зачем нам портить внешний вид? :)
    }
    while (
    $result <> true); //проверка а создалась ли папка? и торможение цикла как только создастся
    echo "done!";
    echo 
    $id;
    ?>
    первое что приходит на ум - тут нет проверки кода ошибки и есть ли ваще коды ошибки при создании папок? мне нужна именно что "папка существует". если там ошибка какая-то другая - типа сервер рухнул - то надо тормознуть цикл и повесить предупреждение типа "зайдите попозже". есть подобные коды ошибок? погуглю еще.


    поиск файлов в папке - оказалось даж есть такая команда и ничего придумывать ненадо :)
    PHP:
    <?php
    $filelist 
    glob("*"GLOB_ONLYDIR);
    foreach (
    $filelist as $tmp) {
    echo 
    $tmp;
    };
    ?>
  3. radioengineer

    radioengineer Администратор Команда форума

    Сообщения:
    3.592
    Симпатии:
    357
    Адрес:
    Алматы
    Интересная тема, только не ясно как будет работать, просто как стим клиент в браузере? Выбираю игру и скачиваю и она появляется в моей библиотеке, так? Я в php не силен конечно, но мне кажется лучше использовать таки базу, могу выделить на своем хостинге сайт с базой и т.д.
    Кстати, я тоже понемногу учу php и вопрос какой редактор юзаешь, я вот phpstorm использую сейчас, с ним удобно подключаться к серверу по ftp и править файлы сразу на серваке. Ключик от софтины китайцы шарят со своего сервера)
  4. SeregaZ

    SeregaZ В доску свой

    Сообщения:
    391
    Симпатии:
    38
    notepad++ :)

    по поводу игр - совершенно верно. задумано если автор выкладывает обновление - то оно скачивается автоматически, если было отмечено до этого. предвижу закавыку в другом - если играл в старую версию и сохранялся где-то там на стописяттретьем уровне - то в новой версии это сохранение работать не будет. видимо придется сохранять все версии с момента выбора пользователем игры. благо они 2-4 мегабайта.

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

    вроде нашелся код с текстом ошибок, а значит мне можно будет вешать стоп именно на нужную ошибку :)
    PHP:
    <?php
    function user_log ($errno$errmsg$file$line) {
    echo 
    $errno;
    echo 
    "<br>";
    echo 
    $errmsg;
    echo 
    "<br>";
    }

    error_reporting(E_ALL); //понятия не имею что делает. что-то включает :) было в примере.

    set_error_handler('user_log'); //тут понятно - втолковывает php что ошибку следует обрабатывать функцией user_log, а не его встроенными средствами

    $id 100;
    mkdir("/"+$id0700);
    ?>
    в результате пишет:
    2
    mkdir(): File exists

    значит мне остается ловить $errmsg; чтобы было равно mkdir(): File exists - и тогда приплюсовывать +1 к индексу. и если выдает иную ошибку - то прерывать процесс и сообщать пользователю приходить попозже.
  5. .ctor

    .ctor В доску свой

    Сообщения:
    720
    Симпатии:
    209
    Род занятий:
    парогенератор
    Адрес:
    Алматы
    это говнокод выйдет (перебирать папки, чтобы создать).
    а если два пользователя одновременно попытаются создать папку?

    Считай контрольную сумму (md5) на файл, создавай папку, и делай отдельный файл индексирования со списком игр..
  6. SeregaZ

    SeregaZ В доску свой

    Сообщения:
    391
    Симпатии:
    38
    все будет нормально при создании папки :) кто первый создал - того и тапки. у второго скрипт будет долбить пока не перепрыгнет по индексу уже созданную папку. то есть я танцую от ошибки что "папка уже существует" - правда точнее он напишет что файл существует - но не суть.

    п.с.: и почему ремонты на подстанции начинаются сразу как только я сажусь писать диплом? (с)пёрто откуда-то :) писал код и свет отрубили. потом ворочался уснуть не мог все думал что еще можно было бы дописать :)
  7. aman

    aman Живет здесь

    Сообщения:
    152
    Симпатии:
    10
    для того чтобы народ побыстрее переходил на водяные, ветряные, солнечные мельницы :)
  8. SeregaZ

    SeregaZ В доску свой

    Сообщения:
    391
    Симпатии:
    38
    листаю примеры по созданию файла - везде как-то то криво, то ашипке, то не понятно... что за террористы эти сайты и блоги ведут? я конечно понимаю что ошибки порой внедряют сознательно, чтоб читающие сами проявляли хоть какую-то мозговую работу по поиску косяка и исправлению, нежели тупая копипаста - но не настолько же!

    вот значит в моем непутевом языке как:
    если создать файл то писать и потом закрыть файл
    иначе выдать ошибку
    конец условия

    в примерах что я встречаю:
    если создать файл - писать
    иначе выдать ошибку
    конец условия
    закрыть файл

    эм... закрывать после неоткрытия? :) не выдаст ли это еще одну ошибку? ведь команда на закрытие будет обращаться к несуществующему... эээ... указателю? или кто он там... идентификатору? еще момент не стоит ли мне на открытие вешать собаку, чтоб сообщение не бомбило ошибкой почем зря - ведь все равно я там свой текст для ошибки вставил?

    PHP:
    $fp fopen($id "/main.txt""w");
            if (
    $fp) {
                
    fwrite($fp$text);
                
    fclose($fp);
            }
            else {echo 
    'создать файл не вышло... печалька.';}
    PHP:
    $fp fopen($id "/main.txt""w");
            if (
    $fp) {
                
    fwrite($fp$text);
            }
            else {echo 
    'создать файл не вышло... печалька.';}
            
    fclose($fp);
    или вот так правильней с собаками и дополнительным условием при записи?
    PHP:
    $fp = @fopen($id "/main.txt""w");
            if (
    $fp) {
                if (@
    fwrite($fp$text)) {echo 'записано успешно.';}
                else {echo 
    'ошибка записи.';}
                
    fclose($fp);
            }
            else {echo 
    'создать файл не вышло... печалька.';}
            
  9. SeregaZ

    SeregaZ В доску свой

    Сообщения:
    391
    Симпатии:
    38
    дошел до обработки входящих "сообщений", то есть текстовых параметров. начитался всякого ужоса :) очень полезная, по моему мнению скромного диванного иксперда, статья: https://habrahabr.ru/post/143035/

    из той кучи клинических случаев подчерпнул для себя следующий:
    Если вы не предполагаете вхождение html тегов, то лучше всего сделать такую фильтрацию:
    PHP:
    $input_text strip_tags($_GET['input_text']);
    $input_text htmlspecialchars($input_text);
    $input_text mysql_escape_string($input_text);
    ну mysql_escape_string мне не грозит, а вот два предыдущих надо внедрить обязательно :)

    так! по поводу htmlspecialchars есть один немаловажный нюанс :) русские буквы он на новых версиях PHP небельмеса :) чтоб его заставить понимать русские буквы, то команда должна стать более развернутой! (помню сто лет назад из-за неё столько шерсти на спине извел зазря)
    PHP:
    htmlspecialchars $_GET['input_text'] , ENT_COMPAT ENT_HTML401 'cp1251' 
    Последнее редактирование: 7 апр 2016
  10. SeregaZ

    SeregaZ В доску свой

    Сообщения:
    391
    Симпатии:
    38
    дошла очередь до работы с текстом самой странички, а я там придумал шикарный велосипед в том, что текст и картинки будут подгружатся динамически путем использования java скрипта по кликам :) так вот при составлении шаблона текста возникли трудности - кавычек стало нехватать :) там просто в тексте html странички много этих скриптов, и порой там требуется как одинарные так и двойные. то есть для php не остается кавычек для описания в коде. но к счастью, в этом php подобный недостаток в кавычках при работе с текстом, был предусмотрен. надо просто использовать в текстовой переменной слэш до кавычки \' - такая одинарная кавычка, в скрипте php не является как бы окончанием значения переменной, а является именно частью текста. так что америку для себя открыл в виде этих слэшей :)
    PHP:
    <?php
    $textshablon 
    '<img src="img.png" id=img3 width="10" height="10" onclick=\'javascript:someimg.src=this.src;\'>';
    ?>
  11. SeregaZ

    SeregaZ В доску свой

    Сообщения:
    391
    Симпатии:
    38
    решил выпендрится и форму для отсылки сделать из программы, а не через веб-страничку... йокараный бабай! что решалось на веб страничке всего парочкой строчек - в случае с POST запросами через соединения сломал мозг чтоб разобраться :) но вроде теперь понятно как это работает. даже наверное копну чуть поглубже и потом исправлю функционал по прямому скачиванию с дропбокса. сейчас там небольшой редирект и моя система такое не понимает :)

    [​IMG]
  12. .ctor

    .ctor В доску свой

    Сообщения:
    720
    Симпатии:
    209
    Род занятий:
    парогенератор
    Адрес:
    Алматы
    Ты еще базы чужие на RichFaces не перебирал наверное пост запросами))
  13. SeregaZ

    SeregaZ В доску свой

    Сообщения:
    391
    Симпатии:
    38
    с редиректами там кароче черт ногу сломит. да плюс еще там https - кароче гиблое дело. плюс еще пришлось отказаться от полоски прогресс бара при загрузке игр. сейчас тупо окошко маленькое и кнопка отмена, а в дополнительном потоке идет закачка функцией самого компилятора, а не самописным кодом с обработкой сообщений. плюс затык с поиском хендела окна эмулятора... ну не суть :) пока они там на форуме думают, что я у них спросил насчет этого затыка - напишу о самих пост запросах, что сам вкурил. конечно статей итак кругом хватает и вроде как все правильно, но как-то у меня не очень то и выходило. поэтому расскажу о своем опыте :)


    итак POST запросы, отправляемые на сервер с PHP.

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

    сами хостинги тоже хитры - могут иметь своеобразную защиту от всяких там запросов непонятных. поэтому очень часто запроса типа:
    Код:
    POST /forma.php HTTP/1.1
    Host: privet.com
    не хватает. сервер тупо игнорирует и присылает конец соединения. чтобы это побороть - надо взять гугл хром, вбить эту ссылку из запроса, а так-же через дополнительные инструменты включить окошко, где показываются запросы - там можно будет подглядеть как гугл хром обращается к серверу. гугл хром то авторитетный и сервер его запросы принимает. так что делов то в наш запрос добавить все, что гугл дописывает. то есть чтоб стало что-то типа:
    Код:
    POST /forma.php HTTP/1.1
    Host: privet.com
    Connection: keep-alive
    Content-Length: какой-тотамразмер
    Cache-Control: max-age=0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    Origin: null
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.125 Safari/537.36
    Content-Type: multipart/form-Data; boundary=----WebKitFormBoundaryhtA6emUMht2mBrTa
    Accept-Encoding: gzip, deflate
    Accept-Language: en-US,en;q=0.8,ru;q=0.6
    
    я без понятия что значит и половина сих безобразий, но видимо раз сервер начинает подобное кушать не отбрыкиваясь - значит надо :)

    из всего этого безобразия нам важны следующие строки
    Content-Length: какой-тотамразмер и Content-Type: multipart/form-Data; boundary=----WebKitFormBoundaryhtA6emUMht2mBrTa
    эти двоя отвечают за прилагающуюся информацию к запросу. а именно ----WebKitFormBoundaryhtA6emUMht2mBrTa является разделителем для разных отсылаемых полей скажем имя пользователя и пароль и картинка во весь рост, какой-тотамразмер это указывается размер информации которая приложена к запросу.

    поскольку сначала идет размер, а потом само поле со значениями, то запрос надо составлять задом наперед и каждое поле ограничивать этими полями boundary. вот например мы составляем запрос и где в конце обязательно надо добавлять конец строки и перевод каретки - то есть это в моем случае #CRLF$ (на php что-то вроде "\r\n"). сам запрос составляем в виде текста и символ доллара в конце свидетельствует что это текстовая переменная. (естественно в каждом языке будет свой синтаксис, но в целом я думаю понятно):
    Код:
    Body$  = "----WebKitFormBoundaryhtA6emUMht2mBrTa" + #CRLF$
    Body$  + "Content-Disposition: form-Data; name=login" + #CRLF$
    Body$  + #CRLF$
    Body$  + "vasya" + #CRLF$
    Body$  + "----WebKitFormBoundaryhtA6emUMht2mBrTa" + #CRLF$
    Body$  + "Content-Disposition: form-Data; name=password" + #CRLF$
    Body$  + #CRLF$
    Body$  + "123456" + #CRLF$
    Body$  + "----WebKitFormBoundaryhtA6emUMht2mBrTa--" + #CRLF$
    
    ну вот - разделитель, объявление имени переменной что мы отсылаем - login, пустая строчка, значение этой переменной login, разделитель, объявление имени переменной password, пустая строчка, значение этой переменной password, и тут важная деталь - когда делитель последний, то у него должны быть добавлены еще два минуса или два тире кто они там... в конце. это мы так создали своеобразное приложение к запросу. теперь сам запрос, а тут нам еще понадобится узнать длину этого приложения - в моем случае это была команда Len, но поскольку Len возвращает число, а не текст - то надо будет еще дополнительно перевести число в текст с помощью Str:
    Код:
    Header$ = "POST /forma.php HTTP/1.1" + #CRLF$
    Header$ + "Host: privet.com" + #CRLF$
    Header$ + "Connection: keep-alive" + #CRLF$
    Header$ + "Content-Length: " + Str(Len(Body$)) + #CRLF$
    Header$ + "Cache-Control: max-age=0" + #CRLF$
    Header$ + "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8" + #CRLF$
    Header$ + "Origin: null" + #CRLF$
    Header$ + "Upgrade-Insecure-Requests: 1" + #CRLF$
    Header$ + "User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.125 Header$ + "Safari/537.36" + #CRLF$
    Header$ + "Content-Type: multipart/form-Data; boundary=----WebKitFormBoundaryhtA6emUMht2mBrTa" + #CRLF$
    Header$ + "Accept-Encoding: gzip, deflate" + #CRLF$
    Header$ + "Accept-Language: en-US,en;q=0.8,ru;q=0.6" + #CRLF$
    Header$ + #CRLF$
    
    Itog$ = Header$ + Body$
    
    вот значит в переменной Itog$ у нас подготовленный к посылке POST запрос.

    дальше остается только его послать. вот с посылкой есть нюансы :) в моем случае для посылки данных существуют два способа - посылки текста и посылки данных из памяти. в данном случае мы шлем две текстовых переменных можно послать текстовым вариантом. однако если в запросе есть вложенные файлы, то здесь надо будет писать весь запрос в память и содержимое файла картинки тоже. и потом все скопом слать.

    при записи в память есть опять-таки нюанс - в моем случае при записи текста в память, то функция брала и дописывала символ конца строки в конец сообщения, что в итоге приводило к превышению лимита памяти и выбивания с ошибкой программы. поэтому надо внимательнее будет изучить команду записи текста в память - в моем случае был способ указать дополнительный флаг функции не писать этот нулевой или окончательный символ в конце #PB_String_NoZero. в моем случае это выглядело что-то типа так:
    Код:
    PokeS(*UkazatelKudPisat, Itog$, Len(Itog$), #PB_Ascii|#PB_String_NoZero)
    то есть там была последовательность
    PokeS - писался заголовок и частично вложение до пустой строчки перед содержимом файла
    CopyMemory - читался файл картинки и его содержимое дописывалось с того места, где остановился PokeS
    PokeS - допись "----WebKitFormBoundaryhtA6emUMht2mBrTa--" + #CRLF$ в конце, символизируящая конец запроса

    закавыка была в том, что гугл хром не показывал в инструментах содержимое картинки и я вдуплить не мог почему там на месте, где должно было быть это содержание пустая строчка :) поэтому потерял целый день на этом. потом то мне подсказали что существует второй способ передачи, то есть не текста, а именно данных. я же пытался перевести картинку в текст и слать той предидущей командой. отсюда и затык :)

    еще рекомендуется при создании подобных запросов сохранять дамп запроса в текстовой файл на жестком диске и смотреть все-ли там где оно стоит и нет ли лишних символов - это тоже очень поможет в отлавливании ошибок в запросах.
  14. .ctor

    .ctor В доску свой

    Сообщения:
    720
    Симпатии:
    209
    Род занятий:
    парогенератор
    Адрес:
    Алматы
    POST /forma.php HTTP/1.1 [тип запроса]
    Host: privet.com [хост. На одном IP может крутиться несколько доменов]
    Connection: keep-alive [значит сервер не будет разрывать соединение после запроса]
    Content-Length: [размер пост-данныъ]
    Cache-Control: [кэширование]
    Accept: [какие данные может принимать клиент]
    Origin: [https://ru.wikipedia.org/wiki/Cross-origin_resource_sharing]
    Upgrade-Insecure-Requests: 1
    User-Agent: [сервер знает каким браузером сделан запрос]
    Content-Type: [тип данных от клиента]
    Accept-Encoding: [указывает серверу типы декомпрессоров, которые понимает клиент]
    Accept-Language: [язык]
  15. SeregaZ

    SeregaZ В доску свой

    Сообщения:
    391
    Симпатии:
    38
    а я решил немного апнуть графический интерфейс программы :) точнее не столько апнуть - сколько вернутся к изначальной задумке. стандартными средствами как-то все банально вышло... а вот в этом варианте будет покрасивше :)

    [​IMG]
    radioengineer нравится это.
  16. SeregaZ

    SeregaZ В доску свой

    Сообщения:
    391
    Симпатии:
    38
    так и не понимаю я в чем проблема с колесиком мышки на виндовс 10... болванку, правда еще недопиленную, но уже с частично доделаными пост-запросами можно потрогать тут: http://purebasic.info/phpBB3ex/go.p...p?action=dlattach;topic=75680.0;attach=165994

    чтобы перейти к этому скролу - следует выбрать Shop - Dune - и первую картинку - он должен будет загрузить текст в специальное поле и будет видна полоска скроллбара. вот надо мышкой навестись на текст и крутануть колесико - на XP все замечательно, а на 10 чот вообще не дышит.
  17. SeregaZ

    SeregaZ В доску свой

    Сообщения:
    391
    Симпатии:
    38
    ах да... возвращаясь к вопросам PHP. напомню я на непутевом хостинге, где базы всякие мисикуэли или кто они там - не доступны. есть только PHP. и вот по моей задумке клиент генерирует уникальный ID пользователя (пока не предусмотрено авторизации), за которым закрепляются выложенные им игры. после когда надо обновлять игры - новый запрос приходит и идет сравнение с этим старым ID - если не сходится, значит это не хозяин и отбриваем его.

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

    в начале инфа лежала в банальном тхт файле и php читала его построчно и вносила в базу данные оттуда. было удобно, но небезопасно. тут я догадался взять и создавать не тхт файл, а php и чтоб он информационные строки выдавал через echo. типа:
    PHP:
    <?php
    echo "игра такая-то" "\r\n";
    echo 
    "инфа такая-то" "\r\n";
    echo 
    "айди" "\r\n";
    ?>
    то есть при разборе пост запроса мне удобно приходят три строчки и их удобно обрабатывать. однако ж клиенту то незачем знать айди - айди нужен самому скрипту на сервере. значит мне нужно просто взять и убрать echo в данном месте. то есть получается при обращении к серверу через браузер или запрос - php будет выполнятся и айди не покажется, а вот сам сервер PHP будет обращаться к этому файлу как текстовому файлу. мне просто банально нужно было бы читать скажем 4 строчку и все. осталось только сделать так, чтоб php не ругался. в итоге вышло что-то типа:
    PHP:
    <?php
    echo "игра такая-то" "\r\n";
    echo 
    "инфа такая-то" "\r\n";
    $text "
    айди
    "
    ;
    ?>
    то есть надо было просто читать 5 строчку из этого файла и все :)

    потом это дело сократилось вообще до безобразия:
    PHP:
    игра такая-то
    инфа такая-то<?php '
    айди
    '
    ?>
  18. timsoon

    timsoon В доску свой

    Сообщения:
    378
    Симпатии:
    46
    Род занятий:
    КИПиА, it, и прочее
    Адрес:
    г.Капчагай
    привет кто в веб разбирается. Вот начал копать сайт для себя. Есть php код ,можете подсказать что куда ввести чтобы сообщения со страницы мне на почту приходили
    Код:
    <?php
    if(isset($_POST['submit']))
    {
        $name = $_POST['name'];
        $email = $_POST['email'];
        $query = $_POST['message'];
        $email_from = $name.'<'.$email.'>';
    
    $to="timur@timsystems.ru";
    $subject="Enquiry!";
    $headers  = 'MIME-Version: 1.0' . "\r\n";
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
    $headers .= "From: ".$email_from."\r\n";
    $message="     
           
              Name:
             $name       
             <br>
              Email-Id:
             $email       
             <br>
              Message:
             $query       
         
       ";
        if(mail($to,$subject,$message,$headers))
            header("Location:../contact.php?msg=Successful Submission! Thankyou for contacting us.");
        else
            header("Location:../contact.php?msg=Error To send Email !");
            //contact:-your-email@your-domain.com
    }
    ?>
    
    --- Сообщения объединены, 24 апр 2016 ---
    а это код странички, она тоже почему-то с расширением php
    Код:
    <!DOCTYPE HTML>
    <html>
    <head>
        <meta charset="utf-8">
        <title>Your Name Here - Welcome</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta name="description" content="">
        <meta name="author" content=""> 
       
        <link href="scripts/bootstrap/css/bootstrap.min.css" rel="stylesheet">
        <link href="scripts/bootstrap/css/bootstrap-responsive.min.css" rel="stylesheet">
    
        
          <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
        <![endif]-->
    
        <!-- Icons -->
        <link href="scripts/icons/general/stylesheets/general_foundicons.css" media="screen" rel="stylesheet" type="text/css" /> 
        <link href="scripts/icons/social/stylesheets/social_foundicons.css" media="screen" rel="stylesheet" type="text/css" />
        <!--[if lt IE 8]>
            <link href="scripts/icons/general/stylesheets/general_foundicons_ie7.css" media="screen" rel="stylesheet" type="text/css" />
            <link href="scripts/icons/social/stylesheets/social_foundicons_ie7.css" media="screen" rel="stylesheet" type="text/css" />
        <![endif]-->
        <link rel="stylesheet" href="scripts/fontawesome/css/font-awesome.min.css">
        
    
        <link href="http://fonts.googleapis.com/css?family=Allura" rel="stylesheet" type="text/css">
        <link href="http://fonts.googleapis.com/css?family=Aldrich" rel="stylesheet" type="text/css">
        <link href="http://fonts.googleapis.com/css?family=Open+Sans" rel="stylesheet" type="text/css">
        <link href="http://fonts.googleapis.com/css?family=Open+Sans" rel="stylesheet" type="text/css">
        <link href="http://fonts.googleapis.com/css?family=Pacifico" rel="stylesheet" type="text/css">
        <link href="http://fonts.googleapis.com/css?family=Palatino+Linotype" rel="stylesheet" type="text/css">
        <link href="http://fonts.googleapis.com/css?family=Calligraffitti" rel="stylesheet" type="text/css">
    
        <link href="styles/custom.css" rel="stylesheet" type="text/css" />
        <script src="email/validation.js" type="text/javascript"></script>
    </head>
    <body id="pageBody">
    
    <div id="decorative2">
        <div class="container">
    
            <div class="divPanel topArea notop nobottom">
                <div class="row-fluid">
                    <div class="span12">
    
                        <div id="divLogo" class="pull-left">
                            <a href="index.html" id="divSiteTitle">Your Name Here</a><br />
                            <a href="index.html" id="divTagLine">Your Tag Line Here</a>
                        </div>
    
                        <div id="divMenuRight" class="pull-right">
                        <div class="navbar">
                            <button type="button" class="btn btn-navbar-highlight btn-large btn-primary" data-toggle="collapse" data-target=".nav-collapse">
                                NAVIGATION <span class="icon-chevron-down icon-white"></span>
                            </button>
                            <div class="nav-collapse collapse">
                                <ul class="nav nav-pills ddmenu">
                                    <li class="dropdown"><a href="index.html">Home</a></li>
                                    <li class="dropdown"><a href="about.html">About</a></li>
                                    <li class="dropdown">
                                        <a href="page.html" class="dropdown-toggle">Page <b class="caret"></b></a>
                                        <ul class="dropdown-menu">
                                <li><a href="full.html">Full Page</a></li>
                                <li><a href="2-column.html">Two Column</a></li>
                                <li><a href="3-column.html">Three Column</a></li>
                                <li><a href="../documentation/index.html">Documentation</a></li>
                                <li class="dropdown">
                                <a href="#" class="dropdown-toggle">Dropdown Item &nbsp;&raquo;</a>
                                <ul class="dropdown-menu sub-menu">
                                <li><a href="#">Dropdown Item</a></li>
                                <li><a href="#">Dropdown Item</a></li>
                                <li><a href="#">Dropdown Item</a></li>
                                </ul>
                                </li>
                                </ul>
                                    </li>
                                    <li class="dropdown"><a href="gallery.html">Gallery</a></li>
                                    <li class="dropdown active"><a href="contact.php">Contact</a></li>
                                </ul>
                            </div>
                        </div>
                        </div>
    
                    </div>
                </div>
            </div>
    
        </div>
    </div>
    
    <div id="contentOuterSeparator"></div>
    
    <div class="container">
    
        <div class="divPanel page-content">
    
            <div class="breadcrumbs">
                    <a href="index.html">Home</a> &nbsp;/&nbsp; <span>Contact Us</span>
                </div>
    
            <div class="row-fluid">
                    <div class="span8" id="divMain">
    
                        <h1>Contact Us</h1>
                           <h3 style="color:#FF6633;"><?php echo $_GET[msg];?></h3>
                        <hr>
                <!--Start Contact form -->                                                       
    <form name="enq" method="post" action="email/" onsubmit="return validation();">
      <fieldset>
       
        <input type="text" name="name" id="name" value=""  class="input-block-level" placeholder="Name" />
        <input type="text" name="email" id="email" value="" class="input-block-level" placeholder="Email" />
        <textarea rows="11" name="message" id="message" class="input-block-level" placeholder="Comments"></textarea>
        <div class="actions">
        <input type="submit" value="Send Your Message" name="submit" id="submitButton" class="btn btn-info pull-right" title="Click here to submit your message!" />
        </div>
       
        </fieldset>
    </form>                  
                <!--End Contact form -->                                            
                    </div>
                   
                <!--Edit Sidebar Content here-->   
                    <div class="span4 sidebar">
    
                        <div class="sidebox">
                            <h3 class="sidebox-title">Contact Information</h3>
                        <p>
                            <address><strong>Your Company, Inc.</strong><br />
                            Address<br />
                            City, State, Zip<br />
                            <abbr title="Phone">P:</abbr> (123) 456-7890</address>
                            <address>  <strong>Email</strong><br />
                            <a href="mailto:#">first.last@gmail.com</a></address> 
                        </p>    
                        
                         <!-- Start Side Categories -->
            <h4 class="sidebox-title">Sidebar Categories</h4>
            <ul>
              <li><a href="#">Quisque diam lorem sectetuer adipiscing</a></li>
              <li><a href="#">Interdum vitae, adipiscing dapibus ac</a></li>
              <li><a href="#">Scelerisque ipsum auctor vitae, pede</a></li>
              <li><a href="#">Donec eget iaculis lacinia non erat</a></li>
              <li><a href="#">Lacinia dictum elementum velit fermentum</a></li>
              <li><a href="#">Donec in velit vel ipsum auctor pulvinar</a></li>
            </ul>
                        <!-- End Side Categories -->
                                           
                        </div>
                       
                       
                       
                    </div>
                <!--/End Sidebar Content-->
                   
                   
                </div>           
    
            <div id="footerInnerSeparator"></div>
        </div>
    
    </div>
    
    <div id="footerOuterSeparator"></div>
    
    <div id="divFooter" class="footerArea">
    
        <div class="container">
    
            <div class="divPanel">
    
                <div class="row-fluid">
                    <div class="span3" id="footerArea1">
                   
                        <h3>About Company</h3>
    
         
    <script src="scripts/jquery.min.js" type="text/javascript"></script>
    <script src="scripts/bootstrap/js/bootstrap.min.js" type="text/javascript"></script>
    <script src="scripts/default.js" type="text/javascript"></script>
    
    
    
    
    
    </body>
    </html>
  19. SeregaZ

    SeregaZ В доску свой

    Сообщения:
    391
    Симпатии:
    38
    по моему для отправки почты посредством php - должна быть использована некая почтовая приблуда, которая может быть невключена или вовсе отсутствовать на хостинге, который контора тебе предоставляет.

    по видимому это функция mail и есть.
    --- Сообщения объединены, 24 апр 2016 ---
    http://php.net/manual/ru/function.mail.php
    --- Сообщения объединены, 24 апр 2016 ---
    с домашнего сервера отправлять не захотела :)
    Warning: mail(): Failed to connect to mailserver at "127.0.0.1" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\Program Files\EasyPHP-DevServer-14.1VC9\data\localweb\mail.php on line 9

    то есть эта приблуда должна быть включена и настроена. в моем случае еще хочет SMTP сервер отдельно. совсем ахамела стерва :) хотя мож можно внешний то есть тот-же мэйлрушный SMTP подключить и через него как-то отправить.
  20. SeregaZ

    SeregaZ В доску свой

    Сообщения:
    391
    Симпатии:
    38

Поделиться этой страницей