Чтение с файла и запись.
#1

Помогите сделать нормальную запись и чтение с файла. Я вот сделал такое:
PHP Code:
AddEmail(email[]) {
    new 
Filefile fopen("email.ini",io_append), Str[64];
    
format(Str,sizeof(Str),"%s\n",email);
    
fwrite(file,Str);
    return 
fclose(file);
}
GetEmail(email[]) {
    new 
File:file fopen("email.ini",io_read), data[64];
    while(
fread(file,data) > 0) {
        if(
strcmp(data,email,true) == 0) return 1;
    }
    
fclose(file);
    return 
0;

Проверку делаю таким способом:
PHP Code:
                new Str[64];
                
format(Str,sizeof(Str),"%s\n",inputtext);
                if(
GetEmail(Str) == 1) return Kick(playerid); 
Но оно как то не совсем корректно работает. Что бы проверить нужно еще в конец текста добавлять \n
Можете помочь как сделать более аккуратней и что бы работало нормально?
Reply
#2

Можно создать папку, а в нее помещать файлы. Название файла - емейл. Намного быстрее будет. На счет минусов - сказать не могу, может и есть...
Reply
#3

Quote:
Originally Posted by stabker
View Post
Можно создать папку, а в нее помещать файлы. Название файла - емейл. Намного быстрее будет. На счет минусов - сказать не могу, может и есть...
мне бы хотелось реализовать все через один файл. В принципе сделал но насчет чтения не совсем нрава мне проверка. Думаю может как то помогут код до ума довести..
Reply
#4

Не чего тут уже до ума доводить, либо удаляйте спец-символы, из полученной строки, либо добавляйте их в конец емейла, который нужно найти. Когда файл будет хорошо забит, сервер будет подвисать при поиске мыла.

А какая разница сколько файлов? Это вряд ли как-то повлияет вам (если конечно не ограничит задуманный вами функционал).
Reply
#5

Kolstin, нельзя скидывать все мыла в один файл.
Тут 2 варианта:
1) Писать мыло в аккаунт пользователя. Что есть более логичными и правильным.
2) Делать на MySQL. Таблица типа: "id | nick | email", но это немного сложнее чем первый вариант...
Reply
#6

Как насчёт встроенного sql?
Reply
#7

Quote:
Originally Posted by White_116
View Post
Как насчёт встроенного sql?
Можно по подробней? Это типа файл в папке scriptfiles с названием .sql типа типа как бд?

Quote:
Originally Posted by -Stranger-
View Post
Kolstin, нельзя скидывать все мыла в один файл.
Тут 2 варианта:
1) Писать мыло в аккаунт пользователя. Что есть более логичными и правильным.
2) Делать на MySQL. Таблица типа: "id | nick | email", но это немного сложнее чем первый вариант...
Да была идея но опыта работы с MySQL нету и это усугубляет ситуацию..
Reply
#8

Не типо. Это и есть бд. На вики все функции расписаны. Так же примеров на форуме достаточно, пошурши забугорные разделы.
Reply
#9

White_116, это случаем не: https://sampwiki.blast.hk/wiki/SQLite
Как-то я это упустил это... нада ознакомиться...
Reply
#10

Quote:
Originally Posted by -Stranger-
View Post
White_116, это случаем не: https://sampwiki.blast.hk/wiki/SQLite
Как-то я это упустил это... нада ознакомиться...
Оно самое.
Reply
#11

Quote:
Originally Posted by White_116
View Post
Не типо. Это и есть бд. На вики все функции расписаны. Так же примеров на форуме достаточно, пошурши забугорные разделы.
Ага, понятно. Но тут есть минус в том что мне еще прийдеться арендовать SQL Сервер...
Я слышал что есть такая штука что то типа бд но только она храниться не на SQL сервере а в папке scriptfiles в формате .db или что то того. Это что такое? Плагин или инклуд какой то? Есть где нибуть описание функций и т.д?
Reply
#12

Есть такое, SQL называется. Ты тролль или реально не заметил, что тебе рассказали об этом в сообщении, которое ты процитировал?
Reply
#13

Quote:
Originally Posted by Alexander_Petrov
View Post
Есть такое, SQL называется. Ты тролль или реально не заметил, что тебе рассказали об этом в сообщении, которое ты процитировал?
Извиняюсь не дочитался. Еще такой вопрос(надеюсь последний) что лучше использовать если стоит выбор между SQLite И mxINI?
Reply
#14

Kolstin, ну вообще база будет всегда быстрее и эффективнее файлов, даже начать с того, что ты не перебираешь весь файл в поисках информации, а делаешь запрос, и уже проблема сервера предоставить готовую информацию, причём структура самой базы позволяет выдать эту самую информацию гораздо быстрее. Конечно если в файле храниться одно значение, то смысла самой БД отпадает, но если предполагаться наличии большого кол-ва информации, то определённо БД.
Reply
#15

Quote:
Originally Posted by -Stranger-
View Post
Kolstin, ну вообще база будет всегда быстрее и эффективнее файлов, даже начать с того, что ты не перебираешь весь файл в поисках информации, а делаешь запрос, и уже проблема сервера предоставить готовую информацию, причём структура самой базы позволяет выдать эту самую информацию гораздо быстрее. Конечно если в файле храниться одно значение, то смысла самой БД отпадает, но если предполагаться наличии большого кол-ва информации, то определённо БД.
А если использовать SQLite и записывать Email в аккаунты сам то можно ли будет сделать проверку (использовался ли емейл при реге) считать инфу со всех аккаунтов при проверке. Это же уже в таблицах будет и я так понял что это сделать - можно?
Reply
#16

Quote:
Originally Posted by Kolstin
View Post
А если использовать SQLite и записывать Email в аккаунты сам то можно ли будет сделать проверку (использовался ли емейл при реге) считать инфу со всех аккаунтов при проверке. Это же уже в таблицах будет и я так понял что это сделать - можно?
да, просто почитай про запросы или посмотри примеры.
вот пример
PHP Code:
SELECT FROM `таблица аккаунтовWHERE `Email` = '%s' 
Email - название столбца в базе.
Reply
#17

Если дословно "считать инфу со всех аккаунтов", то:
Code:
SELECT `Email` FROM `таблица аккаунтов`
На выходе будет массив всех мыл из таблицы.

В запросе можно использовать критерии, например:
Code:
SELECT `Email` FROM `таблица аккаунтов` WHERE `sex` = 'male'
На выходе будет массив всех мыл из таблицы, у которых пол = male.

Так-же можно сделать сортировку, например по нику:
Code:
SELECT `Email` FROM `таблица аккаунтов` WHERE `sex` = 'male' ORDER BY `nick` ASC
На выходе будет отсортированный по ячейки `nick` массив (по возрастанию) всех мыл из таблицы, у которых пол = male.

Ещё полезная часть запроса это LIMIT, например:
Code:
SELECT `Email` FROM `таблица аккаунтов` LIMIT 10
На выходе будет массив первых 10 мыл из таблицы.


Все предложенные варианты можно комбинировать как угодно, для достижения нужного результата.
Удачи
Reply
#18

Quote:
Originally Posted by Kolstin
View Post
Ага, понятно. Но тут есть минус в том что мне еще прийдеться арендовать SQL Сервер...
Я слышал что есть такая штука что то типа бд но только она храниться не на SQL сервере а в папке scriptfiles в формате .db или что то того. Это что такое?
Это и есть оно, ничего арендовать не нужно!
Reply
#19

Quote:
Originally Posted by Kolstin
View Post
А если использовать SQLite и записывать Email в аккаунты сам то можно ли будет сделать проверку (использовался ли емейл при реге) считать инфу со всех аккаунтов при проверке. Это же уже в таблицах будет и я так понял что это сделать - можно?
SELECT `ник/ид` FROM `таблица аккаунтов` WHERE `Email`= 'мыло' LIMIT 1

Если вернет запрашиваемые данные (ник/ид), значит емейл занят.
Reply
#20

stabker, мне кажется лучше тогда так: "SELECT COUNT(*) FROM `таблица аккаунтов` WHERE `Email`= 'мыло'". Вернёт кол-во записей, числом.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)