За последние 24 часа нас посетили 64012 программистов и 1740 роботов. Сейчас ищут 878 программистов ...

Посоветуйте!!!

Тема в разделе "PHP для новичков", создана пользователем TOK, 7 окт 2009.

  1. TOK

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

    С нами с:
    29 сен 2009
    Сообщения:
    36
    Симпатии:
    0
    Вообщем, мне понадобился скрипт регистрации пользователей. Решил для надёжности взять из авторитетной книги PHP5 и MySQL: Библия пользователя.

    Скопировал код для 5 файлов и получил такую проблему: Во всех скриптах выдаёт ошибку: неожиданный конец файла

    файл confirm.php
    PHP:
    1. <?php
    2. /****************************************************************
    3. *   Страница подтверждения регистрации нового пользователя.       *
    4. *   Возможность перехода на эту страницу должна обеспечиваться  *
    5. *   только с помощью ссылки, представленной в электронном     *
    6. *   письме                                                        *
    7. *****************************************************************/
    8. require_once('includes/register_funcs.inc');
    9. include_once('includes/header_footer.php');
    10. site_header('Account Confirmation');
    11. if ($_GET['hash'] && $_GET['email'])
    12. {
    13. $worked = user_confirm();
    14. }
    15. else {
    16. $feedback_str = "<P class=\"errormess\">ERROR - Bad link</P>";
    17. }
    18. if ($worked != 1)
    19. {
    20. $noconfirm = '<P class="errormess">Something went wrong. '.
    21. 'Send email to [email=admin@example.com]admin@example.com[/email] for help.  If you ' .
    22. 'through to this page directly, please go to login.php ' .
    23. 'instead. </P> ' ;
    24. }
    25. else {
    26. $confirm = ' <P class="big">You are now confirmed. <A' . 'HREF= "login.php">Log in</A> to start browsing the ' .
    27. 'site.</P>' ;
    28. }
    29. $page =<<<EOPAGE
    30. <TABLE CELLPADDING=0 CELLSPACING=0 BORDER=0 ALIGN=CENTER WIDTH=621>
    31. <TR>
    32.  <TD><IMG WIDTH=15 HEIGHT=1 SRC= .. /images/spacer.gif></TD>
    33. <TD WIDTH=606 CLASS=left>
    34. $feedback_str
    35. $noconfirm
    36. $confirm
    37. </TD> </TR> </TABLE>
    38. EOPAGE ;
    39. echo $page;
    40. site_footer();
    41. ?>
    42.  
    файл login.php

    PHP:
    1. <?php
    2. /****************************************************************
    3. * Страница регистрации. Ссылки на эту страницу имеются в      *
    4. * заголовках всех прочих страниц, которые предназначены для       *
    5. * пользователей, выходящих из системы                            *
    6. *****************************************************************/
    7. require_once ( 'includes/login_funcs.inc ' );
    8. // Если пользователь уже вошел в систему, вызвать функцию user_logout,
    9. // чтобы он вышел из системы.
    10. // Пользователь не должен иметь возможности видеть эту страницу
    11. // после того, как он вошел в систему.
    12. // Это позволяет использовать один и тот же сценарий формирования
    13. // страницы и для входа в систему, и для выхода из системы
    14.  if ($LOGGED_IN = user_isloggedin() )
    15.  {
    16. user_logout () ;
    17. $_COOKIE [ ' user_name ' ] = '';
    18. unset ($LOGGKD_IN) ;
    19. }
    20. if ($submit == 'Login')
    21. {
    22. if (strlen($_POST['username'] ) <= 20 && strlen ($_POST[ 'password'] ) <=20)
    23. {
    24. $feedback = user_login () ;
    25. }
    26. else
    27. {
    28. $feedback = 'ERROR - Username and password are too long';
    29. }
    30. if ($feedback == 1)
    31. {
    32. // После успешного входа пользователя в систему перенаправить
    33. // его на начальную страницу
    34. header ( "Location: index.php") ;
    35. } else
    36. {
    37. $feedback_str = "<P class=\"errormess\">$feedback</P>" ;
    38. }
    39. } else
    40. {
    41. $feedback_str = '';
    42. }
    43. //------------------------
    44. // Вывести на экран форму
    45. //------------------------
    46. include_once ( 'includes/header_footer.php');
    47. site_header ( 'Login' );
    48. // В сочетании с вложенным документом не могут использоваться
    49. //  суперглобальные  массивы
    50. $php_self   =  $_SERVER['PHP_SELF'];
    51. $login_form  =<<< EOLOGINFORM
    52. <TABLE   CELLPADDING=0   CELLSPACING=0   BORDER=0   ALIGN=CENTER WIDTH=621>
    53. <TR>
    54. <TD   ROWSPAN=2><IMG  WIDTH=15   HEIGHT=1 SRC= . ./images/spacer .gif></TD>
    55. <TD  WIDTH=606   HEIGHT=l><IMG  WIDTH=606   HEIGHT=1 SRC=. . /images/spacer.gif></TD>
    56. </TR> <TR> <TD>
    57. $feedback_str
    58. <P CLASS="bold">LOGIN</P>
    59. <FORM  ACTION="$php_self"   METHOD="POST">
    60. <P CLASS="bold">Username<BR>
    61. <INPUT  TYPE="TEXT"   NAME="user_name"   VALUE=""   SIZE="10" MAXLENGTH="15"></P>
    62. <P CLASS="bold">Password<BR>
    63.  <INPUT  TYPE="password"   NAME="password"   VALUE=""   SIZE="10" MAXLENGTH="15"></P >
    64. <P><INPUT  TYPE="SUBMIT"   NAME="submit"   VALUE="Login"></P>
    65. </FORM>
    66. </TD>
    67.  </TR>
    68.  </TABLE>
    69. EOLOGINFORM;
    70. echo  $login_form;
    71. site_footer();
    72. ?>

    файл login_funsc.inc
    PHP:
    1.  <?php
    2. // Файл с данными о хосте базы данных, пользователе, пароле
    3. // и выбранной базе данных
    4. include_once ( 'includes/db_vars.inc ' );
    5. //   Строка,   применяемая  для  шифрования  по   алгоритму md5 .   Эту  строку
    6. //  можно  переместить   в  файл,   находящийся   за  пределами дерева
    7. //  Web-каталогов,   для  обеспечения   более   надежной  защиты
    8. $supersecret_hash_padding = 'A string  that  is used to pad1'  . 'out  short  strings  for md5  encryption.';
    9. $LOGGED_IN = false;
    10. unset ($LOGGED_IN) ;
    11. function user_isloggedin ()
    12. {
    13. // Эта функция может работать только с суперглобальными массивами,
    14. // поскольку в нее не передаются какие-либо значения и не
    15. // объявляются глобальные переменные
    16. global $supersecret_hash_padding, $LOGGED_IN;
    17. // Если проверки хэшированных значений уже были выполнены,
    18. // возвратить заранее заданное значение переменной
    19. if (isSet ($LOGGED_IN) )    
    20. {
    21.  return  $LOGGED_IN;
    22. }
    23. if ($_COOKIE['user_name'] && $_COOKIE [ ' id_hash' ] )
    24. {
    25. $hash = md5 ( $_COOKIE [ ' user_name ' ] .$supersecret_hash_padding) ;
    26. if ($hash == $_COOKIE [ ' id_hash' ] )
    27. {
    28. return true;
    29. }
    30. else
    31. {
    32. return false;
    33. }
    34. }
    35. else
    36. {
    37. return false;
    38. }
    39. }
    40. function user_login()   {
    41. // Эта функция может работать только с суперглобальными массивами,
    42. // поскольку в нее не передаются какие-либо значения и не
    43. // объявляются глобальные переменные
    44. if   (!$_POST['user_name']    ||    !$_POST['password'])   {
    45. $feedback =   'ERROR  -  Missing username or password';
    46. return  $feedback; }   else   {
    47. $user_name  =  strtolower($_POST['user_name']);
    48.  
    49. // Усечение пробелов не требуется, поскольку обнаружение лишних
    50. // пробелов так или иначе приведет к аварийному завершению.
    51. // Применение функции асйзХазпез не требуется, поскольку
    52. // одинарные кавычки не допускаются
    53. $password = strtolower($_POST['password1']);
    54. // Применение функции асМзЗ-азпез не требуется, поскольку данная
    55. // строка преобразуется в хэшированное значение
    56. $crypt_pwd = md5($password);
    57. $query = "SELECT user_name, is_confirmed
    58. FROM user
    59. WHERE user_name = '$user_name'
    60. AND password='$crypt_pwd'";
    61. $result = mysql_query ($query);
    62. if (!$result || mysql_num_rows($result) < 1)
    63. {
    64. $feedback = 'ERROR - User not found or password' . 'incorrect';
    65. return $feedback;
    66. }
    67. else
    68. {
    69. if (mysql_result($result, 0, 'is_confirmed') == '1')
    70. {
    71. user_set_tokens($user_name);
    72. return 1;
    73. }
    74. else
    75. {
    76. $feedback = 'ERROR - You may not have confirmed ' .'your account yet';
    77. return $feedback;
    78. }
    79. }
    80. }
    81. }
    82. function user_logout()
    83.  {
    84. setcookie('user_name', '', (time()+2592000), '/', '', 0);
    85. setcookie('id hash', '', (time()+2592000) , '/', '', 0);
    86. }
    87. function user_set_tokens($user_name_in)
    88. {
    89. global $supersecret_hash_padding;
    90. if (!$user_name_in)
    91. {
    92. $feedback =  'ERROR - No username';
    93. return false;
    94. }
    95. $user_name = strtolower($user_name_in);
    96. $id_hash = md5($user_name.$supersecret_hash_padding);
    97. setcookie('user_name', $user_name, (time()+2592000) , '/', '',0);
    98. setcookie('id hash', $id_hash, (time () +2592000) , '/', '', 0) ;
    99. ?>
    файл register.php

    PHP:
    1. <?php
    2. /**************************************************************
    3. * Страница регистрации нового пользователя. Ссылки на эту     *
    4. * страницу имеются в заголовках всех прочих страниц, которые  *
    5. * предназначены для пользователей, выходящих из системы и     *
    6. * входящих в систему. Тем не менее в проекте узла могут        *
    7. * обнаруживаться дефекты; вполне возможно, что будет решено      *
    8. * предоставлять доступ к этой странице только для            *
    9. * посетителей, которые еще не вошли в систему                 *
    10. ***************************************************************/
    11. require_once ( 'includes/register_funcs.inc ' ) ;
    12. if  ($submit  ==   'Mail  confirmation')  
    13. {
    14. $feedback  = user_register() ;
    15. // Обратная связь должна быть обеспечена в любом случае,
    16. // будь то успех или неудача
    17. $feedback_str = "<P class=\"errormess\">$feedback</P>";
    18. }
    19. else
    20. {
    21. //-----------------------
    22. // Вывести на экран форму
    23. //-----------------------
    24. include_once('includes/header_footer.php');
    25. site_header('Registration');  
    26. //  В  сочетании  с  вложенным документом не  могут  использоваться
    27. //   суперглобальные  массивы
    28. $_SERVER['PHP_SELF'];
    29. $reg_str = <<<EOREGSTR
    30.  
    31. <TABLE CELLPADDING=0 CELLSPACING=0 BORDER=0 ALIGN=CENTER WIDTH=621>
    32. <TR>
    33. <TD ROWSPAN=10 <IMG WIDTH=15 HEIGHT=1 SRC="../images/spacer.gif"></TD>
    34. <TD WIDTH=606> </TD>
    35. </TR>
    36. <TR>
    37. <TD>
    38. $feedback_str
    39. <P CLASS="left"><B>REGISTER</B><BR>
    40. Fill out this form and a confirmation email will be sent to you.
    41. Once you click on the link in the email your account will be
    42. confirmed and you can begin to contribute to the community.</P>
    43. <FORM ACTION="$php_self" METHOD="POST">
    44. <P CLASS="bold">First Name<BR>
    45. <INPUT TYPE="TEXT" NAME="first_name" VALUE="$first_name" SIZE="20" MAXLENGTH="25">
    46. </P>
    47. <P CLASS="bold">Last Name<BR>
    48. <INPUT TYPE="TEXT" NAME="last_name" VALUE="$last_name" SIZE="20" MAXLENGTH="2 5">
    49. </P >
    50. <P CLASS="bold">Username<BR>
    51. <INPUT TYPE="TEXT" NAME="user_name" VALUE="$user_name" SIZE="10" MAXLENGTH="2 5">
    52. </P >
    53. <P CLASS="bold">Password<BR>
    54. <INPUT TYPE="password" NAME="passwordl" VALUE="" SIZE="10" MAXLENGTH= "25 " >
    55. </P>
    56. <P CLASS="left"><B>Password</B> (again)<BR>
    57. <INPUT TYPE="password" NAME="password2" VALUE="" SIZE="10" MAXLENGTH= "25"></P>
    58. <P CLASS="left"><B>Email</B>   (required for confirmation)<BR>
    59.  <INPUT TYPE="TEXT"   NAME="email"  VALUE="$email"   SIZE="30" MAXLENGTH="50">
    60.  </P>
    61.  <P>
    62.  <INPUT  TYPE="SUBMIT"   NAME="submit" VALUE="Mail confirmation">
    63.  </P>
    64.  </FORM>
    65.  </td>
    66.  </tr>
    67.  </table>
    68.  EOREGSTR;
    69.  echo $reg_str;
    70.  site_footer();
    71. ?>
    72.  
    файл register_funcs.inc
    PHP:
    1. <?php
    2. // Файл с данными о хосте базы данных, пользователе, пароле
    3. // и выбранной базе данных
    4. include_once ( 'includes/db_vars.inc' ) ;
    5. // Строка, применяемая для шифрования по алгоритму md5 . Эту строку
    6. // можно переместить в файл, находящийся за пределами дерева
    7. // Web-каталогов для обеспечения более надежной защиты
    8. $supersecret_hash_padding = 'A string that  is  used to pad out
    9. short  strings  for mds  encryption. ';
    10.  function user_register ()
    11. {
    12. //  Эта функция может работать  только  с  суперглобальными массивами,
    13. //  поскольку  в   нее   не  передаются   какие-либо  значения  и не
    14. //  объявляются  глобальные переменные
    15. global  $supersecret_hash_padding;
    16. //  Проверить,   заданы ли все  значения и совпадают ли пароли
    17. if(strlen($_POST['user_name'] ) <=  20   &&
    18. strlen($_POST['passwordl'] ) <=  20  &&   ($_POST [ 'passwordl ' ] == $_POST[ 'password2 ' ] )
    19. && strlen ($_POST [' email ']) <=  50 && validate_email ($_POST [' email '] ) )
    20. {
    21. // Проверить имя пользователя и пароль
    22. if (account_namevalid ($_POST [ 'user_name ' ] ) ||
    23. strlen ($_POST[ 'passwordl '] >= 6) )
    24. {
    25. $user_name = strtolower ($_POST [ 'user_name ' ] ) ;
    26. $user_name = trim ($user_name);
    27. // Применение символов переключения не требуется, поскольку
    28. // одинарные кавычки не допускаются
    29. $email = $_POST [' email '];
    30. // Использование дублирующих имен пользователей или адресов
    31. // электронной почты не разрешено
    32. $query = "SELECT user_id
    33. FROM user
    34. WHERE user_name = ' $user_name '
    35. AND email = ' $email ' " ;
    36. $result = mysql_query ($query) ;
    37. if ($result && mysql_num_rows ($result) > 0)
    38. {
    39. $feedback = 'ERROR - Username or email address already
    40. exists ' ;
    41. return $feedback;
    42. }
    43. else
    44. {
    45. $first_name = $_POST [ ' f irst_name ' ] ;
    46. $last_name = $_POST [ ' last_name ' ] ;
    47. $password = md5 ( $_POST [ ' passwordl ' ] ) ;
    48. $user_ip = $_SERVER [ ' REMOTE_ADDR ' ] ;
    49. //   Создать   новое  хэшированное   значение  для  вставки
    50. //  в  базу данных и подготовить  письмо  с  подтверждением
    51. $hash = md5 ($email . $supersecret_hash_padding);
    52. $query = "INSERT INTO user (user_name, first_name,
    53. last_name, password, email, remote_addr, conf irm_hash,
    54. is_conf irmed, date_created)
    55. VALUES ( ' $user_name ' , ' $f irst_name ' , ' $last_name ' ,
    56. '$password', '$email', '$user_ip', '$hash', '0',
    57. NOW ( ) ) " ;
    58. $result = mysql_query ($query) ; if (!$result)
    59. {
    60. $feedback = 'ERROR - Database error';
    61. return $fsedback;
    62. }
    63. else
    64. {
    65. //  Передать  письмо  с  подтверждением
    66. $encoded_email = urlencode ($_POST [ ' email ' ] ) ;
    67. $mail_body = <<<EOMAILBODY
    68.  
    69. Thank you for registering at Example.com. Click this link o confirm your registration:
    70. [url=http://localhost/conf]http://localhost/conf[/url] irm.php?hash=$hash&email=$encoded_email
    71. Once you see a confirmation message, you will be logged into Example .com
    72. EOMAILBODY;
    73. mail ($email, 'Example.com Registration Confirmation1', $mail_body, 'From: [email=noreply@example.com]noreply@example.com[/email]');
    74. // Предоставить пользователю сообщение об успешной регистрации
    75. $feedback = 'YOU HAVE SUCCESSFULLY REGISTERED. You will receive a confirmation email soon';
    76. return $feedback;
    77.        }
    78.  }
    79. }
    80. else {
    81. $feedback =  ' ERROR - Username or password is invalid';
    82. return $feedback;
    83.        }
    84.       }
    85. else {
    86. $feedback = 'ERROR - Please fill in all fields correctly';
    87. return $feedback;
    88. }
    89. }
    90. function account_namevalid() {
    91. // Параметр, предназначенный для использования с функцией strspn
    92. $span_str =   "abcdefghijklmnopqrstuvwxyz"   .
    93. "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789- " ;
    94. // Должен быть задан по меньшей мере один символ
    95. if (strspn ($_POST [ 'user_name' ] , $span_str) ==  0)  
    96. {
    97.     return false;
    98. }
    99. // В строке должны находиться только допустимые символы  
    100. if (strspn ($_POST[ ' user_name ' ], $span_str) != strlen($name)) { return false;
    101. }
    102. // Проверка требований к минимальной и максимальной длине
    103. if (strlen ($_POST[ ' user_name' ] ) < 5) { return false;
    104. }
    105. if (strlen($_POST[ 'user_name'] ) > 25) { return false;
    106. }
    107. // Недопустимые имена
    108. if
    109. (eregi ("A ( (root) | (bin) | (daemon) | (adm) | dp) | (sync) | (shutdown) (halt) | (mail) |
    110. (news) | (uucp) | (operator) | (games) | (mysql) ) (httpd) | (nobody) | (dummy) | (www) |
    111. (cvs) | (shell) | (ftp) | (ire) | (debian) | (ns) | (download) )$", $_POST [ 'user_name ' ] ) )
    112. { return false;
    113. }
    114. if (eregi ("A (anoncvs_) ", $_POST [ 'user_name ' ] ) ) { return false;
    115. }
    116. return true;
    117. }
    118. function validate_email () {
    119. return (ereg ('^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+'. '@'. '[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.' . '[- ! #$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$',
    120. $_POST[' email '] ) ) ;
    121. function user_confirm () {
    122. // Эта функция может работать только с суперглобальными массивами,
    123. // поскольку в нее не передаются какие-либо значения и не
    124. // объявляются глобальные переменные global  $supersecret_hash_padding;
    125. // Проверить, не предпринималась ли попытка сфальсифицировать адрес
    126. // электронной почты
    127. $new_hash = md5($_GET['email'].$supersecret_hash_padding);
    128. if ($new_hash && ($new_hash == $_GET['hash1'])) {
    129. $query = "SELECT user_name
    130.           FROM user
    131.           WHERE confirm_hash = '$new_hash'";
    132. $result = mysql_query($query);
    133. if (!$result || mysql_num_rows($result) < 1)
    134. {
    135. $feedback = 'ERROR - Hash not found';
    136. return $feedback;
    137. }
    138. else
    139. {
    140. // Подтвердить получение письма по электронной почте
    141. // и перевести учетную запись в активное состояние
    142. $email = $_GET['email'];
    143. $hash = $_GET['hash'];
    144. $query = "UPDATE user SET email='$email', is_confirmed='1' WHERE confirm_hash='$hash'";
    145. $result = mysql_query($query);
    146. return 1;
    147. }
    148. }
    149. else
    150. {
    151. $feedback = 'ERROR - Values do not match1; return $feedback';
    152. return $feedback;
    153. }
    154. }
    155. ?>
    Второй вопрос: к некоторым файлам подключаются другие файлы через
    include_once ( 'includes/db_vars.inc' ) ;
    include_once('includes/header_footer.php');
    если с первым всё обьяснили, то про второй молчат на протяжении всей разработки примера. В книге его нет. Что это за безобразие?

    ЗЫ. Если знаете хороший скрипт регистрации, подскажите где взять. Мне можно без наворотов, но так чтобы не взломал первый встречный:)
     
  2. admyx

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

    С нами с:
    14 мар 2008
    Сообщения:
    2.159
    Симпатии:
    1
    А перезалить?
     
  3. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    На счет скрипта... Здесь на форуме где-то пара реализаций есть. =)
     
  4. Phantik

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

    С нами с:
    2 июл 2009
    Сообщения:
    163
    Симпатии:
    0
    Когда используешь запись HEREDOC то не должно присутствовать никаких лишних символов (включая пробелы) в местах:

    Код (Text):
    1.  
    2. ... <<<MYLABEL
    3.  
    4. .......
    5. Некий текст
    6. .......
    7.  
    8. MYLABEL;
    1) Между <<< и MYLABEL нету никаких символов
    2) После <<<MYLABEL не должно быть никаких символов только "Enter"(перевод строки)
    3) Перед нижним MYLABEL не должно быть никаких символов. И после закрывающейся метки может идти ; и Enter(перевод строки).
     
  5. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    PHP:
    1. <?php
    2. /**
    3.  * @copyright Vasilii B. Shpilchin (c)2009
    4.  * @version 0.9b
    5.  * @name Spirit Registration
    6.  */
    7.  
    8. class registration
    9. {
    10.         public $header = 'top';
    11.         public $mainmenu = 'left';
    12.         public $userblock = 'left';
    13.         public $footer = 'bottom';
    14.        
    15.         private $errors = array(); // Аккомулятор ошибок
    16.        
    17.         public function __construct()
    18.         {
    19.                 if (isset($_POST['registration']))
    20.                 {
    21.                         if (!isset($_POST['name']) || empty($_POST['name']))
    22.                         {
    23.                                 $this -> errors[] = 'Не заполнено имя';
    24.                         }
    25.                         if (!isset($_POST['password']) || empty($_POST['password']))
    26.                         {
    27.                                 $this -> errors[] = 'Не заполнен пароль';
    28.                         }
    29.                         if (!isset($_POST['password2']) || empty($_POST['password2']))
    30.                         {
    31.                                 $this -> errors[] = 'Не заполнено подтверждение пароля';
    32.                         }
    33.                         if (isset($_POST['password']) && isset($_POST['password']) && $_POST['password'] !== $_POST['password2'])
    34.                         {
    35.                                 $this -> errors[] = 'Пароль и подтверждение не совпадают';
    36.                         }
    37.                         if (!isset($_POST['email']) || empty($_POST['email']))
    38.                         {
    39.                                 $this -> errors[] = 'Не указан e-mail';
    40.                         }
    41.                         if (isset($_POST['email']) && !true_email($_POST['email']))
    42.                         {
    43.                                 $this -> errors[] = 'Введеный e-mail некорректен';
    44.                         }
    45.                         $query = 'SELECT `id` FROM `users` WHERE `name` = \''.mysql_real_escape_string($_POST['name']).'\'';
    46.                         $query .= ' or `email`=\''.mysql_real_escape_string($_POST['email']).'\';';
    47.                         $result = spirit::select_array($query);
    48.                         if (!empty($result[0]['id']))
    49.                         {
    50.                                 $this -> errors[] = 'Пользователь с таким именем или email уже существует';
    51.                         }
    52.                        
    53.                         if (!empty($this -> errors))
    54.                         {
    55.                                 $add['errors'] = $this -> errors;
    56.                                 $this -> content = spirit::parse_dynamic_template('register_start', false, $add);
    57.                         }
    58.                         else
    59.                         {
    60.                                 $name = htmlspecialchars($_POST['name']);
    61.                                 $password = md5(mysql_real_escape_string($_POST['password']));
    62.                                 $email = mysql_real_escape_string($_POST['email']);
    63.                                 $group = 'inactive';
    64.                                 $query = 'INSERT INTO `users` (`name`,`password`,`group`,`email`) VALUES (\''.$name.'\', \''.$password.'\',\''.$group.'\',\''.$email.'\');';
    65.                               # $this -> send_mail($email, $name);
    66.                                spirit::query($query);
    67.                                 $vars = array('NAME' => $name, 'EMAIL' => $email);
    68.                                 $this -> content = spirit::parse_static_template('register_success', $vars);
    69.                         }
    70.                 }
    71.                 elseif (isset($_GET['code']))
    72.                 {
    73.                         list($email, $code) = explode("\n", base64_decode($_GET['code']));
    74.                         $query = 'SELECT `name` FROM `users` WHERE `email`=\''.mysql_real_escape_string($name).'\';';
    75.                         $result = spirit::select_array($query);
    76.                         if (empty($result) || $code !== substr(base64_decode(md5($result['name']).md5($email)), 32, 32))
    77.                         {
    78.                                 spirit::service_msg('Неверно указан код подтверждения.', 'Регистрация:');
    79.                         }
    80.                         else
    81.                         {
    82.                                 $query = 'UPDATE `users` SET `group`=\'users\' WHERE `email`=\''.$email.'\';';
    83.                                 spirit::query($query);
    84.                                 $vars = array('NAME' => $name, 'EMAIL' => $email);
    85.                                 $this -> content = spirit::parse_static_template('register_finish', $vars);
    86.                         }
    87.                 }
    88.                 else
    89.                 {
    90.                         $this -> content = spirit::parse_dynamic_template('register_start');
    91.                 }
    92.         }
    93.        
    94.         private function send_mail($email, $name)
    95.         {
    96.                 $link = cfg::SITE_URL.'?run=registration&code='.base64_encode($email."\n".substr(base64_encode(md5($name).md5($email)), 32, 32));
    97.                 $text = "Уважаемый $name!\r\nВы зарегестрировались на сайте ".spirit::SITE_NAME.", но прежде, чем Вы начнете пользоваться сайтом, Вы должны активировать свой e-mail";
    98.                 $text .= " перейдя по ссылке:\r\n$link\r\n\r\nАдминистрация.";
    99.                 $from = cfg::ADMIN_EMAIL;
    100.                 $subject = cfg::SITE_NAME;
    101.                 if (!send_mail($from, $to, $subject, $text))
    102.                 {
    103.                         spirit::service_msg('Отправка письма не удалась. Попробуйте позже.');
    104.                 }
    105.         }
    106. }
    107. ?>
     
  6. dots_rei

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

    С нами с:
    7 авг 2009
    Сообщения:
    193
    Симпатии:
    0
    файл хедер_футер - это файл, содержащий оформление страницы.

    по ссылке http://archive.dialektika.com/cgi-bin/m ... 459-1022-6 доступны все листинги из книги. а для авторизации-регистрации там есть также файлы, которых в книге нет, тот же хедер_футер

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

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

    С нами с:
    29 сен 2009
    Сообщения:
    36
    Симпатии:
    0
    Я буду премного благодарен, если выложите рабочую версию и спасибо за ссылку.
     
  8. hairov@inbox.ru

    hairov@inbox.ru Активный пользователь

    С нами с:
    9 окт 2009
    Сообщения:
    4
    Симпатии:
    0
    Короткий вопрос

    Есть база данных, есть страница с записями и есть интерфейс для удаления записей с вопросом "удалить?" вынесенный на отдельную страницу. Подскажите как после нажатие кнопки "удалить" осуществить автоматически переход на страницу всех записей.
     
  9. karakh

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

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    action формы с этой кнопкой никак нельзя вынести на страницу всех записей? Если нельзя, то банальный редирект посылкой хедера
     
  10. TOK

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

    С нами с:
    29 сен 2009
    Сообщения:
    36
    Симпатии:
    0
    PHP:
    1.  
    2. <?php
    3.  function mail_send($name_from,$email_from,$name_to,$email_to,$data_charset,$send_charset,$subject,$body,$links)
    4.  {
    5.  /*$name_from, // èìÿ îòïðàâèòåëÿ
    6.  $email_from, // email îòïðàâèòåëÿ
    7.  $name_to, // èìÿ ïîëó÷àòåëÿ
    8.  $email_to, // email ïîëó÷àòåëÿ
    9.  $data_charset, // êîäèðîâêà ïåðåäàííûõ äàííûõ
    10.  $send_charset, // êîäèðîâêà ïèñüìà
    11.  $subject, // òåìà ïèñüìà
    12.  $body // òåêñò ïèñüìà
    13.  */
    14.  $to=mail_mime_header_encode($name_to, $data_charset, $send_charset).' <'.$email_to.'>';
    15.  $subject = mail_mime_header_encode($subject, $data_charset, $send_charset);
    16.  $from =  mail_mime_header_encode($name_from, $data_charset, $send_charset).' <'.$email_from.'>';
    17.  if($data_charset != $send_charset)
    18.      {
    19.      $body=iconv($data_charset, $send_charset, $body);
    20.      }
    21.  $body=$body.$links;
    22.  return mail($to, $subject, $body, 'From: '.$from);
    23.  }
    24.  
    25.  function mail_mime_header_encode($str, $data_charset, $send_charset)
    26.  {
    27.  if($data_charset != $send_charset)
    28.      {
    29.      $str=iconv($data_charset, $send_charset, $str);
    30.        }
    31.  return '=?'.$send_charset.'?B?'.base64_encode($str).'?=';
    32.  }
    33.  
    34.  function user_register() {
    35.    global $supersecret_hash_padding;
    36.  
    37.    if (strlen($_POST['user_name']) >= 5 && strlen($_POST['user_name']) <= 25 && strlen($_POST['password1']) <= 25 && strlen($_POST['password1'])>0 && ($_POST['password1'] == $_POST['password2']) && strlen($_POST['email']) <= 50 && validate_email($_POST['email'])) {
    38.        if(isset($_SESSION['captcha_keystring']) && ($_SESSION['captcha_keystring'] == $_POST['keystring']))
    39.      {
    40.          unset($_SESSION['captcha_keystring']);
    41.      }
    42.      else
    43.      {
    44.          $feedback='Âû ââåëè íåïðàâèëüíûé êîä. Ïîïðîáóéòå åùå ðàç.<br />';
    45.          unset($_SESSION['captcha_keystring']);
    46.          return $feedback;
    47.      }
    48.      if (account_namevalid($_POST['user_name']) || strlen($_POST['password1'] >= 6)) {
    49.  
    50.        $user_name = strtolower($_POST['user_name']);
    51.        $user_name = trim($user_name);
    52.        $email= $_POST['email'];
    53.        $query = "SELECT userid
    54.                 FROM user
    55.                 WHERE username = '$user_name'
    56.                 OR email = '$email'";
    57.        $result = mysql_query($query);
    58.        if ($result && mysql_num_rows($result) > 0) {
    59.          $feedback = 'Îøèáêà - èìÿ ïîëüçîâàòåëÿ èëè email óæå ñóùåñòâóåò.';
    60.          return $feedback;
    61.        } else {
    62.      $first_name = $_POST['first_name'];
    63.      $last_name = $_POST['last_name'];
    64.      $password = md5($_POST['password1']);
    65.      $user_ip = $_SERVER['REMOTE_ADDR'];
    66.          $hash = md5($email.$supersecret_hash_padding);
    67.  
    68.          $query = "INSERT INTO user (userid, username, firstname, lastname, password, email, remoteaddr, confirmhash, isconfirmed, datecreated)
    69.                   VALUES (NULL, '$user_name', '$first_name', '$last_name', '$password', '$email', '$user_ip', '$hash', 0, NOW())";
    70.          $result = mysql_query($query);
    71.          if (!$result) {
    72.            $feedback = 'Îøèáêà áàçû äàííûõ';
    73.            return $feedback;
    74.          } else {
    75.            $encoded_email = urlencode($_POST['email']);
    76.            $name_from='111';
    77.          $email_from='noreply@111';
    78.          $name_to=$user_name;
    79.          $email_to=$email;
    80.          $data_charset='windows-1251';
    81.          $send_charset='koi8-r';
    82.          $subject='Ïîäòâåðæäåíèå ðåãèñòðàöèè';
    83.            $body = <<<EOMAILBODY
    84.  Ñïàñèáî çà ðåãèñòðàöèþ íà [url=http://www.daily-vsol.hut.ru]www.daily-vsol.hut.ru[/url]!
    85.  Âàø ëîãèí: $user_name
    86.  Ïåðåéäèòå ïî ññûëêå äëÿ çàâåðøåíèÿ ðåãèñòðàöèè:
    87.  EOMAILBODY;
    88.  $links=<<<EOLINK
    89.  [url=http://www.daily-vsol.hut.ru/confirm.php?hash=$hash&email=$email]http://www.daily-vsol.hut.ru/confirm.ph ... ail=$email[/url]
    90.  EOLINK;
    91.          mail_send($name_from,$email_from,$name_to,$email_to,$data_charset,$send_charset,$subject,$body,$links);
    92.            $feedback = '';
    93.            return $feedback;
    94.          }
    95.        }
    96.      } else {
    97.        $feedback =  'Îøèáêà - íåïðàâèëüíîå èìÿ ïîëüçîâàòåëÿ èëè ïàðîëü.';
    98.        return $feedback;
    99.      }
    100.    } else {
    101.      $feedback = 'Îøèáêà! Ïîæàëóéñòà, çàïîëíèòå âñå ïîëÿ ïðàâèëüíî.';
    102.      return $feedback;
    103.    }
    104.  }
    105.  
    106.  
    107.  function account_namevalid()
    108.  {
    109.    if (strspn($_POST['user_name'],"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_") == 0) {
    110.      return false;
    111.    }
    112.    if (strspn($_POST['user_name'],"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_") != strlen($_POST['user_name'])) {
    113.      return false;
    114.    }
    115.  
    116.    // min and max length
    117.    if (strlen($_POST['user_name']) < 5) {
    118.      return false;
    119.    }
    120.    if (strlen($_POST['user_name']) > 25) {
    121.      return false;
    122.    }
    123.  
    124.    // illegal names
    125.    if (eregi("^((root)|(bin)|(daemon)|(adm)|(lp)|(sync)|(shutdown)|(halt)|(mail)|(news)|(uucp)|(operator)|(games)|(mysql)|(httpd)|(nobody)|(dummy)|(www)|(cvs)|(shell)|(ftp)|(irc)|(debian)|(ns)|(download))$", $_POST['user_name'])) {
    126.      return false;
    127.    }
    128.    if (eregi("^(anoncvs_)", $_POST['user_name'])) {
    129.      return false;
    130.    }
    131.  
    132.  return true;
    133.  }
    134.  
    135.  
    136.  function validate_email($email) {
    137.    return (ereg('^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+'. '@'. '[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.' . '[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$', $email));
    138.  }
    139.  
    140.  
    141.  function user_confirm() {
    142.    // This function will only work with superglobal arrays, because
    143.    // I'm not passing in any values or declaring globals
    144.    global $supersecret_hash_padding;
    145.  
    146.    // Verify that they didn't tamper with the email address
    147.    $new_hash = md5($_GET['email'].$supersecret_hash_padding);
    148.    if ($new_hash && ($new_hash == $_GET['hash'])) {
    149.      $query = "SELECT username
    150.               FROM user
    151.               WHERE confirmhash = '$new_hash'";
    152.      $result = mysql_query($query);
    153.      if (!$result || mysql_num_rows($result) < 1) {
    154.        $feedback = 'Îøèáêà!';
    155.        return $feedback;
    156.      } else {
    157.        // Confirm the email and set account to active
    158.        $email = $_GET['email'];
    159.        $hash = $_GET['hash'];
    160.        $query = "UPDATE `user` SET `isconfirmed`=1 WHERE confirmhash='$hash' AND `email`='$email'";
    161.        $result = mysql_query($query);
    162.        return 1;
    163.      }
    164.    } else {
    165.      $feedback = 'Îøèáêà!';
    166.      return $feedback;
    167.    }
    168.  }
    169.  ?>
    Выдаёт:
    Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in Z:\home\test1.ru\www\user_register\register_funcs.php on line 108

    Что ему не хватает?
     
  11. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Парни, вы дружно издеваетесь?
    Приводите километровые простыни кода...

    Мозгов ему не хватает, чтобы самостоятельно себя отладить.

    Правила работы с HEREDOC читать тут
     
  12. hairov@inbox.ru

    hairov@inbox.ru Активный пользователь

    С нами с:
    9 окт 2009
    Сообщения:
    4
    Симпатии:
    0
    оооо

    А как организовать посылку хедера? случайно не так ли
    include ("work_of_patient.php");
    Но при таком посыле на этой же странице отображается страница записей.
    А на счет аction
    <input action="work_of_patient.php" type="submit" name="sbmt" id="sbmt" value="Удалить" />
    вот так не работает
     
  13. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    header
     
  14. hairov@inbox.ru

    hairov@inbox.ru Активный пользователь

    С нами с:
    9 окт 2009
    Сообщения:
    4
    Симпатии:
    0
    СпасиБо!!!!!!!!!