Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » MySql/PHP: общие вопросы

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

Открыть новую тему     Написать ответ в эту тему

sem88

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
то нужно хранить email в профиле, а не просить его указывать (с возможной ошибкой) каждый раз.

 
Беспортно. Но этот вариант, здесь не подходит. Пример,  пришла Маша.  Почитала, решили оформить заказ или что-то спросить.  Пишет письмо и указывает -  masha.veliko29@xxx.ru.   Потом отлистала  назад и для верности  правила письмо  еще раз. Потом подумала, что если указать телефон ей ответят быстрее, пишет еще.  Потом понимает, что ящик указала неправильно masha.veliko39@xxx.ru пишет  
еще раз! И потом для верности отсылает еще два раза, а для 100% гарантии указывает еще второй свой  ящик и пишет снова.    
 
Итого мы имеем 7 писем от одного пользователя, но с разными email.  
 
Что было сделано, -  в момент отправки первого письма мы ей ставим куку с номером и этот номер записываем базу. И в базе содержатся все 7 писем от одного  пользователя под одним номером.
 
Делаем запрос и выводим по номеру  всё красиво, но начальство требует вывести еще и email (любой из приписанных к пользователю)
 
 
 

Цитата:
select id, group_concat(distinct email) as emails from zapros group by id;

 
запрос тоже разбираем через  
   while (  $name  =  mysqli_fetch_row($zaprosl)  )     ?

Всего записей: 44 | Зарегистр. 13-04-2007 | Отправлено: 20:19 24-05-2018
Mavrikii

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sem88

Цитата:
запрос тоже разбираем через  

да

Всего записей: 6141 | Зарегистр. 20-09-2014 | Отправлено: 20:20 24-05-2018
sem88

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
$fl = "./nom.txt";    $nom = file_get_contents($fl);    file_put_contents($fl, ++$nom, LOCK_EX);

 
Снова я. Сегодня все повторилось, счетчик отсчитал 1400 и снова скинулся на ноль. Если оставить в стороне этот вариант записывать в блокнот. Какие еще способы или варианты есть чтобы присваивать каждому пользователя свой уникальный номер ? Через MySQL  ? или...

Всего записей: 44 | Зарегистр. 13-04-2007 | Отправлено: 15:59 28-05-2018
Mavrikii

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sem88

Цитата:
счетчик отсчитал 1400 и снова скинулся на ноль

Вы уверены, что больше ничто не пытается писать в тот файл?
Ибо 1400 за несколько дней - не такая активность, чтобы приводить к конфликтам записи.

Всего записей: 6141 | Зарегистр. 20-09-2014 | Отправлено: 16:46 28-05-2018
sem88

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Ибо 1400 за несколько дней - не такая активность, чтобы приводить к конфликтам записи.

Совершенно верно, но уже в который раз слетает. Вот это и удивляет
 

Цитата:
Вы уверены, что больше ничто не пытается писать в тот файл?

да, 100%
 

Всего записей: 44 | Зарегистр. 13-04-2007 | Отправлено: 18:48 28-05-2018
Mavrikii

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sem88
судя по https://stackoverflow.com/questions/49262971/does-phps-file-get-contents-ignore-file-locking , есть вероятность того, что file_get_contents игнорирует лок.
 
поэтому лучше его переписать на

Код:
$fo = fopen($fl, 'r');  
flock($fo, LOCK_SH);
$nom = file_get_contents($fl);
flock($fo, LOCK_UN);
fclose($fo);

 
но мне кажется, что дело не в этом, так как активность невысокая

Всего записей: 6141 | Зарегистр. 20-09-2014 | Отправлено: 18:58 28-05-2018 | Исправлено: Mavrikii, 20:24 31-05-2018
sem88

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
$fo = fopen($fl, 'r');    
flock($fo, LOCK_SH, true);  
$nom = file_get_contents($fl);  
flock($fo, LOCK_UN);  
fclose($fo);

 
что то я не понимаю, кто / что отвечает за увеличение числа на 1 единицу и почему мы два раза обращаемся к $fl  я ведь правильно понимаю, что $fl = "./nom.txt";  
 

Всего записей: 44 | Зарегистр. 13-04-2007 | Отправлено: 19:52 31-05-2018
Mavrikii

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sem88
я код привел только на замену file_get_contents, остальное остается тем же
с планшета мне было неудобно целиком все писать.
 
ок, пусть будет так:

Код:
$fl = "./nom.txt";
$fo = fopen($fl, 'r');    
flock($fo, LOCK_SH);    
$nom = file_get_contents($fl);  
flock($fo, LOCK_UN);    
fclose($fo);
file_put_contents($fl, ++$nom, LOCK_EX);

 
а можно сразу открыть с чтением и изменением (возможно так даже лучше).

Код:
$fl = "./nom.txt";
$fo = fopen($fl, 'r+');    
flock($fo, LOCK_EX);
$nom = trim(fread($fo, 1000));
rewind($fo);
fwrite($fo, ++$nom);
flock($fo, LOCK_UN);
fclose($fo);  

 

Цитата:
почему мы два раза обращаемся к $fl  

потому, что у file_get_contents нет блокировки, поэтому сначала блокируем, потом читаем.

Всего записей: 6141 | Зарегистр. 20-09-2014 | Отправлено: 19:58 31-05-2018 | Исправлено: Mavrikii, 20:22 31-05-2018
sem88

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
хм, сайт вообще лег.

Всего записей: 44 | Зарегистр. 13-04-2007 | Отправлено: 20:13 31-05-2018
Mavrikii

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sem88
ок, удалите true тут
Цитата:
flock($fo, LOCK_EX, true);

и сделать
Код:
$nom = trim(fread($fo, 1000));
 
выше исправил

Всего записей: 6141 | Зарегистр. 20-09-2014 | Отправлено: 20:20 31-05-2018 | Исправлено: Mavrikii, 20:22 31-05-2018
sem88

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
сайт вышел из ступора, но $nom стал равен = 1.  всегда.

Всего записей: 44 | Зарегистр. 13-04-2007 | Отправлено: 16:39 01-06-2018
Mavrikii

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sem88

Цитата:
$nom стал равен =  

Я тестировал, все работает (если не забыли про trim)

Всего записей: 6141 | Зарегистр. 20-09-2014 | Отправлено: 16:52 01-06-2018
sem88

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
$fl = "nom.txt";
 $fo = fopen($fl, 'r+');      
 flock($fo, LOCK_EX);  
 $nom = trim(fread($fo, 1000));
 rewind($fo);  
 fwrite($fo, ++$nom);  
 flock($fo, LOCK_UN);  
 fclose($fo);  
 
 echo $nom;
 
 
Ничего не понимаю, тестирую через echo  выводит правильно.  Если добавить в код:
 
if(isset($_COOKIE['OP']))    
{ $nom =  $_COOKIE['OP']; }
  else {
     
 $fl = "nom.txt";
 $fo = fopen($fl, 'r+');      
 flock($fo, LOCK_EX);  
 $nom = trim(fread($fo, 1000));
 rewind($fo);  
 fwrite($fo, ++$nom);  
 flock($fo, LOCK_UN);  
 fclose($fo);  
   
   
   setcookie("OP","$nom",time()+ 365*24*60*60);
   
  }
 
смотрю куки - проверяю OP = 1
 
Добавлено:

Цитата:
if(isset($_COOKIE['OP']))    

 
этот код находится в файле который инлюдится с этим может как-то быть связано? Хотя раньше все работало.

Всего записей: 44 | Зарегистр. 13-04-2007 | Отправлено: 17:52 01-06-2018 | Исправлено: sem88, 17:54 01-06-2018
Mavrikii

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sem88

Цитата:
этот код находится в файле который инлюдится с этим может как-то быть связано?

нет.
 

Цитата:
проверяю OP = 1

он не должен быть равен 1, если у вас там строка с u000, как упоминали ранее.
кука может быть старой, нужно чистить. но мы развели флейм в теме об mysql.

Всего записей: 6141 | Зарегистр. 20-09-2014 | Отправлено: 18:34 01-06-2018
sem88

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
кука может быть старой, нужно чистить

все чищено
 

Цитата:
он не должен быть равен 1

вот именно равен 1 !!  
 

Цитата:
но мы развели флейм в теме об mysql

да виноват.

Всего записей: 44 | Зарегистр. 13-04-2007 | Отправлено: 18:42 01-06-2018
Mavrikii

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sem88

Цитата:
"$nom"

кавычки не нужны.
что то до setcookie в браузер выводится? и после хоть что то отдается в браузер?

Всего записей: 6141 | Зарегистр. 20-09-2014 | Отправлено: 18:51 01-06-2018
sem88

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
пошел разбираться

Всего записей: 44 | Зарегистр. 13-04-2007 | Отправлено: 19:30 01-06-2018 | Исправлено: sem88, 19:35 01-06-2018
Mavrikii

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sem88
Вы, случаем, не в Windows php скрипт запускаете?
Там могут быть особенности с flock. Если под линем - такое может быть если у скрипта нет прав на запись файла nom.txt (скорее всего причина именно в этом. 'r+' пробует сразу открыть на запись, если не получается, то значение $fo будет false)

Всего записей: 6141 | Зарегистр. 20-09-2014 | Отправлено: 19:48 01-06-2018 | Исправлено: Mavrikii, 19:51 01-06-2018
sem88

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Все вопрос решился.  Изменены ссылки на абсолютные пути и заработало. Спасибо.

Всего записей: 44 | Зарегистр. 13-04-2007 | Отправлено: 09:29 04-06-2018 | Исправлено: sem88, 09:31 04-06-2018
SergioEmpasaDeParado

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем привет!
 
Подскажите пожалуйста как из фрейма2 перезагрузить фрейм1.
Оба фрейма загружены из php фалов.
 
во втором фрейме код php отрабатывается и вот в конце бы какую то строчку добавить что бы frame1 перезагрузить.
Есть идеи?
 

Всего записей: 8 | Зарегистр. 13-04-2018 | Отправлено: 19:02 13-06-2018
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

Компьютерный форум Ru.Board » Интернет » Web-программирование » MySql/PHP: общие вопросы

Имя:
Пароль:
Сообщение

Для вставки имени, кликните на нем.

Опции сообщенияДобавить свою подпись
Подписаться на получение ответов по e-mail
Добавить тему в личные закладки
Разрешить смайлики?
Запретить коды


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2018

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru