[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Найти и отредактировать запись в файле
Страницы: 1, 2, 3, 4
poorStudent
Kusss

спасибо rolleyes.gif

twin
walerus
Игорь_Vasinsky

file() здесь использовать некорректно. Ибо не известно, каков может быть размер файла. Если контактов очень много, могут возникнуть неоправданные тормоза, или, что хуже, переполнение памяти. Так что poorStudent пошла по верному пути, тут fgets() как раз на месте. Однако есть подвох. Последнее поле (контакты) многострочное, там же текстарея. Так что при многострочном комментарии всё разъедется.

Это же касается разделителей. Попробуйте сохранить запись, в тексте которой будет присутствовать крапка з комою biggrin.gif точка с запятой, все рухнет.

Тут нужно мудрить с экранированием.

Что касаемо поиска, я бы советовал сделать подобие индексов. Грамотная работа с файлами не ограничивается чтением/записью. Есть много других полезных функций. Допустим fseek() smile.gif

Используя их можно действительно сделать то, о чем очень правильно сказал Valick
Цитата (Valick @ 31.10.2017 - 17:48)
Задание именно на умение работать с файлом, необходимо создать что-то типа собственной базы данных.


А всё, что вы тут навояли, это не работа с файлами. Это работа с массивом. Что совершенно перечит заданию.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
walerus
twin
Из задания понятно:
Цитата
Чтобы создать простое PHP-приложение, используйте плоский файл (без базы данных).
Для этого проекта вы создадите приложение под названием CONTACT.
Приложение предназначено для личного использования.
Приложение позволяет пользователю не использовать пароль

Что приложение должно делать
a. Создать новый контакт
b. Изменить существующий контакт
c. Удалить существующий контакт
d. Поиск контакта

Пользователь должен иметь возможность выполнять следующие операции:
1. список контактов (показать имя, фамилию, картинку и изменить и удалить запись в таблице)
2. изменить контакт, нажав на ссылку в списке ссылок
3. Удаление контакта, нажав на ссылку в списке контактов (используйте javascript для подтверждения удаления)
4. Поиск контакта по имени и/или фамилии
5. Создайте новый контакт.


На счет "некорректного" использования файла - в условии про объем данных ничего не сказано, так что file(), вполне можно юзать, fgets() - так же можно использовать и искать первое совпадение с нужными данными, но как будет "быстрее" еще тот вопрос. Ну и логику тогда переделать немного.

На счет "подвоха", в ТЗ, ничего не сказано про textarea(комментарий), по этому данный пункт остается загадкой, с какой целью ТС, добавила "лишние" поля.

Цитата
я бы советовал сделать подобие индексов

Такая же ситуация, в ТЗ, ничего про индексы не сказано, однако ТС пишет
Цитата
Хотя в задании есть starter code, который генерирует ID для каждой записи, но и тут мне непонятно, куда и как его прицепить.

Как понимать - не понятно unsure.gif
Цитата
А всё, что вы тут навояли, это не работа с файлами. Это работа с массивом. Что совершенно перечит заданию.
Суть задания нам не известна, ТС ничего про это не сказала, на что идет уклон проверки знаний, на работу с файлами или же на логическое мышление как это сделать вообще.

на счет flat file он же (плоский файл)... При соблюдении условий ТЗ, он используется легко и без каких либо трудностей, т.к.
Цитата
Такие БД часто хранят в виде простого текстового файла, в котором поля разделены запятыми
А не "крапка з комою"

Нужно выслушать ТС, что она по этому поводу скажет... откуда появились новые поля и чего вообще от нее хочет препод biggrin.gif
poorStudent
ТО, что хочет препод, мы и сами толком не знаем, т.к. задание запостили на учебный сайт, через 3 дня ушли на забастовку и завтра начнется 5-я неделя, как все учителя бастуют. Препод позже выложил обучающее видео про работу с файлом - write and read и как загружать картинки. Но весь поток начал делать это задание также, как я. Учебу мы закончили на теме массивы. След. лекция должна была быть про файлы.
Про коммент да, мне сказали в колледже, что это проблема из-за того, что много строк. Я не знала. Можно сделать input=text, наверное.
В задании есть код для генерации ID (это не mandatory), я не могла понять, как его использовать, поэтому стала делать без него. Задание целиком выглядит так:

Objective:
To create a simple PHP application using a flat file (no database). For this project, you will be creating an application called CONTACT. The application is for personal use.
The application allows the user to (no username password needed)
a) Create a new contact
b) Modify an existing contact
c) Delete an existing contact
d) Search for a contact
Fields:
A contract must at least have the following fields (you are free to add more if you need)
• * title
• * first name
• * last name
• email
• site
• cell number
• home number
• office number
• twitter URL
• facebook URL
• picture
• comment

* indicates the field is a mandatory field and must be presented when the form is submitted.

Operations:
The user must be able to perform the following operations:
1. list contacts (show first, last name, picture and modify and delete links in a table)
2. edit contact by clicking on modify link in the contacts list
3. deleting a contact by clicking on delete link in the contact list (use javascript to confirm the deletion)
4. search for a contact by the first name and/or last name
5. Create a new contact.
Validation:
• Make sure all mandatory fields are present when adding or modifying a contact
. • In add or edit contact if the form is submitted with invalid input (such as empty field), your program must allow the user to modify the form without losing previously entered inputs.

Starter code:
The function below generates a unique id for one record. The unique id allows you to easily identify a record to modify or delete or create a relationship between records in different files.


function getID(){

$file_name="ids";
if(!file_exists($file_name)){
touch($file_name);
$handle=fopen($file_name, "+r");
$id=0;

}
else{
$handle=fopen($file_name, "+r");
$id=fread($handle, filesize($file_name));
settype($id, "integer");
}
rewind($handle);
fwrite($handle,++$id);

fclose($handle);
return $id;

}
Быстрый ответ:

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