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

> Как добавить ряд проверок?
Kuzma92  
 ۩  Дата
Цитировать сообщение

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



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

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




У меня есть такой код, который из формы записывает введенные в поле 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';
- Если да, то никаких действий.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
Дата
Цитировать сообщение

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



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

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




Использовать scandir и сделать поиск по данным из массива.

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

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

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



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

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 6460
Пользователь №: 35718
На форуме: 12 лет, 4 месяца
Карма: 208




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


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

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



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

Профиль
Группа: Пользователь
Сообщений: 54
Пользователь №: 46417
На форуме: 2 года, 24 дня
Карма:




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

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



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

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




Kuzma92
Почитай про MySql CRUD, там 4ре команды всего, уходи от работы с файлами(если нет конечно такой потребности), потому как дальше..., будет хуже.

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

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

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

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

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

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



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

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




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

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/. Ну как-то так. Если нет совпадения (если нет файла с таким названием), то ничего. Если есть совпадение, то переходить ко второй проверке по наличию такой строки в файле закладок именно этого пользователя.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
FatCat  
Дата
Цитировать сообщение

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



חשב את עצמו
******

Профиль
Журнал
Группа: Администратор
Почтальон группы
Сообщений: 6963
Пользователь №: 1
На форуме: 19 лет, 1 месяц, 12 дней
Карма: 145




Цитата (Kuzma92 @ 29.03.2024 - 13:23)
планируется очень специфичный небольшой сайтик с посещением 2-5-максимум 5 человек в день, где в лучшем случае кол-во регистраций новых пользователей в день будет не более двух. Поэтому вполне достаточно того, что есть сейчас.

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


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

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



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

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 690
Пользователь №: 39616
На форуме: 10 лет, 10 месяцев, 6 дней
Карма: 71




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

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

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


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

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



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

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




Цитата (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() использовал, и все результат один. Если не сложно, подскажите, пожалуйста, верный вариант.

Это сообщение отредактировал Kuzma92 - 30.03.2024 - 03:04
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kuzma92  
 ۩  Дата
Цитировать сообщение

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



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

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




Все сделал, все получилось.

$uniqueid = trim($_POST['uniqueid']);
...


if (file_exists('admin/db/rec/'.$uniqueid.''))


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

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



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

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




Kusss
Цитата (Kusss @ 29.03.2024 - 01:26)
лучше используйте header.

Я вот все над этим думал. И все же, можно спросить? А почему лучше использовать header вместо echo "<meta http-equiv=refresh ?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
FatCat  
Дата
Цитировать сообщение

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



חשב את עצמו
******

Профиль
Журнал
Группа: Администратор
Почтальон группы
Сообщений: 6963
Пользователь №: 1
На форуме: 19 лет, 1 месяц, 12 дней
Карма: 145




Я предпочитаю как-то так:
header("Refresh: ".$rtime.";url=".$url);
die("<html><head><meta http-equiv='refresh' content='".$rtime."; url=".$url."'></head><body></body></html>");


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

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



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

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




Цитата (FatCat @ 4.04.2024 - 18:25)
header("Refresh:

ну это как бы сказать не официально что ли?)) Насколько я понимаю, в PHP нет Refresh, а есть header('Location: куда-то' );, верно?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
FatCat  
Дата
Цитировать сообщение

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



חשב את עצמו
******

Профиль
Журнал
Группа: Администратор
Почтальон группы
Сообщений: 6963
Пользователь №: 1
На форуме: 19 лет, 1 месяц, 12 дней
Карма: 145






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

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



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

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




Цитата (Kuzma92 @ 4.04.2024 - 16:51)
Kusss
Цитата (Kusss @ 29.03.2024 - 01:26)
лучше используйте header.

Я вот все над этим думал. И все же, можно спросить? А почему лучше использовать header вместо echo "<meta http-equiv=refresh ?

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

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

Опции темыСтраницы: (2) [1] 2  Ответ в темуСоздание новой темыСоздание опроса