Автор Тема: Инвайт система  (Прочитано 1814 раз)

0 Пользователей и 1 Гость смотрят эту тему.

Оффлайн Юниор

  • 4 уровень
  • ****
  • Сообщений: 475
  • карма: +7/-11
  • php forever
    • Просмотр профиля
    • СЕО,SEO,SMO
Инвайт система
« : 12 Июня 2009, 23:20:23 »
Пишу инвайт систему для сайта. Вобщем помогите мне с траблой. Нужно вывести из бд уникальный id юзера,сделать маленькую арифметику и в md5.
Ошибка в выводе id и результата. ID выводится как общее число зареганых юзеров, и результат выводится такое же число раз как и общее число зареганных юзеров


<?php
//Инвайт

# Соединямся с БД
include_once("bd.php");

if (isset(
$_COOKIE['id']) and isset($_COOKIE['hash']))
{   
    
$query mysql_query("SELECT *,INET_NTOA(user_ip) FROM users WHERE user_id = '".intval($_COOKIE['id'])."' LIMIT 1");
    
$userdata mysql_fetch_assoc($query);


    {
$uid mysql_query("SELECT user_id FROM users");
while(
$mid=mysql_fetch_row($uid))
{
$id $mid[user_id];

$c $id 5;
$a $c 1;
$b $c 2;
$d $c 3;
$f $c 4;
$md1 md5("id$c");
$md2 md5("id$a");
$md3 md5("id$b");
$md4 md5("id$d");
$md5 md5("id$f");
$result "$md1<br>$md2<br>$md3<br>$md4<br>$md5";
echo 
$result;
echo 
"<br><br><br>";
echo 
$id;
}

    }
}
 
elseif((
$userdata['user_hash'] !== $_COOKIE['hash']) or ($userdata['user_id'] !== $_COOKIE['id'])
 or ((
$userdata['user_ip'] !== $_SERVER['REMOTE_ADDR'])  and ($userdata['user_ip'] !== "0")))
    {
       include 
'error.php';
    }
?>
АКЦИЯ : каждому флудеру/оффтопщику - минус в подарок! Приведи с собой друга и отгреби за двоих!

Оффлайн DARX

  • Global Moderator
  • 7 уровень
  • *****
  • Сообщений: 1559
  • карма: +23/-5
  • Knowledge is Power
    • Просмотр профиля
    • Web-программист
Re: Инвайт система
« Ответ #1 : 13 Июня 2009, 13:35:22 »
Описание того, что нужно и сам код "слегка" не совпадают. Распиши, что дается на входе и что нужно получить на выходе.

Оффлайн Юниор

  • 4 уровень
  • ****
  • Сообщений: 475
  • карма: +7/-11
  • php forever
    • Просмотр профиля
    • СЕО,SEO,SMO
Re: Инвайт система
« Ответ #2 : 13 Июня 2009, 13:49:18 »
Страница входа
<?php
@error_reporting(E_ALL E_NOTICE);
@
ini_set('display_errors'true);
@
ini_set('html_errors'false);
@
ini_set('error_reporting'E_ALL E_NOTICE);

# Функция для генерации случайной строки
function generateCode($length=6) {
    
$chars "abcdefghijklmnopqrstuvwxyzABCDEFGHI JKLMNOPRQSTUVWXYZ0123456789";
    
$code "";
    
$clen strlen($chars) - 1;  
    while (
strlen($code) < $length) {
            
$code .= $chars[mt_rand(0,$clen)];  
    }
    return 
$code;
}


# Соединямся с БД
include_once("bd.php");

if(isset(
$_POST['submit']))
{
    
# Вытаскиваем из БД запись, у которой логин равняеться введенному
    
$query mysql_query("SELECT user_id, user_password FROM users WHERE user_login='".mysql_real_escape_string($_POST['login'])."' LIMIT 1");
    
$data mysql_fetch_assoc($query);
    
    
# Сравниваем пароли
    
if($data['user_password'] === md5(md5($_POST['password'])))
    {
        
# Генерируем случайное число и шифруем его
        
$hash md5(generateCode(10));
            
        if(!@
$_POST['not_attach_ip'])
        {
            
# Если пользователя выбрал привязку к IP
            # Переводим IP в строку
            
$insip ", user_ip=INET_ATON('".$_SERVER['REMOTE_ADDR']."')";
        }
        
        
# Записываем в БД новый хеш авторизации и IP
        
mysql_query("UPDATE users SET user_hash='".$hash."' ".$insip." WHERE user_id='".$data['user_id']."'");
        
        
# Ставим куки
        
setcookie("id"$data['user_id'], time()+60*60*24*30);
        
setcookie("hash"$hashtime()+60*60*24*30);
        
        
# Переадресовываем браузер на страницу проверки нашего скрипта
        
header("Location: account.php"); exit();
    }
    else
    {
        
$error ="<font color=\"#FF9933\">Вы ввели неправильный логин или пароль</font>";
    }
}

?>
<head>
<title>Закрытое сообщество вебмастеров</title>
</head>
<style>
body,td,th {
    font-family: Tahoma, Arial, Verdana, Helvetica, sans-serif;
    font-size: 11px;
    color: #F5F5F5;
}
</style>
<body>
<?php
   
echo $error;
?>      
<form method="POST">
<table border="0">
<tr>
<td>Логин</td><td><input name="login" type="text"><td>
</tr>
<tr>
<td>Пароль</td><td><input name="password" type="password"></td>
</tr>
</table>
Не хранить куки: <input type="checkbox" name="not_attach_ip"><br>
<input name="submit" type="submit" value="Войти">
</form><br>
<a href="registration.php" style="text-decoration: none;color:#FFA500;">Регистрация</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href="lostpswd.php" style="text-decoration: none;color:#FFA500;">Забыли пароль?</a><br>
<br>
</center>
</body>
</html>


На выходе должно получится 5 инвайт кодов для юзера. Инвайты получаются из id юзера
« Последнее редактирование: 13 Июня 2009, 13:51:00 от Юниор »
АКЦИЯ : каждому флудеру/оффтопщику - минус в подарок! Приведи с собой друга и отгреби за двоих!

Оффлайн DARX

  • Global Moderator
  • 7 уровень
  • *****
  • Сообщений: 1559
  • карма: +23/-5
  • Knowledge is Power
    • Просмотр профиля
    • Web-программист
Re: Инвайт система
« Ответ #3 : 14 Июня 2009, 00:20:25 »
Ну и? Работает?

Оффлайн Юниор

  • 4 уровень
  • ****
  • Сообщений: 475
  • карма: +7/-11
  • php forever
    • Просмотр профиля
    • СЕО,SEO,SMO
Re: Инвайт система
« Ответ #4 : 14 Июня 2009, 01:39:44 »
блин DARX не работает. Читай внимательно  >:(
АКЦИЯ : каждому флудеру/оффтопщику - минус в подарок! Приведи с собой друга и отгреби за двоих!

Оффлайн Юниор

  • 4 уровень
  • ****
  • Сообщений: 475
  • карма: +7/-11
  • php forever
    • Просмотр профиля
    • СЕО,SEO,SMO
Re: Инвайт система
« Ответ #5 : 16 Июня 2009, 23:41:19 »
Куда все кодеры подевались?
АКЦИЯ : каждому флудеру/оффтопщику - минус в подарок! Приведи с собой друга и отгреби за двоих!

Оффлайн shootnix

  • 2 уровень
  • **
  • Сообщений: 96
  • карма: +2/-0
    • Просмотр профиля
    • shootnix.есть
Re: Инвайт система
« Ответ #6 : 17 Июня 2009, 12:23:12 »
> На выходе должно получится 5 инвайт кодов для юзера. Инвайты получаются из id юзера
А где этот самый выход-то? Кроме еррора я больше ничего не увидел. Или проблема в другом?

Оффлайн Юниор

  • 4 уровень
  • ****
  • Сообщений: 475
  • карма: +7/-11
  • php forever
    • Просмотр профиля
    • СЕО,SEO,SMO
Re: Инвайт система
« Ответ #7 : 18 Июня 2009, 01:50:49 »
$uid mysql_query("SELECT user_id FROM users");
while(
$mid=mysql_fetch_row($uid))
{
$id $mid[user_id];

$c $id 5;
$a $c 1;
$b $c 2;
$d $c 3;
$f $c 4;
$md1 md5("id$c");
$md2 md5("id$a");
$md3 md5("id$b");
$md4 md5("id$d");
$md5 md5("id$f");
$result "$md1<br>$md2<br>$md3<br>$md4<br>$md5";
echo 
$result;
echo 
"<br><br><br>";
echo 
$id;
АКЦИЯ : каждому флудеру/оффтопщику - минус в подарок! Приведи с собой друга и отгреби за двоих!

Оффлайн shootnix

  • 2 уровень
  • **
  • Сообщений: 96
  • карма: +2/-0
    • Просмотр профиля
    • shootnix.есть
Re: Инвайт система
« Ответ #8 : 18 Июня 2009, 02:47:50 »
Я полагаю, надо трассировать вывод. Хотя, я не совсем уверен, что может произойти, к примеру, если запрос не сработал и $id содержит в себе пустую строку. В этом случае пустая строка, умноженная на 5 даст что?
По логике, PHP не строго типизированный язык, значит при умножении он должен перевести пустую строку к числовому контексту и тогда $id будет уже 0. А 0*5=0. А 0-1 = -1. И так далее...
Я бы еще не стал создавать так много переменных в начале, можно вопрользоваться автодекрементом:

$md1 = md5("id" + (--$c));
$md3 = md5("id" + (--$c));


и так далее ;-)

Оффлайн Юниор

  • 4 уровень
  • ****
  • Сообщений: 475
  • карма: +7/-11
  • php forever
    • Просмотр профиля
    • СЕО,SEO,SMO
Re: Инвайт система
« Ответ #9 : 18 Июня 2009, 12:17:33 »
подскажи как из бд вывести уник id  ???
А то выводится в переменной $id общее кол-во пользователей. $result дублируется несколько раз
АКЦИЯ : каждому флудеру/оффтопщику - минус в подарок! Приведи с собой друга и отгреби за двоих!

Оффлайн Rex

  • Administrator
  • 7 уровень
  • *****
  • Сообщений: 1811
  • карма: +15/-0
  • Странник
    • Просмотр профиля
    • ВКГУ им. С. Аманжолова
Re: Инвайт система
« Ответ #10 : 18 Июня 2009, 12:41:05 »
подскажи как из бд вывести уник id  ???
А то выводится в переменной $id общее кол-во пользователей. $result дублируется несколько раз
у тебя id как формируется? Это autoincrement-поле?
в случае  autoincrement-поля:

к примеру, чтобы вывести максимальный или последний:
SELECT `id` FROM `tblName` ORDER BY `id` DESC LIMIT 1;
или
SELECT MAX(id) FROM `tblName`;

Оффлайн Юниор

  • 4 уровень
  • ****
  • Сообщений: 475
  • карма: +7/-11
  • php forever
    • Просмотр профиля
    • СЕО,SEO,SMO
Re: Инвайт система
« Ответ #11 : 18 Июня 2009, 15:17:51 »
`user_id` int(11) NOT NULL auto_increment,
АКЦИЯ : каждому флудеру/оффтопщику - минус в подарок! Приведи с собой друга и отгреби за двоих!

Оффлайн Rex

  • Administrator
  • 7 уровень
  • *****
  • Сообщений: 1811
  • карма: +15/-0
  • Странник
    • Просмотр профиля
    • ВКГУ им. С. Аманжолова
Re: Инвайт система
« Ответ #12 : 18 Июня 2009, 16:47:11 »
`user_id` int(11) NOT NULL auto_increment,
ну тогда тебе мой запрос подойдет, как родной.

У меня такое ощущение, что ты идешь не по прямой дороге, а по объездной. Не могу понять, зачем тебе уникальные ID.

Запрос:
SELECT `user_id` FROM `tblUsers` ORDER BY `user_id` ASC

Он вернет тебе ресурсную ссылку на список user_id каждого пользователя, который еще и упорядочен. Пройдись по нему и все.

<?php
/******/
if (@mysql_num_row($userRes)){
$rowCount mysql_num_row($userRes);
for ($i 0$i<$rowCount,$i++){
$userId mysql_result($userRes,$i);
/*
Делай с ним что хотел
*/
}
mysql_free_result($userRes)
}
/******/
?>



Оффлайн Юниор

  • 4 уровень
  • ****
  • Сообщений: 475
  • карма: +7/-11
  • php forever
    • Просмотр профиля
    • СЕО,SEO,SMO
Re: Инвайт система
« Ответ #13 : 18 Июня 2009, 17:58:08 »
уникальные ID для арифметики  :)
СПС,за помошь! как сделаю,отпишусь
АКЦИЯ : каждому флудеру/оффтопщику - минус в подарок! Приведи с собой друга и отгреби за двоих!

Оффлайн Rex

  • Administrator
  • 7 уровень
  • *****
  • Сообщений: 1811
  • карма: +15/-0
  • Странник
    • Просмотр профиля
    • ВКГУ им. С. Аманжолова
Re: Инвайт система
« Ответ #14 : 18 Июня 2009, 18:53:18 »
уникальные ID для арифметики  :)
СПС,за помошь! как сделаю,отпишусь
И все-таки я ничего не понял:) Что-то я торможу наверно. Можно было бы проще сделать, думаю.
Лады, давай:)