X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Регистрация на сайте
cap4369
cap4369
Topic Starter сообщение 17.9.2013, 11:41; Ответить: cap4369
Сообщение #1


Здравствуйте!
Помогите разобраться с проблемой. При создании регистрации на сайте, до момента внесения изменений в базу данных все происходит нормально. То есть регистрация проходит. Далее после задействования функции login($post) все "ломается", то есть исчезает правый сайдбар, в котором находится форма для входа на сайт и появляется ошибка:
Fatal error: Cannot redeclare link_article() (previously declared in Z:\home\blog.ru\www\functions.php:3) in Z:\home\blog.ru\www\functions.php on line 14
При этом, при вводе в адресной строке ссылки, полученной в почтовом эмуляторе, изменения в БД, а именно поле confirm (подтверждение регистрации) меняется с 0 на 1, то есть все работает нормально.
Код правого сайдбара:
<?php
session_start();
require "config.php";
require "functions.php";
if(isset($_POST['login']) && isset($_POST['password'])){

$msg = login($_POST);

if($msg === TRUE) {
  header("Location:index.php");
}
else{
  $_SESSION['msg'] = $msg;
  header("Location:".$_SERVER['PHP_SELF']);
}
exit();
}
?>
<!--   Правый сайдбар   -->
<div class="sidebar" id="sideRight">
<div id="bartable">
<div id="bartitle">
  Вход на сайт
</div><!--#bartitle-->
<div id="barcontent">
<p style="font-size: 11px; color: red;">
<?=$_SESSION['msg'];?>
<? unset($_SESSION['msg']); ?>
</p>
<form method="POST">
  <label style="font-size: 11px;">
   Логин:
   <input style="margin-left: 9px;" type="text" name="login">
  </label><br>
  <label style="font-size: 11px;">
   Пароль:
   <input type="password" name="password">
  </label><br>
  <label style="font-size: 11px;">
   Запомнить меня
   <input type="checkbox" name="member" value="1">
  </label><br>
  <input style="float:left; font-size: 11px;" type="submit" value="Вход"><br>
</form>

<form method="POST">
  <input style="margin-top: -18px; font-size: 11px;" type="submit" name="logout" value="Выход">

</form>
<p style="font-size: 10px; text-align: center;">
  <a href="registration.php">Регистрация</a> | <a href="returnpass.php">Забыли пароль?</a>
</p>  
</div><!-- #barcontent-->
</div><!-- #bartable-->

</div><!-- .sidebar#sideRight -->
<div id="clear"></div>
</div><!-- #middle-->


Код functions.php:
<?php
/* Регистрация пользователей */
function registration($post) {
$login = clean_data($post['reg_login']);
$password = trim($post['reg_password']);
$conf_pass = trim($post['reg_password_confirm']);
$email = clean_data($post['reg_email']);
$name = clean_data($post['reg_name']);

$msg = '';

if(empty($login)){
  $msg .= "Вы не ввели логин <br />";
}
if(empty($password)){
  $msg .= "Вы не ввели пароль <br />";
}
if(empty($email)){
  $msg .= "Вы не ввели Email <br />";
}
if(empty($name)){
  $msg .= "Вы не ввели имя <br />";
}
if($msg){
  $_SESSION['reg']['login'] = $login;
  $_SESSION['reg']['email'] = $email;
  $_SESSION['reg']['name'] = $name;
  return $msg;
}

if($conf_pass == $password){
  $sql = "SELECT `user_id` FROM `users` WHERE `login`='%s'"; // метка %s обозначает что необходимо вставить данные строкового типа
  $sql = sprintf($sql, mysql_real_escape_string($login));

  $result = mysql_query($sql);

  if(mysql_num_rows($result) > 0){
   $_SESSION['reg']['email'] = $email;
   $_SESSION['reg']['name'] = $name;
   return "Такой логин уже существует";
  }

  $password = md5($password);
  $hash = md5(microtime());

  $query = "INSERT INTO `users` (
          `name`,
          `login`,
          `email`,
          `password`,
          `hash`)
        VALUES (
          '%s',
          '%s',
          '%s',
          '%s',
          '$hash'
          )";
  $query = sprintf($query,
        mysql_real_escape_string($name),
        mysql_real_escape_string($login),
        mysql_real_escape_string($email),
        $password
       );
  $result2 = mysql_query($query);
  if(!$result2){
   $_SESSION['reg']['login'] = $login;
   $_SESSION['reg']['email'] = $email;
   $_SESSION['reg']['name'] = $name;
   return "Ошибка при добавлении пользователя в базу данных".mysql_error();
  }
  else { // Отправляем сообщение пользователю о регистрации на сайте
   $headers = '';
   $headers .= "From: Admin <igor.nagay@mail.ru> \r\n";
   $headers .= "Content-Type: text/plain; charset=utf8";
  
   $tema = "Регистрация";
  
   $mail_body = "Вы успешно зарегистрировались на сайте. Ваша ссылка для подтверждения учетной записи: http://blog.ru/confirm.php?hash=".$hash;
  
   mail($email,$tema,$mail_body,$headers);
  
   return TRUE;
  
  }
}
else{
  $_SESSION['reg']['login'] = $login;
  $_SESSION['reg']['email'] = $email;
  $_SESSION['reg']['name'] = $name;
  return "Пароли не совпадают";
}
}
function clean_data($str) {
return strip_tags(trim($str));
}
function confirm(){

$new_hash = clean_data($_GET['hash']);

$query = "UPDATE `users` SET confirm = '1' WHERE `hash` = '%s'";

$query = sprintf($query,mysql_real_escape_string($new_hash));

$result = mysql_query($query);

if(mysql_affected_rows() == 1){
  return TRUE;
}
else {
  return "Неверный код подтверждения регистрации";
}
}
function check_user(){
return false;
}
function login($post){
if(empty($post['login']) || empty($post['password'])){istration
  return "Заполните поля";
}
}
?>


Код registration.php- вывод страницы с формой регистрации работает без проблем. Поэтому его не показываю.
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
matroskin8
matroskin8
сообщение 17.9.2013, 13:04; Ответить: matroskin8
Сообщение #2


Ошибка:
Fatal error: Cannot redeclare link_article() (previously declared in Z:homeblog.ruwwwfunctions.php:3) in Z:homeblog.ruwwwfunctions.php on line 14

"говорит" о том, что функция link_article() уже была объявлена в файле функций на 3-ей строке... повторно объявлять (редикларировать) одну и ту же функцию - нельзя.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
cap4369
cap4369
Topic Starter сообщение 17.9.2013, 14:01; Ответить: cap4369
Сообщение #3


Но ведь я ее повторно нигде не объявлял, она нужна один раз для реализации постраничной навигации. Как же тогда выходит, что выводится такая ошибка? Может из за того, что в файле confirm.php(подтверждение регистрации) я вначале прописываю подключение файла functions.php, в котором перед реализацией функций регистрации и авторизации идут функции постраничной навигации и может есть смысл разнести их по разным файлам, сделать например что- то вроде functions_reg.php и подключать в нужных файлах?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
matroskin8
matroskin8
сообщение 17.9.2013, 14:20; Ответить: matroskin8
Сообщение #4


Но ведь я ее повторно нигде не объявлял...

Интерпретатор считает иначе...
Может из за того, что в файле confirm.php(подтверждение регистрации) я вначале прописываю подключение файла functions.php, в котором перед реализацией функций регистрации и авторизации идут функции постраничной навигации...

Если проблема в том, что файл с данной функцией подключается несколько раз, то, думаю, вполне достаточно ограничить его подключение одним разом, используя выражение require_once вместо require:
require_once "functions.php";


...и может есть смысл разнести их по разным файлам, сделать например что- то вроде functions_reg.php и подключать в нужных файлах?

Если выражение require_once не решит проблемы, то тут уж вам виднее... поскольку вы создаете приложение, то и должны быть знакомы с его структурой, в отличие от нас.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
cap4369
cap4369
Topic Starter сообщение 17.9.2013, 15:40; Ответить: cap4369
Сообщение #5


Да, require_once помогло решить проблему, спасибо! И я разнес функции по разным файлам. Честно говоря и не обратил на это внимания, упуская из виду что такие "мелочи" как раз и портят жизнь начинающим, не говоря уже о досадных опечатках или забывчивости в объявлении переменных и вызове функций. Еще раз спасибо!
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
matroskin8
matroskin8
сообщение 17.9.2013, 16:04; Ответить: matroskin8
Сообщение #6


Пожалуйста.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
cap4369
cap4369
Topic Starter сообщение 17.9.2013, 17:23; Ответить: cap4369
Сообщение #7


Что- то сегодня проблема за проблемой! Не пойму почему при проверке заполнения полей функцией login($post), появляется ошибка:
Warning: Cannot modify header information - headers already sent by (output started at Z:\home\blog.ru\www\index.php:15) in Z:\home\blog.ru\www\right.php on line 15
15-я строка файла right.php, это header()- перенаправление на текущую страницу:
<?php
session_start();
require_once "config.php";
require_once "functions_reg.php";
if(isset($_POST['login']) && isset($_POST['password'])){

$msg = login($_POST);

if($msg === TRUE) {
  header("Location:admin/index.php"); // переход на страницу панели администратора в папке admin
}
else{
  $_SESSION['msg'] = $msg;
  header("Location:".$_SERVER['PHP_SELF']); // перенаправление на текущую страницу, с которой осуществлялась регистрация
}
exit();
}
?>


Функция login:
function login($post){
if(empty($post['login']) || empty($post['password'])){
  return "Заполните поля";
}
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
matroskin8
matroskin8
сообщение 17.9.2013, 18:47; Ответить: matroskin8
Сообщение #8


Проблема стара, как мир. В этой статье перечислены варианты ее решения. Если вкратце, то перед использованием функции редиректа не должно быть никакого вывода в браузер... а он у вас есть, и не в файле right.php, а в файле index.php в районе 15-ой строки.
Наиболее частые ее причины:
1) банальный пробел или перенос строки (это все - вывод в браузер) в html-коде (вне тегов php)
2) файл сохранен в кодировке UTF-8 with BOM... нужно пересохранить в кодировке UTF-8 without BOM (если используется юникод)
В общем, знакомимся со статьей выше.

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Горячая тема (нет новых ответов) CryptoCloud — прием USDT, BTC, ETH, LTC на любом сайте
34 CryptoCLoud 10079 18.3.2024, 16:56
автор: CryptoCLoud
Открытая тема (нет новых ответов) Странный трафик на сайте длительное время
26 TABAK 7542 16.3.2024, 17:31
автор: Boymaster
Горячая тема (нет новых ответов) Тема имеет прикрепленные файлыБыстрый и качественный обмен на сайте Baksman.org
Обмен Bitcoin, BTC-e, PM, Qiwi, Yandex money, Карты банк
51 Baksman 33209 15.3.2024, 21:14
автор: Baksman
Открытая тема (нет новых ответов) Алтуально ли заработок на сайте?
Оцение пожалуйста идею
10 hitman20 1780 1.2.2024, 5:37
автор: Liudmila
Горячая тема (нет новых ответов) ВНИМАНИЕ: Тема имеет прикрепленные файлыРегистрация(от 158р), продление(от 158р) доменов. Стабильные, низкие цены от РЕГНИК
Reg.Ru, РегТайм, R01, РуЦентр
121 bum 197162 7.1.2024, 15:49
автор: bum


 



RSS Текстовая версия Сейчас: 29.3.2024, 16:04
Дизайн