За последние 24 часа нас посетили 18713 программистов и 1592 робота. Сейчас ищут 1178 программистов ...

Как перезаписать определенную строку в определенном файле?

Тема в разделе "PHP для новичков", создана пользователем Kuzma92, 20 мар 2024.

  1. Kuzma92

    Kuzma92 Новичок

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

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

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

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

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

    PHP:
    1. chdir("..");
    2. $cat=array();
    3. $d=opendir("us/db/us");
    4. while(($e=readdir($d))!=false)
    5.   {
    6.     if($e =="." || $e ==".." || $e==".htaccess" || $e=="admin") continue;
    7.     $cat[]=$e;
    8.   }
    9.  
    10. $data_e=array();
    11.  
    12. $file=file("us/db/list");
    13. foreach($file as $line)
    14.   {
    15.       $expl=explode("*",$line);
    16.       $data_e[$expl[2]]=$expl[0];
    17.   }
    18.  
    19.   if(isset($_GET['school']) && in_array($_GET['school'],$cat))
    20.     {
    21.        $file=file("us/db/us/$_GET[school]");
    22.        $f=fopen("us/db/us/$_GET[school]","w");
    23.        for($n=0;$n<count($file);$n++)
    24.          {
    25.            fwrite($f,$file[5]."\r\n");
    26.          }
    27.        fclose($f);
    28.  
    29.        echo "<meta http-equiv=refresh content=0; url=school.php>";
    30.        exit();
    31.     }
    32. $text=file("us/db/us/$cat[$x]");
    33. $rec=file("admin/db/us/$cat[$x]");
    34.  
    35. echo"<p>Пользователь: $text[1]</p>
    36.        <form name='$cat[$x]' method='post'>
    37.        <input name=school type=text value='$text[5]'>
    38.        <button name=school type=submit value=Изменить>Изменить</button>
    39.        </form>";
    Я конечно извиняюсь за то, что публикую достаточно большой фрагмент кода, но я вынужден его вам показать весь целиком, чтобы эту задачу можно было решить, и руководствуясь тем, что правильно заданный вопрос - это уже половина ответа. Пожалуйста, помогите мне решить эту задачу. Очень вам благодарен за помощь. С уважением,
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.788
    Симпатии:
    1.328
    Адрес:
    Лень
  3. Kuzma92

    Kuzma92 Новичок

    С нами с:
    6 мар 2024
    Сообщения:
    13
    Симпатии:
    0
    Дополню вопрос уточнением:
    123456789.txt - название файла - это id пользователя.
    us/db/list - это файл, в котором перечисляются все зарегистрированные пользователи.
     
  4. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    425
    Симпатии:
    79
    Адрес:
    Бавария, Германия
    Добрый день!
    Вы всё чётко объяснили. Респект! Думаю Вы справитесь и перезапишите строку в файле.
    Если не справитесь Вам здесь помогут.
    Хочу обратить Ваше внимание на, что со временем, когда потребуется добавить ещё одно или несколько полей
    в данные пользователей, Вам придётся переписывать все файлы.
    Вполне вероятно, что может потребоваться организовать поиск по данным пользователей или организавать ссылки
    на другие файлы.
    Советую Вам подумать о концептии работы с данными.
    М.б. стоит отказаться от файлов и использовать СУБД.
    Удачи!
     
    Kuzma92 нравится это.
  5. Kuzma92

    Kuzma92 Новичок

    С нами с:
    6 мар 2024
    Сообщения:
    13
    Симпатии:
    0
    @Vladimir Kheifets добрый день. Нет, самостоятельно справиться мне не удается.
    В дальнейшем ничего подобного для этого сайта мне не потребуется, поэтому достаточно простой текстовой бд без использования субд. Этот сайт планируется быть допотопно простым и исключительно только для внутренних потребностей, и это еще одна причина, что субд не требуется, а достаточно текстовых файлов.
     
  6. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    914
    Симпатии:
    143
    @Kuzma92, данные такого типа принято хранить в базах данных, а не файловой системе. Если хотите поизвращаться, есть еще ф-ция PHP: file - Manual, там будет треск по использованию оперативной памяти скриптом, если файлы большие.
     
  7. Kuzma92

    Kuzma92 Новичок

    С нами с:
    6 мар 2024
    Сообщения:
    13
    Симпатии:
    0
    Все уже сделал, спасибо.