1. Гость, мы просим Вас ознакомиться с Правилами Форума и Отказом от ответственности!

Уроки по PHP

Тема в разделе 'PHP', создана пользователем sa64ka, 14 июл 2011.

?

Вам нравятся, Уроки по PHP ?

  1. Да

    31 голосов
    66,0%
  2. Нет

    16 голосов
    34,0%
  1. TopicStarter Overlay

    sa64ka Пользователи

    Сообщения:
    10
    Лайки:
    6
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    mr-glonin
    Добрый день уважаемые пользователи.

    В данном уроке мы и будем говорить о восстановления забытого пароля. Новый пароль будет случайно генерироваться из набора цифр и букв латинского алфавита, а затем высылаться на E-mail.

    Для этого мы создадим файл password.php, в котором будет содержаться форма для ввода логина и E-mail-а:

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


    Затем идет код, который будет генерировать наш новый пароль:

    Код:
    <?php
    if (isset($_POST['submit'])){     
    $login = $_POST['login'];
    $email = $_POST['email'];
    
    if (empty($login)){
    echo "Введите логин!";
    }
    elseif (empty($email)){
    echo "Введите e-mail!";
    }
    else{
    $resultat = mysql_query("SELECT * FROM users WHERE login = '$login' AND email = '$email'");
    $array = mysql_fetch_array($resultat);
    if (empty($array)){
    echo 'Ошибка! Такого пользователя не существует';
    }
    elseif (mysql_num_rows($resultat) > 0){
    $chars="qazxswedcvfrtgbnhyujmkiolp1234567890QAZXSWEDCVFRTGBNHYUJMKIOLP";
    $max=10; 
    $size=StrLen($chars)-1; 
    $password=null; 
    
    while($max--) {
    $password.=$chars[rand(0,$size)]; 
    }
    $newmdPassword = md5($password); 
    $title = 'Востановления пароля пользователю '.$login.' для сайта Site.ru!';
    $letter = 'Вы запросили восстановление пароля для аккаунта '.$login.' на сайте Site.ru \r\nВаш новый пароль: '.$password.'\r\nС уважением админестрация сайта Site.ru';
    // Отправляем письмо
    if (mail($email, $title, $letter, "Content-type:text/plain; Charset=windows-1251\r\n")) {
    mysql_query("UPDATE users SET password = '$newmdPassword' WHERE login = '$login'  AND email = '$email'");
    echo 'Новый пароль отправлен на ваш e-mail!<br><a ref="index.php">Главная страница</a>';
    }
    }                              
    }
    }
    mysql_close();
    ?>
    Рассмотрим данный код более подробно. В самом начале мы проверяем, нажата ли кнопка "Восстановить пароль" и введен ли логин и E-mail. Если все данные существуют, то мы проверяем, есть ли такой пользователь, если нет, то выдаем ошибку «Такого пользователя не существует». Если пользователь есть в базе, то мы из набора символов содержащихся в переменной $charsсоставляем новый пароль из 10 символов. Для этого мы используем цикл, в котором при помощи функции rand случайно выбираются символы из переменной $chars и заносятся в переменную $password. Теперь нужно отправить новый пароль пользователю на E-mail и добавить его в базу. Но в базе пароли у нас хранятся в зашифрованном виде, поэтому мы так же шифруем пароль$newmdPassword = md5($password); . Теперь высылаем новый пароль пользователю. Если отправка письма была удачной, то мы обновляем данные в базе и сообщаем об успешном восстановлении пароля.


    Ну, вот теперь пользователи вашего сервера с легкостью могут восстановить свой пароль.


    На сайте не передерживаются коды закинул в блокнот :)
    5 пользователям это нравится.
  2. Ex3m I Пользователи

    Сообщения:
    40
    Лайки:
    62
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    Play-BB
    Откуда то взято, плюс, ну не как не для раздела PW.
    Хотя ладно, пусть тут будет.
  3. TopicStarter Overlay

    sa64ka Пользователи

    Сообщения:
    10
    Лайки:
    6
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    mr-glonin
    Ex3m почему не для pw?, я думаю даже очень для pw в разделе web очень хорошая штука чтоб написать самому а не клянчить или брать готовое для web сайта + и для web сервера +, пробовал сделать себе получилось на сайте работает на сервере еще не пробовал, но думаю тоже работать правильно будет если настроить.
  4. TopicStarter Overlay

    sa64ka Пользователи

    Сообщения:
    10
    Лайки:
    6
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    mr-glonin
    Ап хотел написать новый урок но увы сайт не позволяет отображать код правильно :)(
    1 человеку нравится это.
  5. Tolstes Пользователи

    Сообщения:
    9
    Лайки:
    3
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    Bss-Team
    Спасибо, кокраз хотел пхп зубрить :)
  6. BEE Пользователи

    Сообщения:
    17
    Лайки:
    2
    Репутация:
    0
    мог бы найти копипасту и по лучше [​IMG]
  7. jkpro Пользователи

    Сообщения:
    3
    Лайки:
    6
    Репутация:
    0
    Пароль для pw формируется по другому, после такого "саппорта" администрации пользователи не зайдет в игру
    Taras нравится это.
  8. TopicStarter Overlay

    sa64ka Пользователи

    Сообщения:
    10
    Лайки:
    6
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    mr-glonin
    PHP Творит чудеса! по изучай его и любой php код заработает в pw + немного знании mysql
  9. jkpro Пользователи

    Сообщения:
    3
    Лайки:
    6
    Репутация:
    0
    Не пишу на таком... "неважно", тебе как к гайдеру был упрек, я уверен что исправить под пв это не проблемно для тебя (впрочем для меня тоже не проблемно хотя никогда и не учил этот язык) Уверен человек незнакомый с программированием самостоятельно по твоему гайду не разбертся
    Taras нравится это.
  10. TopicStarter Overlay

    sa64ka Пользователи

    Сообщения:
    10
    Лайки:
    6
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    mr-glonin
    Ты прав но хотя бы Азы php, html, java, c#, Flech, надо знать! ну на крайний случай уметь пользоваться всей продукцией Adode.
  11. TopicStarter Overlay

    sa64ka Пользователи

    Сообщения:
    10
    Лайки:
    6
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    mr-glonin
    Скрипт для создания капчи.

    Наверное, многие из владельцев сайтов, на которых есть возможность оставлять комментарии сталкивались с тем, что кто то так и норовит оставить спам или ссылку на какой-нибудь сайт. Очень часто это делают специальные роботы или боты. Самым простым и удобным решением в данной ситуации является использование капчи (CAPTCHA). Как правило, она представляет из себя набор букв и цифр, изображенных на картинке в искаженном виде, которые нужно ввести в определенное поле, тем самым подтвердив, что вы человек. Большинство ботов не способны распознавать данные символы, что позволяет резко уменьшить количество спама.

    [​IMG]

    В интернете существует масса различных скриптов для создания капчи. В этом уроке мы рассмотрим скрипт Cryptographp v1.4. Для этого нужно скачать исходные файлы на сайт в папку, например captcha. Теперь на той странице, где мы хотим ее видеть ее, вставляем следующий код:

    Код:
    <?php
    
    
    $cryptinstall="captcha/cryptographp.fct.php";
    include $cryptinstall; 
    ?>
    <form action="verifier.php?<?php echo SID; ?>" method="post">
    <?php dsp_crypt(0,1); ?>
    Введите код:
    <input type="text" name="code">
    
    <input type="submit" name="submit" value="Проверить">
    </form>
    В переменной $cryptinstall прописывается путь до файла cryptographp.fct.php. Поскольку этот файл работает на сессиях, то подключать его надо в самом начале страницы до начала, какого либо html кода. Обновив страницу с этим кодом, мы должны увидеть картинку с капчей, которую можно обновлять без перезагрузки страницы. Теперь на стороне обработчика (в нашем случае это verifier.php), обрабатывающего комментарии вставляем код:


    Код:
    <?php 
    $cryptinstall="captcha/cryptographp.fct.php";
    include $cryptinstall; 
    if (chk_crypt($_POST['code'])){ 
    echo "<a><font color='#009700'>=> Код введен правильно!</font></a>";
    }
    else {
    echo "<a><font color='#FF0000'>=> Ошибка! Неправильный код</font></a>";
    }
    ?>
    Вместо текста «Код введен правильно!» вы подставляете свои действия по добавлению комментариев в базу, ну и вместо ошибки также можно подставить, что то свое. По идее скрипт уже должен начать работать и проверять правильность введенных символов.
    Теперь немного поговорим, как данный скрипт можно настроить под себя. Для этого откроем файл cryptographp.cfg.php, в котором содержатся основные настройки. Переменные $cryptwidth и $cryptheight содержат значение ширины и высоты создаваемого изображения соответственно. В переменной $bgimg можно указать путь до фонового изображения капчи, если ничего не указывать, то будет фон белый или серый в соответствии от значений $bgR, $bgG и $bgB. Чуть ниже есть переменные $tfont[], которые содержат различные шрифты. Убрав комментарии со строк, вы можете выбрать тот шрифт подходящий вам. $charnbmin и $charnbmax содержат минимальное и максимальное число символов на картинке (меняя эти параметры, не забывайте про длину создаваемого изображения, что бы все символы влезали). В $charspace хранится значение интервала между символами в пикселях. Переменные $charsizemin и $charsizemax это минимальный и максимальный размер символов. Изменяя $charanglemax можно разворачивать символы на угол до 360 градусов. Переменная $cryptformat хранит формат создаваемого изображения (png, gif или jpg).


    Если создаваемая картинка не подходит под ваш дизайн, вы можете скачать с сайта разработчика http://www.captcha.fr/index.php?page=4&langue=en файл cryptographp.cfg.php и заменить существующий.
  12. TopicStarter Overlay

    sa64ka Пользователи

    Сообщения:
    10
    Лайки:
    6
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    mr-glonin
    Активация зарегистрированных пользователей по E-mail

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

    Для того чтобы на сайте не регистрировались все подряд кому не лень мы добавим активацию пользователей по E-mail. Сразу после регистрации на почту будет высылаться письмо с ссылкой для подтверждения, и только после перехода по ней пользователь сможет войти на сайт.
    Для этого нам понадобится добавить одно поле в базу данных в таблицу users:

    [​IMG]

    Это поле activation с типом int(1), которое будет принимать значения 0 – не активирован, или 1 – активирован. По умолчанию в этом поле будет 0 и после того как пользователь подтвердит по ссылке в письме что это он, оно изменит значение на 1. Для этого в файле verification.php добавим функцию отправки письма

    Код:
    $activ = mysql_query("SELECT id FROM users WHERE login='$login'");
    $id_activ = mysql_fetch_array($activ);
    $activation = md5($id_activ['id']);
    $subject = "Подтверждение регистрации";
    $message = "Здравствуйте! Спасибо за регистрацию на сайте www.MySite.ru\nВаш логин: ".$login."\n Для того чтобы войти в свой аккуант его нужно активировать.\n
    Чтобы активировать ваш аккаунт, перейдите по ссылке:\n
    http://www.MySite.ru/activation.php?login=".$login."&act=".$activation."\n\n
    С уважением, Администрация сайта www.MySite.ru";//содержание сообщение
    mail($email, $subject, $message, "Content-type:text/plane; Charset=windows-1251\r\n");
    
    echo "На Ваш E-mail выслано письмо с cсылкой, для активации вашего аккуанта. <a href='index.php'>Главная страница</a></p>";
    В этом коде мы достали id только что зарегистрированного пользователя и зашифровав в md5 отправили в ссылке по E-mail. Теперь пользователь перейдя по этой ссылке попадает на страницу activation.php, на которой будет сравниваться генерированный id и id полученный в письме.

    Код:
    <?php 
    include("bd.php");
    if(isset($_GET['act']) AND isset($_GET['login'])) {
    $act = $_GET['act'];
    $act = stripslashes($act);
    $act = htmlspecialchars($act);
    
    $login = $_GET['login'];
    $login = stripslashes($login);
    $login = htmlspecialchars($login);
    }
    else{
    exit("Вы зашил на страницу без кода подтверждения!");
    }
    
    $activ = mysql_query("SELECT id FROM users WHERE login='$login'"); //извлекаем идентификатор пользователя с данным логином
    $id_activ = mysql_fetch_array($activ); 
    $activation = md5($id_activ['id']);
    if ($activation == $act) {//сравниваем полученный из url и сгенерированный код
    mysql_query("UPDATE users SET activation='1' WHERE login='$login'");
    echo "Ваш аккуант <strong>".$login."</strong> успешно активирован! Теперь вы можете зайти на сайт под своим логином и паролем!<br><a href='index.php'>Главная страница</a>";
    }
    else {
    echo "Ошибка! Ваш аккуант не активирован. Обратитесь к администратору.<br><a href='index.php'>Главная страница</a>";
    }
    ?>
    Если id совпадают, то мы в поле activation ставим 1, что означает подтверждение регистрации. Отлично теперь нужно немного изменить код страницы входа, чтобы входить могли только активированные пользователи. Для этого в файле login.php исправим строку

    Код:
    $user = mysql_query("SELECT id FROM users WHERE login='$login' AND password='$password'");
    На

    Код:
    $user = mysql_query("SELECT id FROM users WHERE login='$login' AND password='$password' AND activation='1'");
  13. TopicStarter Overlay

    sa64ka Пользователи

    Сообщения:
    10
    Лайки:
    6
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    mr-glonin
    Как PHP внедряется в HTML документ.

    Язык PHP очень прост и популярен, потому что все команды, написанные на нем, просто вставляются в обычный HTML-код и Вам не нужно создавать никаких отдельных приложений. Все что вам потребуется это изменить расширение вашей странички с .html на .php. Так как PHP вставляется в обычный HTML документ, требуется обозначать эти команды, чтобы интерпретатор PHP мог определить начало и конец участка HTML-кода, содержащего PHP-скрипт. Для этого применяются следующие теги:

    Код:
    <? Скрипт ?>
    <?php Скрипт ?>
    <script type="php">Скрипт</script>
    Самым распространенным является первый и второй варианты. Теперь все что заключено между этими тегами будет считаться PHP-скриптом. Когда PHP обрабатывает файл, он просто передаёт его текст, пока не встретит один из специальных тегов, который сообщает ему о необходимости начать интерпретацию текста как кода PHP. Затем он выполняет весь найденный код до закрывающего тега, говорящего интерпретатору, что далее снова идет просто текст. Этот механизм позволяет вам внедрять PHP-код в HTML и все, что находится за пределами тегов PHP, остается неизменным. Поэтому этот язык веб программирования является очень удобным и простым в использовании.




    Создаем наш первый PHP-скрипт

    Для того чтобы создаем наш первый PHP-скрипт, потребуется создать файл с расширением .php, например index.php. В нем напишем основные теги HTML и вставим первый простую функцию, написанную на PHP, которая будет выводить обычный текст:


    Код:
    <html>
    <head>
    <title>Тестируем PHP</title>
    </head>
    <body>
    <?php echo "Мой первый PHP-скрипт"; ?>
    </body>
    </html>
    Функция echo выводит данные на экран. В конце каждого функции ставится точка с запятой. Обратившись к этому файлу через браузер, Вы должны увидеть «Мой первый PHP-скрипт». Если Вы посмотрите исходный код страницы, то увидите, что это обычный HTML код. То есть PHP обрабатывает наши команды на сервере и возвращает нам его результат. Так же с помощью echo можно выводить и HTML код, но есть одна особенность, о которой поговорим поподробнее. Дело в том, что этот код может содержать двойные кавычки и если интерпретатор встречает их, то он считает, что здесь заканчиваются открытые кавычки и поэтому, то, что будет идти после них, вызовет ошибку. Чтобы такой проблемы не возникало нужно двойные кавычки экранировать при помощи слеша либо использовать одинарные:

    Код:
    <?php echo "<div width=\"200\">Текст</div>"; ?>
    //Или так
    <?php echo "<div width='200'>Текст</div>"; ?>
    Также для вывода на экран служат другие операторы такие как: print, printf().

    Переменные в PHP

    Как и во всех языках программирования в PHP существует переменные, которым можно присваивать данные и оперировать ими. В PHP переменные обозначаются значком доллара $, и выглядят примерно так $а или $peremennaya. Чтобы создать переменную не нужно дополнительно их объявлять, мы просто пишем ее и присваиваем ей какое-нибудь значение:

    Код:
    <?php  
    $а = "Привет";
    $peremennaya = 7;
    ?>
    В этих строчках мы присвоили переменной a значение Привет, а переменой peremennaya значение 7. Вы наверно заметили, что слово привет заключено в кавычки, а цифра 7 нет. Просто в PHP все текстовые данные должны заключаются в кавычки, иначе это вызовет ошибку, а числовые допускается писать без кавычек, но если вы их поставите, то ничего страшного не произойдет. Так же не путайте, знак = в PHP обозначает присвоение, а не равенство. Когда мы присвоили переменным значения мы можем вывести их на экран или занести в базу данных.

    В заключении хотелось бы сказать одно важное замечание о том, что все переменные в PHP не должны начинаться с цифр. В качестве примера рассмотрим правильное и ошибочное написание переменных.

    Правильно:

    Код:
    $а = "Привет";
    $peremennaya3 = 7;
    Неправильно:

    Код:
    $3а = "Привет";
    $4text = 7;



    Условия в PHP




    К условий в PHP можно отнести конструкции if(условие){Действие 1} else{Действие 2} и switch(). Поговорим поподробнее о первом. Данный конструкция проверяет условие, если оно верно, то выполняется Действие 1, если же условие не выполняется, то выполняется Действие 2. Так же возможна короткая форма записи этой конструкции if(условие){Действие 1}. То есть если условие, верно, то выполняется Действие 1, если нет, то ничего не происходит. В качестве примера рассмотрим обе формы записи:

    Код:
    <?php  
    $a = 1;
    //Полная форма условия
    if($a == '1')
    {echo "Переменная a равна 1";}
    else
    {echo "Переменная a не равна 1";}
    echo "<br>";
    //Сокращенная форма
    if($a == '1')
    {echo "Переменная a равна 1";}
    ?>
    Вначале скрипта мы присвоили переменной $a значение 1. Теперь мы проверяем, действительно ли $a равна 1. Если это так, то и в полной и в краткой форме выведется: «Переменная a равна 1». Теперь присвоим $a значение 2. Мы знаем, что теперь условие выполняться не будет и в первом случае выведется: «Переменная a не равна 1», а во втором ничего не произойдет.
    Очень часто эти конструкции вкладывают друг в друга, т.е. сначала выполняется одно условие и если оно истинно, то выполняется вложенное условие 2. Чтобы все стало понятным рассмотрим такой пример:

    Код:
    <?php  
    $a = 1;
    $c = 2;
    //Полная форма условия 
    if($a == '1')
    {
    if($c == '2')
    {echo "Переменная c равна 2 и переменная a равна 1";}
    }
    else
    {echo "Переменная a не равна 1";}
    ?>
    Используя конструкцию if(){} else{} условия могут быть не однозначными (вспомните прошлый урок про логические операторы), например такими:

    Код:
    <?php 
    $a=1;
    $c=2;
    if($a == '1' and $c == '2')
    {
    echo "Переменная c равна 2 и переменная a равна 1";
    }
    else
    {echo "Переменные неизвестны";}
    ?>
    Здесь используется логический оператор and, который означает и. Это условие сработает, если $a=1 и $c=2 одновременно. Если вместо and подставить or (или), то будет достаточно чтобы либо $a=1, либо $c=2.

    Теперь познакомимся с конструкцией switch() и разберемся, для чего она нужена. Эта конструкция может быть использована, если какая-то переменная может принимать несколько разных значений и в зависимости от этих значений должно выполняться определенное действие. Вот как она записывается:

    Код:
    <?php  
    $size = 3;
    switch($size)
    {
    case "3":
    echo "Переменная size равна 3";
    break;
    case "4":
    echo "Переменная size равна 4";
    break;
    case "5":
    echo "Переменная size равна 5";
    break;
    default :
    echo "Переменная size неизвестна";
    break;
    } 
    ?>
    Здесь мы проверяем переменную $size, которая может принимать несколько значений. Case это одно из значений и если наша переменная примет это значение, то выполняются действия идущие после двоеточия. Оператор break прерывает дальнейший поиск схожих вариантов и выходит из этой конструкции. Default – это тот случай когда не один из вариантов не подходит. Это значение может отсутствовать в это конструкции.

    Обязательно поэкспериментируйте с условиями и разберитесь, как они работают.
  14. jkpro Пользователи

    Сообщения:
    3
    Лайки:
    6
    Репутация:
    0
    Активация зарегистрированных пользователей по E-mail
    А не легче в качестве строки подтверждения выдавать зашифрованную симетричным алгоритмом шифрования все поля необходимые при регистрации, при таком варианте не подтвержденные учетные записи не будут захламлять базу
    Taras нравится это.
  15. TopicStarter Overlay

    sa64ka Пользователи

    Сообщения:
    10
    Лайки:
    6
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    mr-glonin
    Давай не умничай а выкладывай урок! и объясняй все это темя для того чтоб люди сами делали своё особенное ), а не повторяли то что в шару выкладывают!
  16. TopicStarter Overlay

    sa64ka Пользователи

    Сообщения:
    10
    Лайки:
    6
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    mr-glonin
    Администрация! перенесите тему в раздел мастерская PHP. На момент создания тему, не заметил этот раздел.
  17. roslimberg Пользователи

    Сообщения:
    24
    Лайки:
    8
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    kDesign
    mr-glonin , если копируешь что-то, то копируй и копирайты автора тоже! Тупо скопировал все с форума и прикинулся умным...
  18. ivanaivana Пользователи

    Сообщения:
    39
    Лайки:
    15
    Пол:
    Женский
    Репутация:
    4
    Команда:
    De Balance Team
    Не стал читать всю копипасту, время дорого. Но смею заметить, в самой первой не все скопировано. Где разбор bd.php? Или автор забыл файл приложить, который в оригинале был?
  19. pifagor Пользователи

    Сообщения:
    57
    Лайки:
    16
    Пол:
    Мужской
    Репутация:
    0
    все умные +сов хотят.
Черновик сохранён Черновик удалён

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