Вообщем, мне понадобился скрипт регистрации пользователей. Решил для надёжности взять из авторитетной книги PHP5 и MySQL: Библия пользователя. Скопировал код для 5 файлов и получил такую проблему: Во всех скриптах выдаёт ошибку: неожиданный конец файла файл confirm.php PHP: <?php /**************************************************************** * Страница подтверждения регистрации нового пользователя. * * Возможность перехода на эту страницу должна обеспечиваться * * только с помощью ссылки, представленной в электронном * * письме * *****************************************************************/ require_once('includes/register_funcs.inc'); include_once('includes/header_footer.php'); site_header('Account Confirmation'); if ($_GET['hash'] && $_GET['email']) { $worked = user_confirm(); } else { $feedback_str = "<P class=\"errormess\">ERROR - Bad link</P>"; } if ($worked != 1) { $noconfirm = '<P class="errormess">Something went wrong. '. 'Send email to [email=admin@example.com]admin@example.com[/email] for help. If you ' . 'through to this page directly, please go to login.php ' . 'instead. </P> ' ; } else { $confirm = ' <P class="big">You are now confirmed. <A' . 'HREF= "login.php">Log in</A> to start browsing the ' . 'site.</P>' ; } $page =<<<EOPAGE <TABLE CELLPADDING=0 CELLSPACING=0 BORDER=0 ALIGN=CENTER WIDTH=621> <TR> <TD><IMG WIDTH=15 HEIGHT=1 SRC= .. /images/spacer.gif></TD> <TD WIDTH=606 CLASS=left> $feedback_str $noconfirm $confirm </TD> </TR> </TABLE> EOPAGE ; echo $page; site_footer(); ?> файл login.php PHP: <?php /**************************************************************** * Страница регистрации. Ссылки на эту страницу имеются в * * заголовках всех прочих страниц, которые предназначены для * * пользователей, выходящих из системы * *****************************************************************/ require_once ( 'includes/login_funcs.inc ' ); // Если пользователь уже вошел в систему, вызвать функцию user_logout, // чтобы он вышел из системы. // Пользователь не должен иметь возможности видеть эту страницу // после того, как он вошел в систему. // Это позволяет использовать один и тот же сценарий формирования // страницы и для входа в систему, и для выхода из системы if ($LOGGED_IN = user_isloggedin() ) { user_logout () ; $_COOKIE [ ' user_name ' ] = ''; unset ($LOGGKD_IN) ; } if ($submit == 'Login') { if (strlen($_POST['username'] ) <= 20 && strlen ($_POST[ 'password'] ) <=20) { $feedback = user_login () ; } else { $feedback = 'ERROR - Username and password are too long'; } if ($feedback == 1) { // После успешного входа пользователя в систему перенаправить // его на начальную страницу header ( "Location: index.php") ; } else { $feedback_str = "<P class=\"errormess\">$feedback</P>" ; } } else { $feedback_str = ''; } //------------------------ // Вывести на экран форму //------------------------ include_once ( 'includes/header_footer.php'); site_header ( 'Login' ); // В сочетании с вложенным документом не могут использоваться // суперглобальные массивы $php_self = $_SERVER['PHP_SELF']; $login_form =<<< EOLOGINFORM <TABLE CELLPADDING=0 CELLSPACING=0 BORDER=0 ALIGN=CENTER WIDTH=621> <TR> <TD ROWSPAN=2><IMG WIDTH=15 HEIGHT=1 SRC= . ./images/spacer .gif></TD> <TD WIDTH=606 HEIGHT=l><IMG WIDTH=606 HEIGHT=1 SRC=. . /images/spacer.gif></TD> </TR> <TR> <TD> $feedback_str <P CLASS="bold">LOGIN</P> <FORM ACTION="$php_self" METHOD="POST"> <P CLASS="bold">Username<BR> <INPUT TYPE="TEXT" NAME="user_name" VALUE="" SIZE="10" MAXLENGTH="15"></P> <P CLASS="bold">Password<BR> <INPUT TYPE="password" NAME="password" VALUE="" SIZE="10" MAXLENGTH="15"></P > <P><INPUT TYPE="SUBMIT" NAME="submit" VALUE="Login"></P> </FORM> </TD> </TR> </TABLE> EOLOGINFORM; echo $login_form; site_footer(); ?> файл login_funsc.inc PHP: <?php // Файл с данными о хосте базы данных, пользователе, пароле // и выбранной базе данных include_once ( 'includes/db_vars.inc ' ); // Строка, применяемая для шифрования по алгоритму md5 . Эту строку // можно переместить в файл, находящийся за пределами дерева // Web-каталогов, для обеспечения более надежной защиты $supersecret_hash_padding = 'A string that is used to pad1' . 'out short strings for md5 encryption.'; $LOGGED_IN = false; unset ($LOGGED_IN) ; function user_isloggedin () { // Эта функция может работать только с суперглобальными массивами, // поскольку в нее не передаются какие-либо значения и не // объявляются глобальные переменные global $supersecret_hash_padding, $LOGGED_IN; // Если проверки хэшированных значений уже были выполнены, // возвратить заранее заданное значение переменной if (isSet ($LOGGED_IN) ) { return $LOGGED_IN; } if ($_COOKIE['user_name'] && $_COOKIE [ ' id_hash' ] ) { $hash = md5 ( $_COOKIE [ ' user_name ' ] .$supersecret_hash_padding) ; if ($hash == $_COOKIE [ ' id_hash' ] ) { return true; } else { return false; } } else { return false; } } function user_login() { // Эта функция может работать только с суперглобальными массивами, // поскольку в нее не передаются какие-либо значения и не // объявляются глобальные переменные if (!$_POST['user_name'] || !$_POST['password']) { $feedback = 'ERROR - Missing username or password'; return $feedback; } else { $user_name = strtolower($_POST['user_name']); // Усечение пробелов не требуется, поскольку обнаружение лишних // пробелов так или иначе приведет к аварийному завершению. // Применение функции асйзХазпез не требуется, поскольку // одинарные кавычки не допускаются $password = strtolower($_POST['password1']); // Применение функции асМзЗ-азпез не требуется, поскольку данная // строка преобразуется в хэшированное значение $crypt_pwd = md5($password); $query = "SELECT user_name, is_confirmed FROM user WHERE user_name = '$user_name' AND password='$crypt_pwd'"; $result = mysql_query ($query); if (!$result || mysql_num_rows($result) < 1) { $feedback = 'ERROR - User not found or password' . 'incorrect'; return $feedback; } else { if (mysql_result($result, 0, 'is_confirmed') == '1') { user_set_tokens($user_name); return 1; } else { $feedback = 'ERROR - You may not have confirmed ' .'your account yet'; return $feedback; } } } } function user_logout() { setcookie('user_name', '', (time()+2592000), '/', '', 0); setcookie('id hash', '', (time()+2592000) , '/', '', 0); } function user_set_tokens($user_name_in) { global $supersecret_hash_padding; if (!$user_name_in) { $feedback = 'ERROR - No username'; return false; } $user_name = strtolower($user_name_in); $id_hash = md5($user_name.$supersecret_hash_padding); setcookie('user_name', $user_name, (time()+2592000) , '/', '',0); setcookie('id hash', $id_hash, (time () +2592000) , '/', '', 0) ; ?> файл register.php PHP: <?php /************************************************************** * Страница регистрации нового пользователя. Ссылки на эту * * страницу имеются в заголовках всех прочих страниц, которые * * предназначены для пользователей, выходящих из системы и * * входящих в систему. Тем не менее в проекте узла могут * * обнаруживаться дефекты; вполне возможно, что будет решено * * предоставлять доступ к этой странице только для * * посетителей, которые еще не вошли в систему * ***************************************************************/ require_once ( 'includes/register_funcs.inc ' ) ; if ($submit == 'Mail confirmation') { $feedback = user_register() ; // Обратная связь должна быть обеспечена в любом случае, // будь то успех или неудача $feedback_str = "<P class=\"errormess\">$feedback</P>"; } else { //----------------------- // Вывести на экран форму //----------------------- include_once('includes/header_footer.php'); site_header('Registration'); // В сочетании с вложенным документом не могут использоваться // суперглобальные массивы $_SERVER['PHP_SELF']; $reg_str = <<<EOREGSTR <TABLE CELLPADDING=0 CELLSPACING=0 BORDER=0 ALIGN=CENTER WIDTH=621> <TR> <TD ROWSPAN=10 <IMG WIDTH=15 HEIGHT=1 SRC="../images/spacer.gif"></TD> <TD WIDTH=606> </TD> </TR> <TR> <TD> $feedback_str <P CLASS="left"><B>REGISTER</B><BR> Fill out this form and a confirmation email will be sent to you. Once you click on the link in the email your account will be confirmed and you can begin to contribute to the community.</P> <FORM ACTION="$php_self" METHOD="POST"> <P CLASS="bold">First Name<BR> <INPUT TYPE="TEXT" NAME="first_name" VALUE="$first_name" SIZE="20" MAXLENGTH="25"> </P> <P CLASS="bold">Last Name<BR> <INPUT TYPE="TEXT" NAME="last_name" VALUE="$last_name" SIZE="20" MAXLENGTH="2 5"> </P > <P CLASS="bold">Username<BR> <INPUT TYPE="TEXT" NAME="user_name" VALUE="$user_name" SIZE="10" MAXLENGTH="2 5"> </P > <P CLASS="bold">Password<BR> <INPUT TYPE="password" NAME="passwordl" VALUE="" SIZE="10" MAXLENGTH= "25 " > </P> <P CLASS="left"><B>Password</B> (again)<BR> <INPUT TYPE="password" NAME="password2" VALUE="" SIZE="10" MAXLENGTH= "25"></P> <P CLASS="left"><B>Email</B> (required for confirmation)<BR> <INPUT TYPE="TEXT" NAME="email" VALUE="$email" SIZE="30" MAXLENGTH="50"> </P> <P> <INPUT TYPE="SUBMIT" NAME="submit" VALUE="Mail confirmation"> </P> </FORM> </td> </tr> </table> EOREGSTR; echo $reg_str; site_footer(); ?> файл register_funcs.inc PHP: <?php // Файл с данными о хосте базы данных, пользователе, пароле // и выбранной базе данных include_once ( 'includes/db_vars.inc' ) ; // Строка, применяемая для шифрования по алгоритму md5 . Эту строку // можно переместить в файл, находящийся за пределами дерева // Web-каталогов для обеспечения более надежной защиты $supersecret_hash_padding = 'A string that is used to pad out short strings for mds encryption. '; function user_register () { // Эта функция может работать только с суперглобальными массивами, // поскольку в нее не передаются какие-либо значения и не // объявляются глобальные переменные global $supersecret_hash_padding; // Проверить, заданы ли все значения и совпадают ли пароли if(strlen($_POST['user_name'] ) <= 20 && strlen($_POST['passwordl'] ) <= 20 && ($_POST [ 'passwordl ' ] == $_POST[ 'password2 ' ] ) && strlen ($_POST [' email ']) <= 50 && validate_email ($_POST [' email '] ) ) { // Проверить имя пользователя и пароль if (account_namevalid ($_POST [ 'user_name ' ] ) || strlen ($_POST[ 'passwordl '] >= 6) ) { $user_name = strtolower ($_POST [ 'user_name ' ] ) ; $user_name = trim ($user_name); // Применение символов переключения не требуется, поскольку // одинарные кавычки не допускаются $email = $_POST [' email ']; // Использование дублирующих имен пользователей или адресов // электронной почты не разрешено $query = "SELECT user_id FROM user WHERE user_name = ' $user_name ' AND email = ' $email ' " ; $result = mysql_query ($query) ; if ($result && mysql_num_rows ($result) > 0) { $feedback = 'ERROR - Username or email address already exists ' ; return $feedback; } else { $first_name = $_POST [ ' f irst_name ' ] ; $last_name = $_POST [ ' last_name ' ] ; $password = md5 ( $_POST [ ' passwordl ' ] ) ; $user_ip = $_SERVER [ ' REMOTE_ADDR ' ] ; // Создать новое хэшированное значение для вставки // в базу данных и подготовить письмо с подтверждением $hash = md5 ($email . $supersecret_hash_padding); $query = "INSERT INTO user (user_name, first_name, last_name, password, email, remote_addr, conf irm_hash, is_conf irmed, date_created) VALUES ( ' $user_name ' , ' $f irst_name ' , ' $last_name ' , '$password', '$email', '$user_ip', '$hash', '0', NOW ( ) ) " ; $result = mysql_query ($query) ; if (!$result) { $feedback = 'ERROR - Database error'; return $fsedback; } else { // Передать письмо с подтверждением $encoded_email = urlencode ($_POST [ ' email ' ] ) ; $mail_body = <<<EOMAILBODY Thank you for registering at Example.com. Click this link o confirm your registration: [url=http://localhost/conf]http://localhost/conf[/url] irm.php?hash=$hash&email=$encoded_email Once you see a confirmation message, you will be logged into Example .com EOMAILBODY; mail ($email, 'Example.com Registration Confirmation1', $mail_body, 'From: [email=noreply@example.com]noreply@example.com[/email]'); // Предоставить пользователю сообщение об успешной регистрации $feedback = 'YOU HAVE SUCCESSFULLY REGISTERED. You will receive a confirmation email soon'; return $feedback; } } } else { $feedback = ' ERROR - Username or password is invalid'; return $feedback; } } else { $feedback = 'ERROR - Please fill in all fields correctly'; return $feedback; } } function account_namevalid() { // Параметр, предназначенный для использования с функцией strspn $span_str = "abcdefghijklmnopqrstuvwxyz" . "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789- " ; // Должен быть задан по меньшей мере один символ if (strspn ($_POST [ 'user_name' ] , $span_str) == 0) { return false; } // В строке должны находиться только допустимые символы if (strspn ($_POST[ ' user_name ' ], $span_str) != strlen($name)) { return false; } // Проверка требований к минимальной и максимальной длине if (strlen ($_POST[ ' user_name' ] ) < 5) { return false; } if (strlen($_POST[ 'user_name'] ) > 25) { return false; } // Недопустимые имена if (eregi ("A ( (root) | (bin) | (daemon) | (adm) | dp) | (sync) | (shutdown) (halt) | (mail) | (news) | (uucp) | (operator) | (games) | (mysql) ) (httpd) | (nobody) | (dummy) | (www) | (cvs) | (shell) | (ftp) | (ire) | (debian) | (ns) | (download) )$", $_POST [ 'user_name ' ] ) ) { return false; } if (eregi ("A (anoncvs_) ", $_POST [ 'user_name ' ] ) ) { return false; } return true; } function validate_email () { return (ereg ('^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+'. '@'. '[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.' . '[- ! #$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$', $_POST[' email '] ) ) ; function user_confirm () { // Эта функция может работать только с суперглобальными массивами, // поскольку в нее не передаются какие-либо значения и не // объявляются глобальные переменные global $supersecret_hash_padding; // Проверить, не предпринималась ли попытка сфальсифицировать адрес // электронной почты $new_hash = md5($_GET['email'].$supersecret_hash_padding); if ($new_hash && ($new_hash == $_GET['hash1'])) { $query = "SELECT user_name FROM user WHERE confirm_hash = '$new_hash'"; $result = mysql_query($query); if (!$result || mysql_num_rows($result) < 1) { $feedback = 'ERROR - Hash not found'; return $feedback; } else { // Подтвердить получение письма по электронной почте // и перевести учетную запись в активное состояние $email = $_GET['email']; $hash = $_GET['hash']; $query = "UPDATE user SET email='$email', is_confirmed='1' WHERE confirm_hash='$hash'"; $result = mysql_query($query); return 1; } } else { $feedback = 'ERROR - Values do not match1; return $feedback'; return $feedback; } } ?> Второй вопрос: к некоторым файлам подключаются другие файлы через include_once ( 'includes/db_vars.inc' ) ; include_once('includes/header_footer.php'); если с первым всё обьяснили, то про второй молчат на протяжении всей разработки примера. В книге его нет. Что это за безобразие? ЗЫ. Если знаете хороший скрипт регистрации, подскажите где взять. Мне можно без наворотов, но так чтобы не взломал первый встречный
Когда используешь запись HEREDOC то не должно присутствовать никаких лишних символов (включая пробелы) в местах: Код (Text): ... <<<MYLABEL ....... Некий текст ....... MYLABEL; 1) Между <<< и MYLABEL нету никаких символов 2) После <<<MYLABEL не должно быть никаких символов только "Enter"(перевод строки) 3) Перед нижним MYLABEL не должно быть никаких символов. И после закрывающейся метки может идти ; и Enter(перевод строки).
PHP: <?php /** * @copyright Vasilii B. Shpilchin (c)2009 * @version 0.9b * @name Spirit Registration */ class registration { public $header = 'top'; public $mainmenu = 'left'; public $userblock = 'left'; public $footer = 'bottom'; private $errors = array(); // Аккомулятор ошибок public function __construct() { if (isset($_POST['registration'])) { if (!isset($_POST['name']) || empty($_POST['name'])) { $this -> errors[] = 'Не заполнено имя'; } if (!isset($_POST['password']) || empty($_POST['password'])) { $this -> errors[] = 'Не заполнен пароль'; } if (!isset($_POST['password2']) || empty($_POST['password2'])) { $this -> errors[] = 'Не заполнено подтверждение пароля'; } if (isset($_POST['password']) && isset($_POST['password']) && $_POST['password'] !== $_POST['password2']) { $this -> errors[] = 'Пароль и подтверждение не совпадают'; } if (!isset($_POST['email']) || empty($_POST['email'])) { $this -> errors[] = 'Не указан e-mail'; } if (isset($_POST['email']) && !true_email($_POST['email'])) { $this -> errors[] = 'Введеный e-mail некорректен'; } $query = 'SELECT `id` FROM `users` WHERE `name` = \''.mysql_real_escape_string($_POST['name']).'\''; $query .= ' or `email`=\''.mysql_real_escape_string($_POST['email']).'\';'; $result = spirit::select_array($query); if (!empty($result[0]['id'])) { $this -> errors[] = 'Пользователь с таким именем или email уже существует'; } if (!empty($this -> errors)) { $add['errors'] = $this -> errors; $this -> content = spirit::parse_dynamic_template('register_start', false, $add); } else { $name = htmlspecialchars($_POST['name']); $password = md5(mysql_real_escape_string($_POST['password'])); $email = mysql_real_escape_string($_POST['email']); $group = 'inactive'; $query = 'INSERT INTO `users` (`name`,`password`,`group`,`email`) VALUES (\''.$name.'\', \''.$password.'\',\''.$group.'\',\''.$email.'\');'; # $this -> send_mail($email, $name); spirit::query($query); $vars = array('NAME' => $name, 'EMAIL' => $email); $this -> content = spirit::parse_static_template('register_success', $vars); } } elseif (isset($_GET['code'])) { list($email, $code) = explode("\n", base64_decode($_GET['code'])); $query = 'SELECT `name` FROM `users` WHERE `email`=\''.mysql_real_escape_string($name).'\';'; $result = spirit::select_array($query); if (empty($result) || $code !== substr(base64_decode(md5($result['name']).md5($email)), 32, 32)) { spirit::service_msg('Неверно указан код подтверждения.', 'Регистрация:'); } else { $query = 'UPDATE `users` SET `group`=\'users\' WHERE `email`=\''.$email.'\';'; spirit::query($query); $vars = array('NAME' => $name, 'EMAIL' => $email); $this -> content = spirit::parse_static_template('register_finish', $vars); } } else { $this -> content = spirit::parse_dynamic_template('register_start'); } } private function send_mail($email, $name) { $link = cfg::SITE_URL.'?run=registration&code='.base64_encode($email."\n".substr(base64_encode(md5($name).md5($email)), 32, 32)); $text = "Уважаемый $name!\r\nВы зарегестрировались на сайте ".spirit::SITE_NAME.", но прежде, чем Вы начнете пользоваться сайтом, Вы должны активировать свой e-mail"; $text .= " перейдя по ссылке:\r\n$link\r\n\r\nАдминистрация."; $from = cfg::ADMIN_EMAIL; $subject = cfg::SITE_NAME; if (!send_mail($from, $to, $subject, $text)) { spirit::service_msg('Отправка письма не удалась. Попробуйте позже.'); } } } ?>
файл хедер_футер - это файл, содержащий оформление страницы. по ссылке http://archive.dialektika.com/cgi-bin/m ... 459-1022-6 доступны все листинги из книги. а для авторизации-регистрации там есть также файлы, которых в книге нет, тот же хедер_футер касательно самих скриптов - в них есть некоторые несоответствия между именами переменных и т д. в свое время брала эти же скрипты и пришлось править. могу выложить рабочую версию
Короткий вопрос Есть база данных, есть страница с записями и есть интерфейс для удаления записей с вопросом "удалить?" вынесенный на отдельную страницу. Подскажите как после нажатие кнопки "удалить" осуществить автоматически переход на страницу всех записей.
action формы с этой кнопкой никак нельзя вынести на страницу всех записей? Если нельзя, то банальный редирект посылкой хедера
PHP: <?php function mail_send($name_from,$email_from,$name_to,$email_to,$data_charset,$send_charset,$subject,$body,$links) { /*$name_from, // èìÿ îòïðàâèòåëÿ $email_from, // email îòïðàâèòåëÿ $name_to, // èìÿ ïîëó÷àòåëÿ $email_to, // email ïîëó÷àòåëÿ $data_charset, // êîäèðîâêà ïåðåäàííûõ äàííûõ $send_charset, // êîäèðîâêà ïèñüìà $subject, // òåìà ïèñüìà $body // òåêñò ïèñüìà */ $to=mail_mime_header_encode($name_to, $data_charset, $send_charset).' <'.$email_to.'>'; $subject = mail_mime_header_encode($subject, $data_charset, $send_charset); $from = mail_mime_header_encode($name_from, $data_charset, $send_charset).' <'.$email_from.'>'; if($data_charset != $send_charset) { $body=iconv($data_charset, $send_charset, $body); } $body=$body.$links; return mail($to, $subject, $body, 'From: '.$from); } function mail_mime_header_encode($str, $data_charset, $send_charset) { if($data_charset != $send_charset) { $str=iconv($data_charset, $send_charset, $str); } return '=?'.$send_charset.'?B?'.base64_encode($str).'?='; } function user_register() { global $supersecret_hash_padding; 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'])) { if(isset($_SESSION['captcha_keystring']) && ($_SESSION['captcha_keystring'] == $_POST['keystring'])) { unset($_SESSION['captcha_keystring']); } else { $feedback='Âû ââåëè íåïðàâèëüíûé êîä. Ïîïðîáóéòå åùå ðàç.<br />'; unset($_SESSION['captcha_keystring']); return $feedback; } if (account_namevalid($_POST['user_name']) || strlen($_POST['password1'] >= 6)) { $user_name = strtolower($_POST['user_name']); $user_name = trim($user_name); $email= $_POST['email']; $query = "SELECT userid FROM user WHERE username = '$user_name' OR email = '$email'"; $result = mysql_query($query); if ($result && mysql_num_rows($result) > 0) { $feedback = 'Îøèáêà - èìÿ ïîëüçîâàòåëÿ èëè email óæå ñóùåñòâóåò.'; return $feedback; } else { $first_name = $_POST['first_name']; $last_name = $_POST['last_name']; $password = md5($_POST['password1']); $user_ip = $_SERVER['REMOTE_ADDR']; $hash = md5($email.$supersecret_hash_padding); $query = "INSERT INTO user (userid, username, firstname, lastname, password, email, remoteaddr, confirmhash, isconfirmed, datecreated) VALUES (NULL, '$user_name', '$first_name', '$last_name', '$password', '$email', '$user_ip', '$hash', 0, NOW())"; $result = mysql_query($query); if (!$result) { $feedback = 'Îøèáêà áàçû äàííûõ'; return $feedback; } else { $encoded_email = urlencode($_POST['email']); $name_from='111'; $email_from='noreply@111'; $name_to=$user_name; $email_to=$email; $data_charset='windows-1251'; $send_charset='koi8-r'; $subject='Ïîäòâåðæäåíèå ðåãèñòðàöèè'; $body = <<<EOMAILBODY Ñïàñèáî çà ðåãèñòðàöèþ íà [url=http://www.daily-vsol.hut.ru]www.daily-vsol.hut.ru[/url]! Âàø ëîãèí: $user_name Ïåðåéäèòå ïî ññûëêå äëÿ çàâåðøåíèÿ ðåãèñòðàöèè: EOMAILBODY; $links=<<<EOLINK [url=http://www.daily-vsol.hut.ru/confirm.php?hash=$hash&email=$email]http://www.daily-vsol.hut.ru/confirm.ph ... ail=$email[/url] EOLINK; mail_send($name_from,$email_from,$name_to,$email_to,$data_charset,$send_charset,$subject,$body,$links); $feedback = ''; return $feedback; } } } else { $feedback = 'Îøèáêà - íåïðàâèëüíîå èìÿ ïîëüçîâàòåëÿ èëè ïàðîëü.'; return $feedback; } } else { $feedback = 'Îøèáêà! Ïîæàëóéñòà, çàïîëíèòå âñå ïîëÿ ïðàâèëüíî.'; return $feedback; } } function account_namevalid() { if (strspn($_POST['user_name'],"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_") == 0) { return false; } if (strspn($_POST['user_name'],"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_") != strlen($_POST['user_name'])) { return false; } // min and max length if (strlen($_POST['user_name']) < 5) { return false; } if (strlen($_POST['user_name']) > 25) { return false; } // illegal names 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'])) { return false; } if (eregi("^(anoncvs_)", $_POST['user_name'])) { return false; } return true; } function validate_email($email) { return (ereg('^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+'. '@'. '[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.' . '[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$', $email)); } function user_confirm() { // This function will only work with superglobal arrays, because // I'm not passing in any values or declaring globals global $supersecret_hash_padding; // Verify that they didn't tamper with the email address $new_hash = md5($_GET['email'].$supersecret_hash_padding); if ($new_hash && ($new_hash == $_GET['hash'])) { $query = "SELECT username FROM user WHERE confirmhash = '$new_hash'"; $result = mysql_query($query); if (!$result || mysql_num_rows($result) < 1) { $feedback = 'Îøèáêà!'; return $feedback; } else { // Confirm the email and set account to active $email = $_GET['email']; $hash = $_GET['hash']; $query = "UPDATE `user` SET `isconfirmed`=1 WHERE confirmhash='$hash' AND `email`='$email'"; $result = mysql_query($query); return 1; } } else { $feedback = 'Îøèáêà!'; return $feedback; } } ?> Выдаёт: 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 Что ему не хватает?
Парни, вы дружно издеваетесь? Приводите километровые простыни кода... Мозгов ему не хватает, чтобы самостоятельно себя отладить. Правила работы с HEREDOC читать тут
оооо А как организовать посылку хедера? случайно не так ли include ("work_of_patient.php"); Но при таком посыле на этой же странице отображается страница записей. А на счет аction <input action="work_of_patient.php" type="submit" name="sbmt" id="sbmt" value="Удалить" /> вот так не работает