Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.80/10: Рейтинг темы: голосов - 10, средняя оценка - 4.80
Monolitc
0 / 0 / 1
Регистрация: 17.12.2013
Сообщений: 65
1

Ключи из файла, без повторов

17.12.2013, 17:41. Просмотров 1902. Ответов 40
Метки нет (Все метки)

Нужно написать пхп код. Суть:
При нажатие на кнопку выдаёт код из файла, но чтобы коды не повторялись.(и можно только получить 1 раз)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.12.2013, 17:41
Ответы с готовыми решениями:

Выделения без повторов
Как выделить из таблицы game7 avatar но без повторов.

Массив из случайных чисел без повторов
Всем здрасте,надо сделать массив из случайных чисел без повторов не функция...

Выбрать случайное из 10 число, без повторов
Нужна функция, при вызове которой возвращала одно из 10 чисел, но каждый раз...

Выбирать из директории без повторов, если были выбраны все то заного начинать
Добрый день, я верстальщик, поэтому не ругайте ) В общем я делаю следующее......

Считать из файла MAC-адреса, и добавить их в список без повторов
есть файл такого типа: ...

40
Monolitc
0 / 0 / 1
Регистрация: 17.12.2013
Сообщений: 65
28.12.2013, 22:36  [ТС] 21
Цитата Сообщение от insideone Посмотреть сообщение
Тогда можно добавить
PHP
1
$arCodes = array_filter($arCodes);
после unset'а
Не помогло

Добавлено через 2 минуты
Цитата Сообщение от lyod Посмотреть сообщение
А чем по порядку не устраивает? Тогда добавьте array_shufle
Тоже не помогло
0
Para bellum
Эксперт PHP
4102 / 3051 / 984
Регистрация: 06.01.2011
Сообщений: 8,931
29.12.2013, 13:34 22
Значит вы неправильно делаете.
0
Monolitc
0 / 0 / 1
Регистрация: 17.12.2013
Сообщений: 65
29.12.2013, 16:19  [ТС] 23
Цитата Сообщение от lyod Посмотреть сообщение
Значит вы неправильно делаете.
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
<?php
    # Файл с кодами (коды должны быть на новой строке каждый)
    $file = 'codes.txt';
    
    try
    {        
        # Если файл не существует
        if( !file_exists( $file ) )
            throw new Exception( 'Файла нет: ' . $file );
        
        # Если файл не доступен для чтения
        if( !is_readable( $file ) )
            throw new Exception( 'Файл для чтения не доступен: ' . $file );
            
        # Получаем коды из файла
        $codes = file( $file );
        
        # Получаем ключ
        if( sizeof( $codes ) )
        {
            # Выводим код
            echo 'Ваш код: ' . array_shufle( $codes );
 
            # Формируем из массива данные для записи в файл
            $codes = implode( "", $codes );
            
            # Если файл не доступен для чтения
            if( !is_writable( $file ) )
                throw new Exception( 'Файл для записи не доступен: ' . $file );
            
            # Вписываем в файл
            file_put_contents( $file, $codes );
        }
        else
            echo 'Ключи кончились';
    }
    catch ( Exception $e )
    {
        echo $e->getMessage();
    }
?>
Ответ
PHP
1
Fatal error: Call to undefined function array_shufle() in /var/www/p224401/data/www/mineworldpvp.ru/path/getcode.php on line 22
0
ilikesmile
75 / 75 / 17
Регистрация: 29.11.2013
Сообщений: 262
29.12.2013, 16:36 24
shuffle()
1
Monolitc
0 / 0 / 1
Регистрация: 17.12.2013
Сообщений: 65
30.12.2013, 03:27  [ТС] 25
Цитата Сообщение от ilikesmile Посмотреть сообщение
shuffle()
Постоянно выдаёт число 1, которого нету в файле.
0
ilikesmile
75 / 75 / 17
Регистрация: 29.11.2013
Сообщений: 262
30.12.2013, 05:15 26
Цитата Сообщение от Monolitc Посмотреть сообщение
Постоянно выдаёт число 1, которого нету в файле.
1 — это результат выполнения функции. Метод тыка - штука хорошая, но мануал иногда читать нужно.
http://php.net/manual/ru/function.shuffle.php
1
Para bellum
Эксперт PHP
4102 / 3051 / 984
Регистрация: 06.01.2011
Сообщений: 8,931
30.12.2013, 08:06 27
Цитата Сообщение от Monolitc Посмотреть сообщение
Fatal error: Call to undefined function array_shufle()
Да, насчёт названия функции - я не прав, отрицать не буду . Вот так точно будет работать:
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
<?php
    # Файл с кодами (коды должны быть на новой строке каждый)
    $file = 'codes.txt';
    
    try
    {        
        # Если файл не существует
        if( !file_exists( $file ) )
            throw new Exception( 'Файла нет: ' . $file );
        
        # Если файл не доступен для чтения
        if( !is_readable( $file ) )
            throw new Exception( 'Файл для чтения не доступен: ' . $file );
            
        # Получаем коды из файла
        $codes = file( $file );
        
        # Получаем ключ
        if( sizeof( $codes ) )
        {
            # Перемешиваем массив
            shuffle( $codes );
            
            # Выводим код
            echo 'Ваш код: ' . array_shift( $codes );
 
            # Формируем из массива данные для записи в файл
            $codes = implode( "", $codes );
            
            # Если файл не доступен для чтения
            if( !is_writable( $file ) )
                throw new Exception( 'Файл для записи не доступен: ' . $file );
            
            # Вписываем в файл
            file_put_contents( $file, $codes );
        }
        else
            echo 'Ключи кончились';
    }
    catch ( Exception $e )
    {
        echo $e->getMessage();
    }
?>
1
Monolitc
0 / 0 / 1
Регистрация: 17.12.2013
Сообщений: 65
30.12.2013, 10:39  [ТС] 28
Цитата Сообщение от lyod Посмотреть сообщение
Да, насчёт названия функции - я не прав, отрицать не буду . Вот так точно будет работать:
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
<?php
    # Файл с кодами (коды должны быть на новой строке каждый)
    $file = 'codes.txt';
    
    try
    {        
        # Если файл не существует
        if( !file_exists( $file ) )
            throw new Exception( 'Файла нет: ' . $file );
        
        # Если файл не доступен для чтения
        if( !is_readable( $file ) )
            throw new Exception( 'Файл для чтения не доступен: ' . $file );
            
        # Получаем коды из файла
        $codes = file( $file );
        
        # Получаем ключ
        if( sizeof( $codes ) )
        {
            # Перемешиваем массив
            shuffle( $codes );
            
            # Выводим код
            echo 'Ваш код: ' . array_shift( $codes );
 
            # Формируем из массива данные для записи в файл
            $codes = implode( "", $codes );
            
            # Если файл не доступен для чтения
            if( !is_writable( $file ) )
                throw new Exception( 'Файл для записи не доступен: ' . $file );
            
            # Вписываем в файл
            file_put_contents( $file, $codes );
        }
        else
            echo 'Ключи кончились';
    }
    catch ( Exception $e )
    {
        echo $e->getMessage();
    }
?>
Спасибо работает, а можно ли поставить лимит по ип?
0
Para bellum
Эксперт PHP
4102 / 3051 / 984
Регистрация: 06.01.2011
Сообщений: 8,931
30.12.2013, 11:07 29
Цитата Сообщение от Monolitc Посмотреть сообщение
а можно ли поставить лимит по ип?
Да, можно. Но большинство IP сейчас динамичные, т.е. меняются при каждом подключении к сети. Например:
Мы установили ограничение доступа по такому IP: 255.255.255.34. Пользователь сделал запрос к вашему скрипту с таким IP: 255.255.255.34, т.е. его пропустит ваш скрипт. А потом ТОТ ЖЕ пользователь переподключится к сети, ему назначится такой IP: 255.255.255.65 - скрипт его не пустит. Можно конечно ограничить доступ по первым трём значениям IP, т.е.:
255.255.255.*
где звёздочка - там может быть любое значение и пользователя будет пропускать.
0
Monolitc
0 / 0 / 1
Регистрация: 17.12.2013
Сообщений: 65
30.12.2013, 11:27  [ТС] 30
Как можно сделать?

Добавлено через 2 минуты
Есть форум vBulletin, думаю может как-то для него сделать?
Создать в базе строку, которая заполняется после перехода по этой ссылке. Если это строка заполнена то не пропускает, а если не заполнена, то пускает.
0
Para bellum
Эксперт PHP
4102 / 3051 / 984
Регистрация: 06.01.2011
Сообщений: 8,931
30.12.2013, 11:40 31
Monolitc, т.е. вы всё-таки хотите, чтобы записывался полный IP? В таком случае, раз IP динамичные, пользователь может несколько раз получить ключ. Вы хотите так?
0
Monolitc
0 / 0 / 1
Регистрация: 17.12.2013
Сообщений: 65
30.12.2013, 12:06  [ТС] 32
Я хотел бы, чтобы получали 1 раз
0
Para bellum
Эксперт PHP
4102 / 3051 / 984
Регистрация: 06.01.2011
Сообщений: 8,931
30.12.2013, 12:41 33
Цитата Сообщение от Monolitc Посмотреть сообщение
Я хотел бы, чтобы получали 1 раз
По IP такого не получится. А пользователи, которые жмут на кнопку, зарегистрированы? То есть они жмут на кнопку, не авторизовавшись?
0
Monolitc
0 / 0 / 1
Регистрация: 17.12.2013
Сообщений: 65
30.12.2013, 14:46  [ТС] 34
Только зарегистрированные.
0
Para bellum
Эксперт PHP
4102 / 3051 / 984
Регистрация: 06.01.2011
Сообщений: 8,931
30.12.2013, 14:57 35
Цитата Сообщение от Monolitc Посмотреть сообщение
Только зарегистрированные.
А, ну тогда всё проще и надёжнее. Можно по ID фиксировать, если получил код, то больше не даём. А как ID из базы получить? Вы этот скрипт пишите как модуль к форуму vBulletin или он не имеет прямого контакта с фвижком форума?
0
Monolitc
0 / 0 / 1
Регистрация: 17.12.2013
Сообщений: 65
30.12.2013, 15:06  [ТС] 36
Не имеет прямого контакта, я ещё не занимался интегрированием к форуму.

Добавлено через 22 секунды
Цитата Сообщение от lyod Посмотреть сообщение
А, ну тогда всё проще и надёжнее. Можно по ID фиксировать, если получил код, то больше не даём. А как ID из базы получить? Вы этот скрипт пишите как модуль к форуму vBulletin или он не имеет прямого контакта с фвижком форума?
По какому иду?
0
Para bellum
Эксперт PHP
4102 / 3051 / 984
Регистрация: 06.01.2011
Сообщений: 8,931
30.12.2013, 15:21 37
Ну, у пользователя, зарегистрированного в базе, наверняка есть идентификатор (т.е. ID). Как вы собираетесь интегрировать скрипт в форум?
0
Monolitc
0 / 0 / 1
Регистрация: 17.12.2013
Сообщений: 65
30.12.2013, 15:58  [ТС] 38
Цитата Сообщение от lyod Посмотреть сообщение
Ну, у пользователя, зарегистрированного в базе, наверняка есть идентификатор (т.е. ID). Как вы собираетесь интегрировать скрипт в форум?
Ну а как по иду следить? Посмотрю модули для форума уже готовые и буду этот делать.
0
Para bellum
Эксперт PHP
4102 / 3051 / 984
Регистрация: 06.01.2011
Сообщений: 8,931
30.12.2013, 16:38 39
Ну в общем так:
- Создаёте, например, файл с названием "received.txt". Или таблицу в БД.
- Узнаёте, как в vBulletin получить ID пользователя и дополняете код, заменяете $идентификатор на переменную с ID пользователя.
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
<?php
    # Файл с кодами (коды должны быть на новой строке каждый)
    $file = 'codes.txt';
    
    # Файл с ID пользователей, получивших коды
    $received = 'received.txt';
    
    try
    {        
        # Если файл не существует
        if( !file_exists( $file ) )
            throw new Exception( 'Файла нет: ' . $file );
        
        # Если файл не доступен для чтения
        if( !is_readable( $file ) )
            throw new Exception( 'Файл для чтения не доступен: ' . $file );
            
        # Получаем коды из файла
        $codes = file( $file );
        
        # Получаем ключ
        if( sizeof( $codes ) )
        {
            # Перемешиваем массив
            shuffle( $codes );
            
            # Если файл не существует
            if( !file_exists( $received ) )
                # Создаём файл
                file_put_contents( $received, NULL );
            
            # Считываем файл в массив
            $users = file( $received );
            
            # Если ID пользователя нет в массиве получивших
            if( in_array( $идентификатор, $users ) )
                throw new Exception( 'Вы уже получали ключ!' );
                
            # Вписываем в файл ID получившего
            file_put_contents( $received, $идентификатор . "\n" );
            
            # Выводим код
            echo 'Ваш код: ' . array_shift( $codes );
       
            # Формируем из массива данные для записи в файл
            $codes = implode( "", $codes );
            
            # Если файл не доступен для чтения
            if( !is_writable( $file ) )
                throw new Exception( 'Файл для записи не доступен: ' . $file );
            
            # Вписываем в файл
            file_put_contents( $file, $codes );
        }
        else
            echo 'Ключи кончились';
    }
    catch ( Exception $e )
    {
        echo $e->getMessage();
    }
?>
0
Monolitc
0 / 0 / 1
Регистрация: 17.12.2013
Сообщений: 65
30.12.2013, 17:54  [ТС] 40
Цитата Сообщение от lyod Посмотреть сообщение
Ну в общем так:
- Создаёте, например, файл с названием "received.txt". Или таблицу в БД.
- Узнаёте, как в vBulletin получить ID пользователя и дополняете код, заменяете $идентификатор на переменную с ID пользователя.
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
<?php
    # Файл с кодами (коды должны быть на новой строке каждый)
    $file = 'codes.txt';
    
    # Файл с ID пользователей, получивших коды
    $received = 'received.txt';
    
    try
    {        
        # Если файл не существует
        if( !file_exists( $file ) )
            throw new Exception( 'Файла нет: ' . $file );
        
        # Если файл не доступен для чтения
        if( !is_readable( $file ) )
            throw new Exception( 'Файл для чтения не доступен: ' . $file );
            
        # Получаем коды из файла
        $codes = file( $file );
        
        # Получаем ключ
        if( sizeof( $codes ) )
        {
            # Перемешиваем массив
            shuffle( $codes );
            
            # Если файл не существует
            if( !file_exists( $received ) )
                # Создаём файл
                file_put_contents( $received, NULL );
            
            # Считываем файл в массив
            $users = file( $received );
            
            # Если ID пользователя нет в массиве получивших
            if( in_array( $идентификатор, $users ) )
                throw new Exception( 'Вы уже получали ключ!' );
                
            # Вписываем в файл ID получившего
            file_put_contents( $received, $идентификатор . "\n" );
            
            # Выводим код
            echo 'Ваш код: ' . array_shift( $codes );
       
            # Формируем из массива данные для записи в файл
            $codes = implode( "", $codes );
            
            # Если файл не доступен для чтения
            if( !is_writable( $file ) )
                throw new Exception( 'Файл для записи не доступен: ' . $file );
            
            # Вписываем в файл
            file_put_contents( $file, $codes );
        }
        else
            echo 'Ключи кончились';
    }
    catch ( Exception $e )
    {
        echo $e->getMessage();
    }
?>
Посмотрел исходники модулей, ну так и не понял...
0
30.12.2013, 17:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.12.2013, 17:54

Извлечь из текстового файла все рациональные числа, без повторов
ривет Всем! В программировании я совсем не силен, но жизнь сталкивает меня с...

Вывести из всех строк файла только определённыё числа без повторов
Добрый день. Есть файл .csv необходимо вывести только числа в выделенном...

Перегнать данные из любого файла с разделителями в таблицу базы данных (без повторов)
Здравствуйте. В университете дали задание по sql. СУБД Oracle. Необходимо...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru