[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как добавить ряд проверок?
Kuzma92
У меня есть такой код, который из формы записывает введенные в поле input данные каждый раз с новой строки:

    if(isset($_POST['fav']))
{
$uniqueid = $_POST['uniqueid'];
file_put_contents('us/db/fav/'.$us_id.'', $uniqueid."\r\n", FILE_APPEND | LOCK_EX);
echo "<meta http-equiv=refresh content='0; url=page.php'>";
exit();
}


<form action='' name='' method='post'>
<input
name='uniqueid' type='text' value=''>
<button
name='fav' type='submit' value='Search'>Search</button>
</form>


Этот код у меня работает прекрасно. Уважаемые специалисты, подскажите, пожалуйста, но как добавить ряд следующих проверок с условиями, прежде чем сделать запись в файл? Когда пользователь вводит данные в поле input, то первая проверка:

1. совпадают ли введенные в поле input данные с Названием какого-либо файла в папке 'admin/db/rec/'
- Если нет полного совпадения, то никаких действий;
- Если есть полное совпадение, то перейти к следующей проверке:

2. Совпадают ли введенные в поле input данные с какой-либо строкой, записанной в файле 'us/db/fav/$us_id'
- Если нет, то записать введенные в поле input данные в файл 'us/db/fav/$us_id';
- Если да, то никаких действий.
Kusss
Использовать scandir и сделать поиск по данным из массива.

зачем использовать отложенную перезагрузку в обработчике формы ?
echo "<meta http-equiv=refresh content='0; url=page.php'>";
Это нужно для того, чтобы показать какой-то текст и через N секунд перезагрузить страницу.
лучше используйте header.
header('Location: /page.php' );

Valick
Kuzma92, твоя проблема в том, что ты не хочешь учиться, что бы делать "как надо". Ты хочешь делать "как хочешь", изобретая велосипеды, наступая на грабли и тд.
Нам просто это не интересно.


_____________
Стимулятор ~yoomoney - 41001303250491
don.bidon
Да писал я ему на другом форуме, чтобы либо книжку, либо учителя нашёл...
walerus
Kuzma92
Почитай про MySql CRUD, там 4ре команды всего, уходи от работы с файлами(если нет конечно такой потребности), потому как дальше..., будет хуже.

По теме:
Вопрос номер 1 - а что будет если "пробел" введут в форму?
- запишет пробел в файл... а оно нам надо ? я думаю нет

Это касаемо вопроса, про "обработка входящих данных".

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

Это конечно допустимо, но !...
Допустим у тебя 100 файлов по 1000 строк или 1000 файлов по 100 строк или 10 000 файлов, "представь масштаб трагедии" как говориться, это будет жесть.

Вы бы сказали что Вы там изобретаете, конечный продукт так сказать, возможно мы бы помогли все "раскурить" как это сделать проще и правильнее, а то и правда, изобретаем велосипед из г...а и палок rolleyes.gif
Kuzma92
Сразу хочу оговориться. Это не коммерция, я не зарабатываю на этом деньги, и ни в коем случае за ваш счет (за ваши ответы) не получаю какую-либо денежную прибыль. Делаю я все это исключительно только для себя.

Valick
don.bidon
я с уважением отношусь к каждому человеку, и прошу взаимности. И пожалуйста, не нужно меня принижать. Да, вы правы, язык PHP я действительно знаю очень плохо (и очень жалею, что не изучил его еще в свое время). И при том, что я знаю другие языки (у меня кстати на stackoverflow аккаунт с репутацией около 30k, я одно время внес там большую лепту), сейчас занимаясь этим скриптом уже последние две-три недельки, уже начинаю понимать некоторые азы PHP, и что-то сам самостоятельно уже делаю. Полностью согласен с тем, что говорят: зная один язык - другие даются легче. Но там где я реально не знаю, прихожу сюда за помощью. И когда я от вас получаю готовый код, то я не беру и тупо вставляю его и после этого забываю за эту задачу, нет. А я его изучаю и стараюсь понять как та или иная задача решается. Поэтому для меня особенно важно и ценно, если код прокомментирован.

Что касается этого скрипта. Его я взял в открытом доступе, и переделываю его сейчас под себя. Уже многое что переделал, и что добавил нового. Я с вами не спорю, и я полностью с вами согласен насчет полноценной БД типа mysql или какой-то другой. НО, для моего случая сейчас это точно не нужно. Потому что, во-первых - это значит надо переписать все файлы скрипта под БД, и второе - планируется очень специфичный небольшой сайтик с посещением 2-5-максимум 5 человек в день, где в лучшем случае кол-во регистраций новых пользователей в день будет не более двух. Поэтому вполне достаточно того, что есть сейчас. Я уже практически все сделал, осталось мне совсем немного.

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

Теперь по сути вопроса (если кто-то по какой-то причине не желает в этом участвовать, то я нисколько не осуждаю).
Сейчас я стараюсь сделать некое подобие закладок (ну типа добавление в избранное).

us/db/fav/'.$us_id.' :
/fav - это папка с файлами, где $us_id это название файла, совпадающее с id (десятизначное число) пользователем.

admin/db/rec/ - это папка с файлами (каждый файл содержит контент, добавляемый пользователями), где каждый файл также имеет название в виде десятизначного числа (это id статьи/контента).

Вот я и хочу, чтобы на странице page.php, когда пользователь будет вводить данные (не важно что он будет вводить), чтобы эти введенные данные сравнивались с названием файла в папке admin/db/rec/. Если есть файл с таким названием (==введенными данными в поле input), то после этого была проверка - добавлен ли такой id в файле закладок пользователя us/db/fav/'.$us_id.' или нет. Вот сам процесс/последовательность проверок я в вопросе и расписал.

"Вопрос номер 1 - а что будет если "пробел" введут в форму?"
walerus, как я это понимаю, любые введенные данные в поле input, в том числе и пробел, должны запускать поиск по наличию в названиях файлов (и сравниваться с названием файла) в папке admin/db/rec/. Ну как-то так. Если нет совпадения (если нет файла с таким названием), то ничего. Если есть совпадение, то переходить ко второй проверке по наличию такой строки в файле закладок именно этого пользователя.
FatCat
Цитата (Kuzma92 @ 29.03.2024 - 13:23)
планируется очень специфичный небольшой сайтик с посещением 2-5-максимум 5 человек в день, где в лучшем случае кол-во регистраций новых пользователей в день будет не более двух. Поэтому вполне достаточно того, что есть сейчас.

ИМХО, каждому регистрированному свой файл в любом случае неразумно.
Если уж так не хочется БД, сделать по принципу БД: один файл, и в файле каждая строка — пользователь: айдишник | логин | пароль |… — все, что тебе нужно.
Считал файл — получил массив пользователей, взял intval от строки — получил айдишник, рассплитовал строку по символу | — получил массив информации о пользователе.
Это плохо, ибо каждый раз грузить в память весь массив пользователей будет затратно, нсли/когда база разрастется. Но это лучше, чем сканировать директорию, получая массив файлов.
Я надеюсь, файлы в директории, недоступной из сети? А то найдутся умельцы сканировать директории.

_____________
Бесплатному сыру в дырки не заглядывают...
brevis
Цитата (Kuzma92 @ 29.03.2024 - 15:23)
"Вопрос номер 1 - а что будет если "пробел" введут в форму?"
walerus, как я это понимаю, любые введенные данные в поле input, в том числе и пробел, должны запускать поиск по наличию в названиях файлов (и сравниваться с названием файла) в папке admin/db/rec/. Ну как-то так.

Гораздо хуже будет, если вместо пробела введут что-то вроде ../../../../../../../../../../etc/passwd ну и тд smile.gif

>БД vs файлы
Регулярно кто-то хочет сделать все на файлах. Это нормально smile.gif
Разве что рекомендую для этого использовать какую-то библиотеку. Например, https://sleekdb.github.io

_____________
Чатик в телеге
Kuzma92
Цитата (FatCat @ 29.03.2024 - 18:35)
Я надеюсь, файлы в директории, недоступной из сети? А то найдутся умельцы сканировать директории.

FatCat, приветствую вас! Ну как сказать, насколько это возможно, конечно закрыто. Ну здесь вы сами знаете, что если кому если очень надо, то взять необходимое можно из любого сайта. В даркнете любую базу можно взять, или по крайней мере заказать.

Цитата (brevis @ 29.03.2024 - 21:37)
Гораздо хуже будет, если вместо пробела введут что-то вроде ../../../../../../../../../../etc/passwd ну и тд

brevis, приветствую вас! Это безопасное поле. Если даже что-то и введут, то результатом будет - такой страницы нет.

По моему вопросу. Я тут написал код:

$uniqueid = $_POST['uniqueid'];
$fav = file_get_contents('us/db/fav/'.$us_id.'');

if(isset($_POST['fav']))
{

if (file_exists('admin/db/rec/'.$_POST[uniqueid].''))
{
echo "Файл с таким названием существует. Переходим к следующему шагу.";

if (strpos($fav, $uniqueid) !== false)
{
echo "Строка найдена. Не дублируем.";
} else {
echo "Строка не найдена. Заносим в файл новую.";

file_put_contents('us/db/fav/'.$us_id.'', $uniqueid."\r\n", FILE_APPEND | LOCK_EX);
}
}
else {
echo "Файла с таким названием не существует. Не переходим к следующему шагу.";
}
}


echo file_get_contents("us/db/fav/$us_id");


Код получился до безобразия простым, но он четко выполняет свои функции. Один только момент: если использую trim(), то он вырезает пробелы, выдает положительный результат по сравнению, но при этом записывает в файл пустую новую строку. И как только я с этим не боролся, не получается у меня. И str_replace() использовал, и все результат один. Если не сложно, подскажите, пожалуйста, верный вариант.
Быстрый ответ:

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