Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
1 / 1 / 0
Регистрация: 08.07.2011
Сообщений: 35
1

проблема с активации юзеров

12.08.2011, 04:39. Показов 1509. Ответов 18
Метки нет (Все метки)

проблема с активации юзеров на своем сайте после регистрирование им на почты приходить письмо что бы перешли через ссылку для подтверждение аккаунта только ссылка приходить вот так activate.php?id=4 и больше нечего нет то есть не http://www.moysayt.ru/activate.php?id=4. А через проста activate.php?id=4 совсем нельзя пройти через неё как это исправить подскажите пожалуйста? Программисты добрые
я думала нужно добавить http://www. moy sayt но не знала куда добавить
у меня код вот такой в login.php думаю ошибка создается от сюда
$msg = "Please follow next link <a href=\"$sitesets[url]activate.php?id=$lastID\">$sitesets[url]activate.php?id=$lastID</a> in order to activate your account!";
Спасибо заранее очень нуждаюсь в вашей помощи

Добавлено через 35 минут
маленькая деталь которая может как то прояснить проблему когда приходить письмо для подтверждение на имя отправителя имя моего порта а не сайта что делать сама незнаю
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.08.2011, 04:39
Ответы с готовыми решениями:

Регистрация Юзеров Через Tdi. Проблема С Безопасностью
Пытаюсь сделать автоматическую регистрацию пользователей из AD в Lotus. ADSync отмел как более не...

Проблема активации 1с на windows server 2012 r2
Hello word! Есть 1с 8.3.15.1700 на windows server 2012 r2, развернут MS SQL 2016, так же на данном...

Проблема при активации Microsoft Office 2016
Всем добрый день. У меня такая проблема, купил лицензионный ключ Office 2016 professional plus....

Взаимодействие 2-х юзеров
Пример: 1 юзер жмет на кнопку а у второго в этот же момент вылетает сообщение что тот нажал на...

18
119 / 119 / 32
Регистрация: 09.07.2011
Сообщений: 203
12.08.2011, 09:25 2
Могу предложить такую глупость:

PHP
1
$msg = "Please follow next link <a href=\"http://www.moysayt.ru/activate.php?id=$lastID\">http://www.moysayt.ru/activate.php?id=$lastID</a> in order to activate your account!";
Попробуйте проверить отдельно переменную $sitesets[url]. Судя по всему она работает некорректно...
1
1 / 1 / 0
Регистрация: 08.07.2011
Сообщений: 35
13.08.2011, 08:50  [ТС] 3
Цитата Сообщение от SFED Посмотреть сообщение
Могу предложить такую глупость:

PHP
1
$msg = "Please follow next link <a href=\"http://www.moysayt.ru/activate.php?id=$lastID\">http://www.moysayt.ru/activate.php?id=$lastID</a> in order to activate your account!";
Попробуйте проверить отдельно переменную $sitesets[url]. Судя по всему она работает некорректно...
skajite kak proverit prosta umenya mozgov ne hvataet na takie slojnie funktsii php esli chto mogu otpravit vam script
0
Почетный модератор
11253 / 4205 / 425
Регистрация: 12.06.2008
Сообщений: 12,135
13.08.2011, 10:50 4
Когда вставляешь массив внутрь строки, то заключай его в фигурные скобки:
PHP
1
2
3
$msg = "Please follow next link 
<a href=\"{$sitesets[url]}activate.php?id=$lastID\">{$sitesets[url]}activate.php?id=$lastID</a> 
in order to activate your account!";
И вообще, одно короткое число в качестве кода активации бессмысленно. Для активации должно использоваться что-то такое, что пользователь не сможет угадать... иначе теряется весь смысл активации.
0
Мы все БОЛЬШАЯ программа
52 / 52 / 5
Регистрация: 16.04.2009
Сообщений: 489
13.08.2011, 18:48 5
И не $sitesets[url], а $sitesets['url'] или если url переменная так $sitesets[$url]
0
1 / 1 / 0
Регистрация: 08.07.2011
Сообщений: 35
13.08.2011, 20:00  [ТС] 6
Цитата Сообщение от bond95 Посмотреть сообщение
И не $sitesets[url], а $sitesets['url'] или если url переменная так $sitesets[$url]
c $sitesets['url'] выдало ошибку а с $sitesets[$url] нечего не изменилось ((

Добавлено через 1 минуту
Цитата Сообщение от Humanoid Посмотреть сообщение
Когда вставляешь массив внутрь строки, то заключай его в фигурные скобки:
PHP
1
2
3
$msg = "Please follow next link 
<a href=\"{$sitesets[url]}activate.php?id=$lastID\">{$sitesets[url]}activate.php?id=$lastID</a> 
in order to activate your account!";
И вообще, одно короткое число в качестве кода активации бессмысленно. Для активации должно использоваться что-то такое, что пользователь не сможет угадать... иначе теряется весь смысл активации.
а подскажите пожалуйста как исправить это?

Добавлено через 3 минуты
это скпирт

это activate.php

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php include('head.php'); ?>
<body>
<div id="container">
<?php include('header.php'); ?>
 
<?php include('menu.php'); ?>
 
<?php include('left.php'); ?>
 
 
<div id="right">
 
<?php
$rs = mysql_query("update users set active = 1 where id = '".mysql_real_escape_string($_GET['id'])."'");
if($rs) {
    if(mysql_affected_rows() != 0) {
        print "<h1>Account Active, you can now login!</h1>";
    }else{
        print "<h1>Nothing happened!</h1>";
    }
}
?>
 
</div>
 
<div style="height:10px;clear:both"></div>
 
<?php include('footer.php'); ?>
</div><!--container-->
</body>
</html>
это login.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<?php include('head.php'); ?>
<body>
<div id="container">
<?php include('header.php'); ?>
 
<?php include('menu.php'); ?>
 
<?php include('left.php'); ?>
 
 
<div id="right">
 
<?php if (checkLogged() == true) { refreshPage(0, "submit-auto.php"); die(); }?>
    
 
 
<h1>User login.</h1>
 
<?php
if(isset($_POST['sblogin'])) {
    loginUser($_POST['loginUser'], $_POST['loginPassword']);
}
?>
<fieldset style="width: 450px">
<legend><b style="color:#80C31C">Login form</b></legend>
<form method="POST">
<table>
<tr><td><b>Username</b></td><td><input type="text" name="loginUser"></td></tr>
<tr><td><b>Password</b></td><td><input type="password" name="loginPassword"></td></tr>
</table>
<input type="submit" name="sblogin" id="sblogin" value="Login!" style="margin-left:140px">
</form>
</fieldset>
 
 
<h1>Registration is easy and fast. Please fill in the form below.</h1>
<?php
if(isset($_POST['sb'])) {
    
    extract($_POST);
    
    if(empty($username) || empty($password) || empty($emailaddress)) {
        printError("All fields are mandatory");
    }elseif (!checkEmail($emailaddress)){
        printError("Email address appears to be invalid!");
    }elseif ($sec != $_SESSION['key']){
        printError("Security code appears to be invalid!");
    }elseif (checkUsername($username) != "0"){
        printError("Username taken!");
    }else{
        
        $regip = $_SERVER['REMOTE_ADDR'];
        $regdate = time();  
        
        
        
        
        
                
    $otherdata = ", '".addentities($emailaddress)."', '$regdate', '$regip', '0', '0'";
 
        $lastID = registerUser($username, $password, $otherdata);
    if($lastID != FALSE) {
        printSuccess("Your account was created, you just need to activate it by checking your e-mail (be sure to check Spambox too)!");
                $headers = 'From: '.addentities($emailaddress).'' . "\r\n" .
                'Reply-To: '.addentities($emailaddress).'' . "\r\n" .
                'X-Mailer: PHP/' . phpversion();
                $headers  = 'MIME-Version: 1.0' . "\r\n";
                $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
 
                $msg = "Please follow next link <a href=\"http://{$_SERVER['HTTP_HOST']}/$sitesets[$url]activate.php?id=$lastID\">http://{$_SERVER['HTTP_HOST']}/$sitesets[$url]activate.php?id=$lastID</a> in order to activate your account!";
 
        mail($emailaddress, "Activation link", $msg, $headers);
    }else{
        printError("We couldn't create your profile!"); 
    }   
            
    }   
    
}
?>
 
<span id="msgbox" style="display:none; margin:0px 10px 10px 10px;"></span>
<fieldset style="width: 450px">
<legend><b style="color:#80C31C">Registration Form</b></legend>
<form action="" method="POST" name="form1">
<div style="float:left;width:225px;font-weight:bold;line-height:29px">Username
<br/>Password<br/>Email Address<br/><img src="captcha.php"></div>
<div style="float:left;width:225px;"><input type="text" name="username" id="username"><br/><input type="password" name="password"><br/><input type="text" name="emailaddress"><br/><input name="sec" type="text" value="Input the left code">
</div>
<div style="height:10px;clear:both"></div>
<input type="submit" name="sb" id="sb" value="Register Now!" style="margin-left:140px">
</form>
</fieldset>
 
</div>
<div style="height:10px;clear:both"></div>
 
<?php include('footer.php'); ?>
</div><!--container-->
</body>
</html>
Добавлено через 1 минуту
не уверена но думаю что ошибка в login.php
0
Мы все БОЛЬШАЯ программа
52 / 52 / 5
Регистрация: 16.04.2009
Сообщений: 489
13.08.2011, 20:12 7
Насколько я вижу массив $sitesets вообще не объявлен и по моему он не нужен.
Более сложный код активации можно сделать так:
PHP
1
$lastID=chr(rand(ord('a'),ord('z'))).rand(1,9).chr(rand(ord('a'),ord('z'))).rand(1,9).rand(1,9).chr(rand(ord('a'),ord('z')));
0
450 / 203 / 27
Регистрация: 23.12.2010
Сообщений: 645
13.08.2011, 20:19 8
PHP
1
$lastID = md5(rand(0,10000)).md5(rand(0,10000));
0
1 / 1 / 0
Регистрация: 08.07.2011
Сообщений: 35
13.08.2011, 21:19  [ТС] 9
Цитата Сообщение от Sulik78 Посмотреть сообщение
PHP
1
$lastID = md5(rand(0,10000)).md5(rand(0,10000));
то есть нужно это изменить
PHP
1
$lastID = registerUser($username, $password, $otherdata);
на это $lastID = md5(rand(0,10000)).md5(rand(0,10000));

?

Добавлено через 2 минуты
Цитата Сообщение от bond95 Посмотреть сообщение
Насколько я вижу массив $sitesets вообще не объявлен и по моему он не нужен.
Более сложный код активации можно сделать так:
PHP
1
$lastID=chr(rand(ord('a'),ord('z'))).rand(1,9).chr(rand(ord('a'),ord('z'))).rand(1,9).rand(1,9).chr(rand(ord('a'),ord('z')));
шас попробую только вот мне удалить $sitesets ?
0
Почетный модератор
11253 / 4205 / 425
Регистрация: 12.06.2008
Сообщений: 12,135
13.08.2011, 21:19 10
Цитата Сообщение от dilfinka Посмотреть сообщение
а подскажите пожалуйста как исправить это?
А что такое $sitesets ? Я не вижу, где он объявляется. Замени ту строку на две строки:
PHP
1
2
$link = "http://{$_SERVER['HTTP_HOST']}/".dirname($_SERVER["SCRIPT_NAME"])."/activate.php?id=$lastID";
$msg = "Please follow next link <a href=\"$link\">$link</a> in order to activate your account!";
По поводу самой активации... в твоём случае наиболее простым и надёжным способом было бы:
1. Добавь в таблицу users ещё один столбец
SQL
1
activecode INT UNSIGNED NOT NULL
2. Во время регистрации, когда создаёшь нового пользователя, присвой этому столбцу рандомное значение:
SQL
1
INSERT INTO users SET ......,active=0,activecode=RAND()*4294967295,......
3. В эту ссылку вставь это рандомное значение, которое записала в таблицу... что-то вроде
PHP
1
2
$link = "http://{$_SERVER['HTTP_HOST']}/".dirname($_SERVER["SCRIPT_NAME"])."/activate.php?id={$lastID}&amp;code=$activecode";
$msg = "Please follow next link <a href=\"$link\">$link</a> in order to activate your account!";
4. В файле activate.php запрос сделай таким:
PHP
1
$rs = mysql_query("update users set active = 1 where id = '".mysql_real_escape_string($_GET['id'])."' AND activecode = '".mysql_real_escape_string($_GET['code'])."'");
Теперь если пользователь указал неправильный e-mail, он не сможет ложно пройти активацию... ему потребуется перебрать в среднем более 2 миллиардов ссылок... это практически нереально.
0
1 / 1 / 0
Регистрация: 08.07.2011
Сообщений: 35
14.08.2011, 08:04  [ТС] 11
Цитата Сообщение от Humanoid Посмотреть сообщение
А что такое $sitesets ? Я не вижу, где он объявляется. Замени ту строку на две строки:
PHP
1
2
$link = "http://{$_SERVER['HTTP_HOST']}/".dirname($_SERVER["SCRIPT_NAME"])."/activate.php?id=$lastID";
$msg = "Please follow next link <a href=\"$link\">$link</a> in order to activate your account!";
По поводу самой активации... в твоём случае наиболее простым и надёжным способом было бы:
1. Добавь в таблицу users ещё один столбец
SQL
1
activecode INT UNSIGNED NOT NULL
2. Во время регистрации, когда создаёшь нового пользователя, присвой этому столбцу рандомное значение:
SQL
1
INSERT INTO users SET ......,active=0,activecode=RAND()*4294967295,......
3. В эту ссылку вставь это рандомное значение, которое записала в таблицу... что-то вроде
PHP
1
2
$link = "http://{$_SERVER['HTTP_HOST']}/".dirname($_SERVER["SCRIPT_NAME"])."/activate.php?id={$lastID}&amp;code=$activecode";
$msg = "Please follow next link <a href=\"$link\">$link</a> in order to activate your account!";
4. В файле activate.php запрос сделай таким:
PHP
1
$rs = mysql_query("update users set active = 1 where id = '".mysql_real_escape_string($_GET['id'])."' AND activecode = '".mysql_real_escape_string($_GET['code'])."'");
Теперь если пользователь указал неправильный e-mail, он не сможет ложно пройти активацию... ему потребуется перебрать в среднем более 2 миллиардов ссылок... это практически нереально.
Спасибо Вам Огромное все сделала кроме второго как мне добавить и куда
SQL
1
INSERT INTO users SET ......,active=0,activecode=RAND()*4294967295,......
Добавлено через 8 часов 30 минут
Цитата Сообщение от Humanoid Посмотреть сообщение
А что такое $sitesets ? Я не вижу, где он объявляется. Замени ту строку на две строки:
PHP
1
2
$link = "http://{$_SERVER['HTTP_HOST']}/".dirname($_SERVER["SCRIPT_NAME"])."/activate.php?id=$lastID";
$msg = "Please follow next link <a href=\"$link\">$link</a> in order to activate your account!";
По поводу самой активации... в твоём случае наиболее простым и надёжным способом было бы:
1. Добавь в таблицу users ещё один столбец
SQL
1
activecode INT UNSIGNED NOT NULL
2. Во время регистрации, когда создаёшь нового пользователя, присвой этому столбцу рандомное значение:
SQL
1
INSERT INTO users SET ......,active=0,activecode=RAND()*4294967295,......
3. В эту ссылку вставь это рандомное значение, которое записала в таблицу... что-то вроде
PHP
1
2
$link = "http://{$_SERVER['HTTP_HOST']}/".dirname($_SERVER["SCRIPT_NAME"])."/activate.php?id={$lastID}&amp;code=$activecode";
$msg = "Please follow next link <a href=\"$link\">$link</a> in order to activate your account!";
4. В файле activate.php запрос сделай таким:
PHP
1
$rs = mysql_query("update users set active = 1 where id = '".mysql_real_escape_string($_GET['id'])."' AND activecode = '".mysql_real_escape_string($_GET['code'])."'");
Теперь если пользователь указал неправильный e-mail, он не сможет ложно пройти активацию... ему потребуется перебрать в среднем более 2 миллиардов ссылок... это практически нереально.
и скажите как это написать в mysql у меня не получилось и что нужно поставить в местах где несколько точек спасибо заранее
0
Почетный модератор
11253 / 4205 / 425
Регистрация: 12.06.2008
Сообщений: 12,135
14.08.2011, 08:53 12
Цитата Сообщение от dilfinka Посмотреть сообщение
как мне добавить и куда
У тебя где-то есть функция registerUser()... я не знаю, где она описана. Где-то в этой функции есть SQL-запрос, который добавляет строку в таблицу users... вот этот запрос и надо подправить, что бы он ещё присваивал случайное значение полю activecode. Многоточие - это я имел ввиду, что в тех местах присваиваются ещё какие-то значения другим столбцам.
1
1 / 1 / 0
Регистрация: 08.07.2011
Сообщений: 35
14.08.2011, 22:25  [ТС] 13
Цитата Сообщение от Humanoid Посмотреть сообщение
У тебя где-то есть функция registerUser()... я не знаю, где она описана. Где-то в этой функции есть SQL-запрос, который добавляет строку в таблицу users... вот этот запрос и надо подправить, что бы он ещё присваивал случайное значение полю activecode. Многоточие - это я имел ввиду, что в тех местах присваиваются ещё какие-то значения другим столбцам.
Спасибо Всем Вам у меня получилось! И все благодаря вам!!!

Добавлено через 13 минут
единственный вопрос письмо активации приходить с именем моего порта а не именем моего сайта можно ли это изменить ?
0
Почетный модератор
11253 / 4205 / 425
Регистрация: 12.06.2008
Сообщений: 12,135
15.08.2011, 08:14 14
Не понял... что значит с именем порта?
0
1 / 1 / 0
Регистрация: 08.07.2011
Сообщений: 35
15.08.2011, 09:31  [ТС] 15
Цитата Сообщение от Humanoid Посмотреть сообщение
Не понял... что значит с именем порта?
вот у меня имя порта на хостинге lola7 и когда подтверждение приходить для активации аккаунта юзеров обычно на имени отправителя стоит имя сайта а у меня стоит мой логин имя своего порта
0
Почетный модератор
11253 / 4205 / 425
Регистрация: 12.06.2008
Сообщений: 12,135
15.08.2011, 09:52 16
Попробуй к переменной $headers перед вызовом функции mail() добавить:
PHP
1
$headers .= "From: www.example.com <lola7@example.com>\r\n";
В треугольных скобках имя почты, с которой отправляется, а перед этим можно любое называние или имя... в твоём случае можно название сайта указать. Но я сам с почтой не работал, поэтому не уверен, что получится... но по идее, должно сработать.
1
1 / 1 / 0
Регистрация: 08.07.2011
Сообщений: 35
15.08.2011, 14:20  [ТС] 17
Цитата Сообщение от Humanoid Посмотреть сообщение
Попробуй к переменной $headers перед вызовом функции mail() добавить:
PHP
1
$headers .= "From: www.example.com <lola7@example.com>\r\n";
В треугольных скобках имя почты, с которой отправляется, а перед этим можно любое называние или имя... в твоём случае можно название сайта указать. Но я сам с почтой не работал, поэтому не уверен, что получится... но по идее, должно сработать.
Спасибо Вам Огромное!!!!
0
Начинающий Линуксоид
18 / 18 / 0
Регистрация: 24.05.2011
Сообщений: 221
Записей в блоге: 1
15.08.2011, 19:41 18
неужели некто не подозревает о существовании такого масива SERVER
1. весь файл сюда.
2. нельзя написать "http://".$_SERVER['SERVER_NAME']."?.......
0
1 / 1 / 0
Регистрация: 08.07.2011
Сообщений: 35
20.08.2011, 23:18  [ТС] 19
Цитата Сообщение от Егор Грушко Посмотреть сообщение
неужели некто не подозревает о существовании такого масива SERVER
1. весь файл сюда.
2. нельзя написать "http://".$_SERVER['SERVER_NAME']."?.......
ну у меня вот так но приходить все ровно с именем логина моего порта $msg = "Please follow next link <a href=\"http://{$_SERVER['HTTP_HOST']}/$sitesets[url]activate.php?id=$lastID\">http://{$_SERVER['HTTP_HOST']}/$sitesets[url]activate.php?id=$lastID</a> in order to activate your account!";


скажите что нужно тут изменить и какой отвечает тут что отправляет мой логин сервера?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.08.2011, 23:18

счётчик юзеров
Здравствуйте! У меня есть вопрос к опытным юзерам и программистам. Меня интересует вопрос, как...

Отрубить юзеров
Здрасьте. Подскажите пожалуйста кусочек кода, которым можно отрубить всех пользователей от файла...

Подмена юзеров в БД
Скачал с варезника тему для джумлы, после инсталляции не смог зайти в админку. В процессе...

Блокировка юзеров
появились недоброжелатели (а может и обычные школьники), которые очень упорно с одних и тех же IP...

Логирование юзеров
Добры вечер, помогите с проблемой. В php особо не разбираюсь, но решил написать логер пользователей...

Авторизация юзеров
Привет всем! Уже около трех месяцев меня терзают сомнения по поводу верной авторизации юзеров. Что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru