[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вывод статистики из файла
YoYo
Помогите сделать вывод статистики из файла.
Содержание файла:

pPass = 123456
pLock = 0
pALevel = 3
pLevel = 3
pRespect = 7
pSkin = 120
pFrac = 12
pRank = 7
pJob = 4
pSJob = 1
pLicA = 0
pLicB = 1
pLicC = 0
pLicD = 0
pGunLic = 0
pWLevel = 0
pJailTime = 0
pMuteTime = 0
pMoney = 14400
pMaterials = 0
pHMaterials = 0
pDrugs = 0
pHDrugs = 0
pProds = 0
pPackets = 0
pHouse = 0
pBussines = 0
pWeapon = 24
pAmmo = 100


Вывел вот так:

<?php
if(!file_exists("test.ini")) echo "Ошибка: Файл с аккаунтом не найден";
$file = fopen("test.ini", "rt");
while(!feof($file))
{
$tmp = fgets($file, 512);
$account = explode(" = ", $tmp);
echo $account[0] . " = " . $account[1] . "<br />";
}
fclose($file);
?>


А как заменить системные ключи типа "pPass или pLock" на пользовательские "Пароль или Блокировка"?!



Спустя 6 минут, 52 секунды (6.08.2011 - 16:02) kovaldm написал(а):
Юзай ассоциативный массив.

Спустя 7 минут, 5 секунд (6.08.2011 - 16:09) YoYo написал(а):
А подробнее можно? ><
Пример кода бы желательно...

Спустя 5 минут, 17 секунд (6.08.2011 - 16:14) jetistyum написал(а):
можно так например
<?php
if(!file_exists("test.ini")) echo "Ошибка: Файл с аккаунтом не найден";
$file = fopen("test.ini", "rt");
while(!feof($file))
{
$tmp = fgets($file, 512);
$account = explode(" = ", $tmp);
if ($account[0]=='pPass'){
$account[0] = 'Пароль';
}
echo $account[0] . " = " . $account[1] . "<br />";
}
fclose($file);
?>


или так
<?php
if(!file_exists("test.ini")) echo "Ошибка: Файл с аккаунтом не найден";
$file = fopen("test.ini", "rt");
while(!feof($file))
{
$tmp = fgets($file, 512);
$tmp = str_replace(array('pPass', 'pLock'), array('Пароль', 'Блокировка'), $tmp);
$account = explode(" = ", $tmp);

echo $account[0] . " = " . $account[1] . "<br />";
}
fclose($file);
?>


но в этом случае будет заменяться в любом месте подстроки

Спустя 1 минута, 28 секунд (6.08.2011 - 16:16) kovaldm написал(а):
Как - то так.

    $vars = array('pPass' => 'Пароль',
'pLock' => 'Блокировка',
...,
...,
...,

'pMoney' => 'Денежки');

if(!file_exists("test.ini"))
echo "Ошибка: Файл с аккаунтом не найден";

$file = fopen("test.ini", "rt");

while(!feof($file))
{
$tmp = fgets($file, 512);
$account = explode(" = ", $tmp);
echo $vars[$account[0]] . " = " . $account[1] . "<br />";
}

fclose($file);

Спустя 11 секунд (6.08.2011 - 16:16) jetistyum написал(а):
А вообще кажется кто-то не хочет использовать базы данных, и придумывает себе проблемы.

Спустя 3 минуты, 37 секунд (6.08.2011 - 16:20) YoYo написал(а):
Цитата (jetistyum @ 6.08.2011 - 13:16)
А вообще кажется кто-то не хочет использовать базы данных, и придумывает себе проблемы.

Я то хочу, но некоторым не объяснить что MySQL круче smile.gif

kovaldm, спасибо happy.gif

Спустя 1 час, 15 минут, 58 секунд (6.08.2011 - 17:36) YoYo написал(а):
Сделал чтение аккаунта игрока из файла в зависимости от введёного логина, а вот как проверить пароль, т.е. правильно или нет введён ><

Вот так я сделал:

<?php
$login = $_POST['name'];
$password = $_POST['password'];
if(!file_exists("./accounts/" . $login . ".ini")) exit("Неверный логин!");
else
{
$vars = array('pPass' => 'Пароль',
'pLock' => 'Бан',
'pALevel' => 'Уровень Администрирования',
'pLevel' => 'Уровень',
'pRespect' => 'Респекты',
'pSkin' => 'Скин',
'pFrac' => 'Фракция',
'pRank' => 'Ранг',
'pJob' => 'Работа',
'pSJob' => 'Навык работы',
'pLicA' => 'Лицензия на вождение мото',
'pLicB' => 'Лицензия на вождение авто',
'pLicC' => 'Лицензия на плавание',
'pLicD' => 'Лицензия на полёты',
'pGunLic' => 'Лицензия на оружие',
'pWLevel' => 'Уровень розыска',
'pJailTime' => 'Срок',
'pMuteTime' => 'Время мута',
'pMoney' => 'Деньги',
'pWeapon' => 'Оружие',
'pAmmo' => 'Патроны',
'pMaterials' => 'Материалы',
'pHMaterials' => 'Материалы на складе',
'pDrugs' => 'Наркотики',
'pHDrugs' => 'Наркотики на складе',
'pProds' => 'Продукты',
'pPackets' => 'Пакеты',
'pHouse' => 'Дом',
'pBussines' => 'Бизнес');

$file = fopen("./accounts/" . $login . ".ini", "rt");
while(!feof($file))
{
$tmp = fgets($file, 512);
$account = explode(" = ", $tmp);
echo $vars[$account[0]] . ": " . $account[1] . "<br />";
}
fclose($file);
}


Как пароль проверить, ума не приложу :(

Спустя 14 минут, 26 секунд (6.08.2011 - 17:50) kovaldm написал(а):
Проверяй логин + пароль одновременно. То есть, если указанный логин существует и пароль верен, то все ок, если логина нет или пароль не подходит к логину - ошибка.

Спустя 2 минуты, 15 секунд (6.08.2011 - 17:52) YoYo написал(а):
Проблема в другом, перед тем как сравнивать, как прочитать из файла строку
pPass = 123456

Спустя 10 минут, 9 секунд (6.08.2011 - 18:03) kovaldm написал(а):
$text = file_get_contents($filename);
$text = explode("\n", $text);
foreach($text as $v)
{
$tmp = explode(" = ", $v);
$txt[$tmp[0]] = $tmp[1];
}

echo $txt['pPass'];

Спустя 6 минут, 25 секунд (6.08.2011 - 18:09) YoYo написал(а):
Удалено

Разобрался, спасибо ещё раз, второй раз выручаешь happy.gif

Спустя 2 минуты, 3 секунды (6.08.2011 - 18:11) Winston написал(а):
Цитата (YoYo @ 6.08.2011 - 18:09)
$filename - это открытый файл?!

Это имя файла из которого брать даные

Спустя 9 минут, 37 секунд (6.08.2011 - 18:21) YoYo написал(а):
А как сравнить то?! xD
Сравниваю так:

if($password != $tmp['pPass']) exit("Ошибка: Неверный пароль!");

Всё время не совпадают пароли...

$password = $_POST['password'];

Хотя если выводит обе переменные, они обе равны '123456'...

Спустя 2 минуты, 22 секунды (6.08.2011 - 18:23) Winston написал(а):
Попробуй так
if($password != (int)$txt['pPass']) exit("Ошибка: Неверный пароль!");

Спустя 1 минута, 59 секунд (6.08.2011 - 18:25) YoYo написал(а):
Твой вариант работает, но что если пароль будет например "parol"?!

Спустя 2 минуты, 39 секунд (6.08.2011 - 18:28) Winston написал(а):
Цитата (YoYo @ 6.08.2011 - 18:25)
но что если пароль будет например "parol"?!

Попробуй так
if($password != trim($txt['pPass'])) exit("Ошибка: Неверный пароль!");

Спустя 1 минута, 10 секунд (6.08.2011 - 18:29) YoYo написал(а):
Цитата (Winston @ 6.08.2011 - 15:28)
Цитата (YoYo @ 6.08.2011 - 18:25)
но что если пароль будет например "parol"?!

Попробуй так
if($password != trim($txt['pPass'])) exit("Ошибка: Неверный пароль!");

Работает happy.gif Спасибо

Спустя 3 минуты, 8 секунд (6.08.2011 - 18:32) kovaldm написал(а):
Пароли храни в виде хеш-кода.

Спустя 9 минут, 57 секунд (6.08.2011 - 18:42) YoYo написал(а):
А как расшифровать пароль из хэш? (Шифроваться он будет не в PHP скрипте >< )

Спустя 54 секунды (6.08.2011 - 18:43) kovaldm написал(а):
Расшифровать нельзя, для проверки сравнивают хэш-коды.

Спустя 43 секунды (6.08.2011 - 18:43) YoYo написал(а):
А ну да, я ступил xD
P.S. Спасибо в очередной раз happy.gif (поставил по +)

Спустя 57 минут, 4 секунды (6.08.2011 - 19:41) YoYo написал(а):
Опять я ><
Ничего что я в одной теме всё пишу?! Просто чтобы не засорять форум happy.gif

Теперь такой вопрос, как редактировать значение ключа pPass? (да, да, хочу сделать смену пароля xD)?!

Спустя 18 минут, 51 секунда (6.08.2011 - 19:59) kovaldm написал(а):
Все в обратной последовательности.
После чтения и редактирования массив $txt склеиваешь в обратном порядке и записываешь в тот же файл.

Спустя 1 час, 17 минут, 44 секунды (6.08.2011 - 21:17) YoYo написал(а):
Разобрался! :lol:
Сделал вот так:

<?php
/* Ловим POST данные
с формы */

$login = trim(stripslashes($_POST['name']));
$password = trim(stripslashes($_POST['password']));
/* Проверяем на существование
аккаунта игрока */

if(!file_exists("./accounts/" . $login . ".ini")) exit("Ошибка: Неверный логин!");
/* Проверяем правильно ли
введён пароль */

$text = file_get_contents("./accounts/" . $login . ".ini");
$text = explode("\n", $text);
foreach($text as $value)
{
$tmp = explode(" = ", $value);
$txt[$tmp[0]] = $tmp[1];
}
if($password != trim($txt['pPass'])) exit("Ошибка: Неверный пароль!");
$newpass = file("./accounts/" . $login . ".ini");
$newpass[0] = "pPass = " . $_POST['newpass'];
$text = file_put_contents("./accounts/" . $login . ".ini", $newpass);
?>


Маленький нюанс остался, он записывает и убирает перенос строки, т.е. послзе изменения pPass получается:

pPass = newpasspLock = 0
pALevel = 3
pLevel = 0
...


Как туда перенос всунуть? ><

Вопрос снят
Перенос строки: "\r\n"

Спустя 4 часа, 54 минуты, 53 секунды (7.08.2011 - 02:12) YoYo написал(а):
Опять проблема ><
Хотел сделать что-то типо меню. Но при переходе по тому-же адресу только с другими $_GET параметрами, теряются данные $_POST, т.е. сбивается авторизация... Подскажите как быть?!
Вот код:

<html>
<
link rel = "stylesheet" type = "text/css" href = "style/default.css" />
<?php
include "inc/cfg.php";
$login = trim(stripslashes($_POST['login']));
$password = trim(stripslashes($_POST['password']));
if(!$_GET['action'])
{
if(!file_exists($path . "/" . $login . ".ini")) exit("<p class = 'error'>Ошибка: Аккаунт с указаным логином не найден</p>
<p><a href = '/'>На Главную</a>"
);
echo "<p class = 'title'>Ваш Ник: " . $login , "</p>";
echo "<p><a href = 'ucp.php?action=stats'>Статистика</a><br />
<a href = 'ucp.php?action=changepass'>Сменить пароль</a></p>"
;
echo "<p><a href = '/'>Выход</a></p>";
echo "<p class = 'copyright'>© Easy UCP by eFFect aka YoYo 2011</p>";
}
else if($_GET['action'] == 'stats')
{
echo "<p class = 'title'>Ваш Ник: " . $login , "</p>";
echo "<p>Статистика</p>";
$readacc = file_get_contents($path . "/" . $login . ".ini");
$tmpacc = explode("\n", $readacc);
foreach($tpmacc as $value)
{
$tmp = explode(" = ", $value);
$stats[$tmp[0]] = $tmp[1];
if($password != trim($stats['pPass'])) exit("<p class = 'error'>Ошибка: Неверный пароль</p>
<p><a href = '/'>На Главную</a>"
);
echo $stats[$tmp[0]] . ': ' . $tmp[1];
}
echo "<p><a href = 'ucp.php'>Назад</a></p>";
}
?>
</html>

Спустя 8 минут, 6 секунд (7.08.2011 - 02:20) waldicom написал(а):
Один из возможныз вариантов - записывать в сессию какой-либо параметр (флаг) после успешной авторизации.

Спустя 8 часов, 16 минут, 29 секунд (7.08.2011 - 10:37) YoYo написал(а):
Хотел заюзать сессии, нашёл вроди инфу про них.
Сделал так:

<html>
<
link rel = "stylesheet" type = "text/css" href = "style/default.css" />
<?php
ini_set(session.use_cookies, "1");
ini_set(session.use_trans_sid, "1");
session_start();
include "inc/cfg.php";
$_SESSION['login'] = trim(stripslashes($_POST['login']));
$_SESSION['password'] = trim(stripslashes($_POST['password']));
if(!$_GET['action'])
{
if(!file_exists($path . "/" . $_SESSION['login'] . ".ini")) exit("<p class = 'error'>Ошибка: Аккаунт с указаным логином не найден</p>
<p><a href = '/'>На Главную</a>"
);
echo "<p class = 'title'>Ваш Ник: " . $login , "</p>";
echo "<p><a href = 'ucp.php?action=stats'>Статистика</a><br />
<a href = 'ucp.php?action=changepass'>Сменить пароль</a></p>"
;
echo "<p><a href = '/'>Выход</a></p>";
echo "<p class = 'copyright'>© Easy UCP by eFFect aka YoYo 2011</p>";
}
else if($_GET['action'] == 'stats')
{
echo "<p class = 'title'>Ваш Ник: " . $_SESSION['login'] , "</p>";
echo "<p>Статистика</p>";
$readacc = file_get_contents($path . "/" . $_SESSION['login'] . ".ini");
$tmpacc = explode("\n", $readacc);
foreach($tpmacc as $value)
{
$tmp = explode(" = ", $value);
$stats[$tmp[0]] = $tmp[1];
if($_SESSION['password'] != trim($stats['pPass'])) exit("<p class = 'error'>Ошибка: Неверный пароль</p>
<p><a href = '/'>На Главную</a>"
);
echo $stats[$tmp[0]] . ': ' . $tmp[1];
}
echo "<p><a href = 'ucp.php'>Назад</a></p>";
}
?>
</html>


Выдаёт ошибки:

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at Z:\home\test1.ru\www\ucp.php:3) in Z:\home\test1.ru\www\ucp.php on line 6

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at Z:\home\test1.ru\www\ucp.php:3) in Z:\home\test1.ru\www\ucp.php on line 6


Ну и классическое: "Помогите исправить :("

Спустя 1 минута, 30 секунд (7.08.2011 - 10:38) Winston написал(а):
Сессии можно прописать до любого вывода на экран.
А это
Цитата (YoYo @ 7.08.2011 - 02:12)
<html>
<link rel = "stylesheet" type = "text/css" href = "style/default.css" />

Вывод на экран.

Спустя 11 минут, 43 секунды (7.08.2011 - 10:50) neadekvat написал(а):
http://phpforum.ru/index.php?showtopic=43337
Пункты 3, 4.

И по тому, что выше - много кода. Где-то же промелькнула хорошая идея.

$arr = parse_ini_file('new.ini'); // считываем файл. Все, больше ничего не надо.

$arr['pPass'] = 123; // Меняем значение

// Записываем измененный массив.

foreach($arr as $key => $value)
$text[] = "$key = $value";

file_put_contents('new.ini', implode("\n", $text));

Спустя 7 часов, 27 минут, 5 секунд (7.08.2011 - 18:17) YoYo написал(а):
Спасибо, исправил. А теперь другая проблема, поменял кодировку на UTF-8 без BOM (чтобы убрать Warning), но теперь Русский текст отображается так:
Статистика

Как исправить?

Спустя 38 минут, 43 секунды (7.08.2011 - 18:56) neadekvat написал(а):
Текст где хранится, в файлах? Проверь, чтобы они точно были в кодировке UTF-8, и чтобы браузер тоже был выставлен в эту кодировку.

Если из базы данных.. то ты понимаешь, да, где искать причину?

Спустя 5 минут, 22 секунды (7.08.2011 - 19:01) YoYo написал(а):
В файлах ^_^ Перекодировал в ANSI, всё стало на место... (перед заливкой на хост просто назад в UTF переконвертирую ><)

Опять я со своими проблемами, почему-то при переходе по одному и тому же адресу но с разными GET параметрами, теряются $_SESSION переменные, делаю так:

<?php
ini_set(session.use_cookies, true);
ini_set(session.use_trans_sid, true);
session_start();
include "inc/cfg.php";
$_SESSION['login'] = trim(stripslashes($_POST['login']));
$_SESSION['password'] = trim(stripslashes($_POST['password']));
if(isset($_GET['stats']))
{
if(isset($_SESSION['logged']))
{
$acc = parse_ini_file($path . "/" . $_SESSION['login'] . ".ini");
foreach($arr as $key => $value) echo $key . ": " . $value;
}
else exit("Error: Ошибка авторизации (#3)");
}
else if(file_exists($path . "/" . $_SESSION['login'] . ".ini"))
{
$acc = parse_ini_file($path . "/" . $_SESSION['login'] . ".ini");
if($_SESSION['password'] == $acc['pPass'])
{
$_SESSION['logged'] = '1';
echo "<a href = 'ucp.php?stats'>Статистика</a><br />";
echo "<a href = 'ucp.php?changepass'>Сменить пароль</a><br />";
echo "<a href = 'ucp.php?logout'>Выход</a>";
}
else exit("Error: Неверный пароль (#2)");
}
else exit("Error: Аккаунт с указанным логином не найден (#1)");
?>


При переходе по ucp.php?stats, переменные $_SESSION уже пустые :(

Спустя 40 минут, 21 секунда (7.08.2011 - 19:41) neadekvat написал(а):
Там сессия то стартуется?

Спустя 14 минут, 1 секунда (7.08.2011 - 19:55) YoYo написал(а):
Да. Вот, немного переделал:

index.php

<?php
session_start();
include "inc/cfg.php";
if(!isset($_POST['submit']))
{
?>
<form method = "post" action = "index.php">
Игровой Ник:<br /><input name = "login" type = "text" size = "18" maxlength = "32"><br />
Пароль:<br /><input name = "password" type = "password" size = "18" maxlength = "32"><br />
<
input name = "submit" type = "hidden">
<
input type = "submit" value = "Войти"></form>
<?php
}
else
{
if(!file_exists($path . "/" . $_POST['login'] . ".ini")) exit("Error: Аккаунт с указанным логином не найден (#1)");
$_SESSION['login'] = $_POST['login'];
$_SESSION['password'] = $_POST['password'];
Header("Location: ucp.php");
}
?>


ucp.php

<?php
session_start();
include "inc/cfg.php";
if(isset($_GET['stats']))
{
if(isset($_SESSION['logged']))
{
$acc = parse_ini_file($path . "/" . $_SESSION['login'] . ".ini");
foreach($arr as $key => $value) echo $key . ": " . $value;
}
else exit("Error: Ошибка авторизации (#3)");
}
else
{
$acc = parse_ini_file($path . "/" . $_SESSION['login'] . ".ini");
if($_SESSION['password'] == $acc['pPass'])
{
$_SESSION['logged'] = '1';
echo "<a href = 'ucp.php?stats'>Статистика</a><br />";
echo "<a href = 'ucp.php?changepass'>Сменить пароль</a><br />";
echo "<a href = 'ucp.php?logout'>Выход</a>";
}
else exit("Error: Неверный пароль (#2)");
}
?>


Проблема та же, теряются переменные сессии... Выручайте ><

P.S. Мб Denwer как-то не так настроен?! Я его скачал, установил, ничего не менял.

Спустя 42 минуты, 3 секунды (7.08.2011 - 20:37) neadekvat написал(а):
Проверь, на странице, где не доступен _SESSION, есть ли в кукисах соответствующая запись (PHPSESSID)

Спустя 9 минут, 23 секунды (7.08.2011 - 20:47) YoYo написал(а):
Эмм... А как проверить то?!

Включил показ ошибок, появился нотис:
Notice: Undefined index: login in Z:\home\test1.ru\www\ucp.php on line 17

Спустя 10 минут, 30 секунд (7.08.2011 - 20:57) neadekvat написал(а):
YoYo, зависит от браузера.
В Опере, например, правой кнопкой (или F12) -> edit site preferences (Настройки для сайта в русской локализации, кажется) -> Cookies.

Спустя 4 минуты, 58 секунд (7.08.2011 - 21:02) YoYo написал(а):
Нашёл, но куков для test1.ru там нет...

Спустя 3 минуты, 44 секунды (7.08.2011 - 21:06) neadekvat написал(а):
Цитата (YoYo @ 7.08.2011 - 22:02)
Нашёл, но куков для test1.ru там нет...

Вообще нет? Не может ж быть такого, раз у тебя на одной странице кукисы есть, то они там должны остаться.
Может, где-то уничтожаешь их, или домен меняешь?

Спустя 3 минуты, 48 секунд (7.08.2011 - 21:10) YoYo написал(а):
Цитата (neadekvat @ 7.08.2011 - 18:06)
Цитата (YoYo @ 7.08.2011 - 22:02)
Нашёл, но куков для test1.ru там нет...

Вообще нет? Не может ж быть такого, раз у тебя на одной странице кукисы есть, то они там должны остаться.
Может, где-то уничтожаешь их, или домен меняешь?

Нет, я весь код скинул ><

Спустя 1 минута, 17 секунд (7.08.2011 - 21:11) neadekvat написал(а):
Ну, а когда заходишь на страницу, где присваиваешь значения сессионным переменным, есть кука?

Спустя 2 минуты, 39 секунд (7.08.2011 - 21:14) YoYo написал(а):
Добавил:

ini_set("session.use_cookies", "1");
ini_set("session.use_trans_sid", "1");


Появились куки на домен test1.ru >< И вот такие нотисы:
user posted image

А вот так выглядит эта самая кука:
user posted image

Спустя 33 минуты, 38 секунд (7.08.2011 - 21:47) YoYo написал(а):
Цитата (neadekvat @ 7.08.2011 - 18:11)
Ну, а когда заходишь на страницу, где присваиваешь значения сессионным переменным, есть кука?

А это как проверить?!

Спустя 35 минут, 36 секунд (7.08.2011 - 22:23) YoYo написал(а):
Разобрался! :lol:
neadekvat, спасибо большое за то что долго и упорно пытался мне помочь ^_^ (+ уже давал)

Просто добавил

ini_set("session.use_cookies", "1");
ini_set("session.use_trans_sid", "1");

И в ucp.php, всё заработало! ><

Спустя 1 час, 3 минуты, 20 секунд (7.08.2011 - 23:26) neadekvat написал(а):
Цитата (YoYo @ 7.08.2011 - 23:23)
спасибо большое за то что долго и упорно пытался мне помочь happy.gif

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

Спустя 42 минуты, 31 секунда (8.08.2011 - 00:09) YoYo написал(а):
Ну так то да, уже не первый раз методом проб и ошибок решаю проблему ^_^ Но без вашей помощи, врядли что нибудь получилось бы.

Новая задача!
Хочу сделать создание нового аккаунта через UCP, т.е. нужно создать файл с данными игрока. Данные выглядят так:


pPass = 123456

pLock = 0

pALevel = 3

pLevel = 3

pRespect = 7

pSkin = 120

pFrac = 12

pRank = 7

pJob = 4

pSJob = 1

pLicA = 0

pLicB = 1

pLicC = 0

pLicD = 0

pGunLic = 0

pWLevel = 0

pJailTime = 0

pMuteTime = 0

pMoney = 14400

pMaterials = 0

pHMaterials = 0

pDrugs = 0

pHDrugs = 0

pProds = 0

pPackets = 0

pHouse = 0

pBussines = 0

pWeapon = 24

pAmmo = 100


Как создать файл я знаю (file с параметром w), а вот как записать в него данные аля:
ключ = параметр

Это уже проблема... Жду помощи от гуpy ><

Спустя 9 минут, 42 секунды (8.08.2011 - 00:19) neadekvat написал(а):
Получать данные из формы умеешь?

Спустя 10 минут, 8 секунд (8.08.2011 - 00:29) YoYo написал(а):
Цитата (neadekvat @ 7.08.2011 - 21:19)
Получать данные из формы умеешь?

Да smile.gif Сделал же как то авторизацию biggrin.gif

Спустя 19 минут, 16 секунд (8.08.2011 - 00:48) neadekvat написал(а):
Ну так и отлично.

Называешь поля формы также, как у тебя называются значения в файле.

Для удобства можно сделать так:
// В нужно последовательности, все твои значения
$isset_keys = array('pAmmo', 'pWeapon', ... );

foreach ($isset_keys as $val)
{
$data[] = "$val = {$_POST[$val]}";
}

$data = implode("\n", $data);
file_put_contents('file.ini', $data);


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

Спустя 10 минут, 8 секунд (8.08.2011 - 00:58) YoYo написал(а):
Имена файлов соответствуют игровому нику пользователя.
Дело в том что пользователь должен задавать только Ник (имя_файла.ini) и Пароль (pPass = пароль), а остальные значения идут по умолчанию одни и теже для всех новых аккаунтов...

Спустя 7 минут, 46 секунд (8.08.2011 - 01:06) neadekvat написал(а):
Ок, в чем проблема?

Создай файл default.ini

if ( ! file_exists($_POST['login'])) {
$data = parse_ini_file('default.ini');
$data['pPass'] = $_POST['pass']; // А _POST уже от пользователя

$data = implode("\n", $data);
file_put_contents("$_POST[login].ini", $data);
} else {
echo 'Login not available';
}


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

Спустя 13 минут, 37 секунд (8.08.2011 - 01:19) YoYo написал(а):
Это рег. выражение писать надо? (чтобы разрешить использовать в нике опр. символы)

Спустя 3 минуты, 23 секунды (8.08.2011 - 01:23) neadekvat написал(а):
Цитата (YoYo @ 8.08.2011 - 02:19)
Это рег. выражение писать надо? (чтобы разрешить использовать в нике опр. символы)

Да, я бы выбрал этот путь.

Спустя 3 минуты, 28 секунд (8.08.2011 - 01:26) YoYo написал(а):
Цитата (neadekvat @ 7.08.2011 - 22:23)
Цитата (YoYo @ 8.08.2011 - 02:19)
Это рег. выражение писать надо? (чтобы разрешить использовать в нике опр. символы)

Да, я бы выбрал этот путь.

Очередной спасибон! Пойду пытаться...

Спустя 9 минут, 11 секунд (8.08.2011 - 01:35) YoYo написал(а):
Вроди бы сделал всё как описано, но записывает данные без ключей.
Вот файл reg.php:

<?php
include "inc/cfg.php";
if(!isset($_POST['submit']))
{
echo "<form method = 'post'>
Игровой Ник:<br /><input name = 'login' type = 'text' size = '18' maxlength = '32'><br />
Пароль:<br /><input name = 'password' type = 'password' size = '18' maxlength = '32'><br />
<input name = 'submit' type = 'hidden'>
<input type = 'submit' value = 'Регистрация'></form>"
;
echo "<a href = 'index.php'>Назад</a>";
}
else
{
if(file_exists($path . "/" . $_SESSION['username'] . ".ini")) exit("Error: Игрок с таким логином уже существует (#5)");
$def = parse_ini_file($path . "/default.ini");
$def['pPass'] = $_POST['key'];
$def = implode("\n", $def);
file_put_contents($path . "/" . $_POST['login'] . ".ini", $def);
echo "Новый аккаунт успешно создан!<br />";
echo "<a href = 'index.php'>Назад</a>";
}


Вот как он записывает:


0
0
0
0
23
0
0
0
0
0
0
0
0
0
0
0
0
1000
0
0
0
0
0
0
0
0
0
0

Спустя 9 часов, 1 минута, 57 секунд (8.08.2011 - 10:37) YoYo написал(а):
Сделал регистрацию по примеру изменения пароля ><
Вот код:

<?php
include "inc/cfg.php";
if(!isset($_POST['submit']))
{
echo "Регистрация";
echo "<form method = 'post'>
Игровой Ник:<br /><input name = 'login' type = 'text' size = '18' maxlength = '32'><br />
Пароль:<br /><input name = 'password' type = 'password' size = '18' maxlength = '32'><br />
<input name = 'submit' type = 'hidden'>
<input type = 'submit' value = 'Регистрация'></form>"
;
echo "<a href = 'index.php'>Назад</a>";
}
else
{
if(file_exists($path . "/" . $_SESSION['login'] . ".ini")) exit("Error: Игрок с таким логином уже существует (#5)");
else if(!isset($_POST['login']) || !isset($_POST['password'])) exit("Error: Ошибка регистрации (#6)");
$def = parse_ini_file($path . "/default.ini");
$def['pPass'] = $_POST['password'];
foreach($def as $key => $value) $newacc[] = "$key = $value\r\n";
file_put_contents($path . "/" . $_POST['login'] . ".ini", implode("\n", $newacc));
echo "Новый аккаунт успешно создан!<br />";
echo "<a href = 'index.php'>Назад</a>";
}
?>


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

Очередной раз убедился...

Спустя 6 минут, 36 секунд (8.08.2011 - 10:44) neadekvat написал(а):
Цитата (YoYo @ 8.08.2011 - 11:37)
Очередной раз убедился

^__^

Спустя 1 час, 34 минуты, 58 секунд (8.08.2011 - 12:19) YoYo написал(а):
А вот такой вопрос, как сделать чтобы некоторые ключи не выводились в статистику?

Вот код вывода самой статистики:

$acc = parse_ini_file($path . "/" . $_SESSION['username'] . ".ini");
echo "Вы зашли в аккаунт: " . $_SESSION['username'] . "<br />";
foreach($acc as $key => $value)
{
if($key == "pPass") $value = "******";
else if($key == "pLock") $value = StatName($value);
else if($key == "pSkin") $value = "<img src = 'skins/Skin_$value.png' />";
else if($key == "pFrac") $value = FracName($value);
else if($key == "pJob") $value = JobName($value);
else if($key == "pLicA") $value = StatName($value);
else if($key == "pLicB") $value = StatName($value);
else if($key == "pLicC") $value = StatName($value);
else if($key == "pLicD") $value = StatName($value);
else if($key == "pGunLic") $value = StatName($value);
else if($key == "pWeapon") $value = WeaponName($value);
echo $vars[$key] . ": " . $value . "<br />";
}


Как сделать чтобы допустим pMoney = $value пропускалось и не выводилось ><

Вроде сделал xD

if($key == "pMoney") continue;

Спустя 27 минут, 27 секунд (8.08.2011 - 12:46) neadekvat написал(а):
YoYo, есть возможность избавиться от кучи elseif

foreach($acc as $key => $value) 
{
if($key == 'pMoney')
continue;

switch ($key) {
case 'pPass':
$value = "******";
break;

case 'pJob':
$value = JobName($value);
break;

case 'pFrac':
$value = FracName($value);
break;

case 'pWeapon':
$value = WeaponName($value);
break;

default:
$value = StatName($value);
}

echo $vars[$key] . ": " . $value . "<br />";
}

Спустя 1 час, 13 минут, 22 секунды (8.08.2011 - 14:00) YoYo написал(а):
Цитата (neadekvat @ 8.08.2011 - 09:46)
YoYo, есть возможность избавиться от кучи elseif

foreach($acc as $key => $value) 
{
if($key == 'pMoney')
continue;

switch ($key) {
case 'pPass':
$value = "******";
break;

case 'pJob':
$value = JobName($value);
break;

case 'pFrac':
$value = FracName($value);
break;

case 'pWeapon':
$value = WeaponName($value);
break;

default:
$value = StatName($value);
}

echo $vars[$key] . ": " . $value . "<br />";
}

Спасибо happy.gif Использовал.

Спустя 1 день, 32 минуты, 53 секунды (9.08.2011 - 14:33) YoYo написал(а):
Скажите, а как можно проверить наличие нужного значение в массиве $array.
Допустим у нас есть массив $array с 2 значениями, "a" и "b".
Вот как проверить есть ли в нём значение "a" и под каким оно индексом?!
P.S. Учитывая то что массив можно изменяться в размере, т.е. может быть и больше и меньше значений.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.