Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Как перезаписать определенную строку в определенно
Kuzma92  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Пользователь
Сообщений: 81
Пользователь №: 46556
На форуме: 1 год, 14 дней
Карма:




Здравствуйте уважаемые специалисты. У меня возникла трудная для меня задача, с которой мне самостоятельно справиться увы, но не получается. Поэтому обращаюсь к вам за помощью. Задача следующая:

При регистрации каждого нового пользователя на сайте, в каталоге:
site.ru/us/db/us/
создается тестовый файл, типа:
123456789.txt
с его данными. Такой файл состоит из 10 строк.

В админке (site.ru/admin/) я создал файл school.php, в котором делаю вывод всех пользователей, в следующем виде:
Пользователь - Строка №5 (из файла данных пользователя) в <input type=text...>

Делаю это с целью того, чтобы в админке я мог менять значение Строки №5 в файле с данными у каждого Пользователя в отдельности.

Мой код php файла такой:

chdir("..");
$cat=array();
$d=opendir("us/db/us");
while(($e=readdir($d))!=false)
{
if($e =="." || $e ==".." || $e==".htaccess" || $e=="admin") continue;
$cat[]=$e;
}
closedir($d);

$data_e=array();

$file=file("us/db/list");
foreach($file as $line)
{
$expl=explode("*",$line);
$data_e[$expl[2]]=$expl[0];
}

if(isset($_GET['school']) && in_array($_GET['school'],$cat))
{
$file=file("us/db/us/$_GET[school]");
$f=fopen("us/db/us/$_GET[school]","w");
for($n=0;$n<count($file);$n++)
{
fwrite($f,$file[5]."\r\n");
}
fclose($f);

echo "<meta http-equiv=refresh content=0; url=school.php>";
exit();
}
$text=file("us/db/us/$cat[$x]");
$rec=file("admin/db/us/$cat[$x]");

echo"<p>Пользователь: $text[1]</p>
<form name='
$cat[$x]' method='post'>
<input name=school type=text value='
$text[5]'>
<button name=school type=submit value=Изменить>Изменить</button>
</form>"
;


Я конечно извиняюсь за то, что публикую достаточно большой фрагмент кода, но я вынужден его вам показать весь целиком, чтобы эту задачу можно было решить, и руководствуясь тем, что правильно заданный вопрос - это уже половина ответа. Пожалуйста, помогите мне решить эту задачу. Очень вам благодарен за помощь. С уважением,
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kuzma92  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Пользователь
Сообщений: 81
Пользователь №: 46556
На форуме: 1 год, 14 дней
Карма:




Дополню вопрос уточнением:
123456789.txt - название файла - это id пользователя.
us/db/list - это файл, в котором перечисляются все зарегистрированные пользователи.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2194
Пользователь №: 28976
На форуме: 13 лет, 7 месяцев, 22 дня
Карма: 152




Какая нужда делать все на файлах ?
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
walerus  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Чтобы все !
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2881
Пользователь №: 26852
На форуме: 14 лет, 5 дней
Карма: 162




Kusss
Цитата
Какая нужда делать все на файлах ?

Как мне кажется, человек не разбирается в на столько... что бы использовать мускуль

Тут банальные ошибки, типа:
$file=file("us/db/us/$_GET[school]");

А ты про что то серьезное :rolleyes:

Kuzma92 Мне бы хотелось помочь, но Вы, к сожалению, не хотите прислушиваться к тому, что Вам говорят и в предыдущей Вашей ветке, так и не ответили - получилось или нет, хотя пообещали B)

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


зы:
Нет проверки входящих данных, пиши что хочешь
В форме поля с одинаковыми именами
$text=file("us/db/us/$cat[$x]");
$rec=file("admin/db/us/$cat[$x]");
откуда тут переменная $x

и еще если уже работаете с файлами, пишите туда JSON хотябы, что бы исключить проблему "\r\n", с которой Вы уже сталкивались.
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kuzma92  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Пользователь
Сообщений: 81
Пользователь №: 46556
На форуме: 1 год, 14 дней
Карма:




Kusss этот сайт планируется быть допотопно простым и исключительно только для внутренних потребностей, поэтому субд не требуется, а достаточно текстовых файлов.

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

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

$text=file("us/db/us/$cat[$x]");
$rec=file("admin/db/us/$cat[$x]");

это да, вы правы, это лишнее, совершенно случайно сюда скопировал, моя невнимательность.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
walerus  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Чтобы все !
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2881
Пользователь №: 26852
На форуме: 14 лет, 5 дней
Карма: 162





<?php
header('Content-Type: text/html; charset=utf-8');


$directory = 'us/db/us/';

if (is_dir($directory)){

// Собираем имена файлов
// $scanned_directory: Массив с имеющимися файлами, где: 123456789.txt - 123456789 ID пользователя

$scanned_directory = array_values(array_diff(scandir($directory), array('..', '.', '.htaccess', 'admin')));

if (!empty($scanned_directory)){

// Проверяем входящщие данные
if (
isset($_POST['school'], $_POST['edit_user_id']) &&
!
empty($_POST['school']) &&
trim($_POST['edit_user_id']) != '' )
{

// Удаляем все кроме цифр (ID пользователя)
$edit_user_id = trim(preg_replace('~\D+~','', $_POST['edit_user_id']));

// Если переменная пустая, ничего не делаем
if ($edit_user_id != ''){

// Если переменная не существует, ничего не делаем
if (isset($_POST['school'][$edit_user_id])){

// Удаляем все кроме цифр (ID пользователя, имя файла)
$edit_file_name = preg_replace('~\D+~','', $_POST['edit_user_id']);

// Проверяем, существует ли файл
if (file_exists($directory . $edit_file_name . '.txt')){

// Считываем файл в массив (Пропускать новую строку в конце каждого элемента массива | Пропускать пустые строки)
$tmp_file = file($directory . $edit_file_name . '.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES );

$tmp_file[4] = trim($_POST['school'][$edit_user_id]);

file_put_contents($directory . $edit_file_name . '.txt', implode("\r\n", $tmp_file));
}
}
}


echo "<meta http-equiv=refresh content=0; url=school.php>";
exit();
}else{
// Выводим форму вывода списка пользователей для управления

echo "<form action='' method='post'>";

foreach($scanned_directory as $one_file){

// Считываем файл в массив (Пропускать новую строку в конце каждого элемента массива | Пропускать пустые строки)
$tmp_file = file($directory . $one_file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES );

// Получаем имя файла ( ID Пользователя )
$user_id = pathinfo($one_file, PATHINFO_FILENAME);

echo "<p>Пользователь ID: $user_id</p>";
echo "<input name='school[" . $user_id . "]' type='text' value='" . $tmp_file[4] . "'>";
echo "<button name='edit_user_id' type=submit value='" . $user_id . "'>Изменить</button>";
echo "<hr>";
}

echo "</form>";
}

}
else{
echo "Директория: '" . $directory . "' - не содержит файлов";
die;
}
}
else{
echo "Директория: '" . $directory . "' - не существует";
die;
}


При условии что пользовательские файлы имеют вид
Цитата
первая строка
вторая строка
третья строка
четвертая строка
пятая строка
шестая строка


PMICQ
    2   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kuzma92  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Пользователь
Сообщений: 81
Пользователь №: 46556
На форуме: 1 год, 14 дней
Карма:




walerus
спасибо вам огромное, изучаю ваш ответ. Отпишусь чуть позже обязательно.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kuzma92  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Пользователь
Сообщений: 81
Пользователь №: 46556
На форуме: 1 год, 14 дней
Карма:




walerus
Докладываю: Все сделал, все отлично работает как часики. Огромное спасибо вам за помощь!
И что особенно важно для меня, отдельная благодарность вам за комментирование кода.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса