Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка в поиске зарегиных юзеров 
:(
    Опции темы
mr.Anderson
Дата 12.7.2006, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 1
Всего: 128



В скрипт гостевой книги я вписал функции для записи юзеров, которые пишут в гостевуху, в отдельный текстовый файл. Причем, если такой юзер уже есть, он не должен заноситься в файл. Я приведу полный код гостевушки:
Код

<?
 if( ! isset( $_POST[ 'nickname' ] ) )
  EXIT( "Íå ââåäåíî èìÿ!" );
  
 if( ! isset( $_POST[ 'theme' ] ) )
  EXIT( "Íå ââåäåíà òåìà!" );
  
 if( ! isset( $_POST[ 'mess' ] ) )
  EXIT( "Íå ââåäåíî ñîîáùåíèå!" );

 $dbuser = "users.txt";
 
 if( ! file_exists( $dbuser ) )
 {
  $f = FOPEN( $dbuser, "a+" );
  FCLOSE( $f );
 }
?>



<?php
  
 function FindUser( $username )
 {
  $text = file( $GLOBALS['dbuser'] );

  if( in_array( $username, $text ) )
   return TRUE;

  else
   return FALSE;
 }
 //================================================================
  
 function check( $text )
 {
  $text = htmlspecialchars( stripslashes( strip_tags( $text ) ) );

  return $text;
 }
 //================================================================
?>



<?php

 $nickname = $_POST['nickname'];
 $theme = $_POST['theme'];
 $mess = $_POST['mess'];
 
 $dbmess = "";
 $date = date( "d-m-Y, H:i:s" );
 $fullmess = "Date: ".$date."\r\nNick: ".check( $nickname )."\r\nTheme: ".check( $theme )."\r\nMessage: ".check( $mess )."\r\n---------------------------------------\r\n\r\n";
 $ip = $_SERVER['REMOTE_ADDR'];

 $file = FOPEN( "db.txt", "a+" );
 FLOCK( $file, LOCK_EX );

 fputs( $file, $fullmess );

 FLOCK( $file, LOCK_UN );
 FCLOSE( $file );

//ОШИБКА В ЭТОМ БЛОКЕ, СКОРЕЕ ВСЕГО
if( ! FindUser( $nickname ) )
 {
  $dbuser = FOPEN( $dbuser, "a+" );
  FLOCK( $dbuser, LOCK_EX );

  $dbmess = " <b>".check( $nickname )."</b> ".$date." ".$ip;
  fwrite( $dbuser, $dbmess );

  FLOCK( $dbuser, LOCK_UN );
  FCLOSE( $dbuser );
 }

 echo "<script language='javascript'>alert( 'Âàøå îòçûâ óñïåøíî îòïðàâëåí. Ñïàñèáî!' );</script>";
 echo "<script language='javascript'>location.href = 'http://localhost/new/site/gb.php';</script>";

?>

На кракозябры плиз не обращайте внимания, они не играют роли.

Вот в чем проблема, собственно. Обратите внимание на функцию FindUser (сверху кода). Если эта функция возвратит TRUE, то все в порядке, юзер в файл не пишется, скрипт завершается без ошибок. Но если функция возвращает FALSE (т.е. юзер не найден в файле), то скрипт просто "подвисает" и все. И ничего не делает. Где я ошибся? Возможно, что я где-то наврал с блокировками файлов. 


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
vasac
Дата 12.7.2006, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: 8
Всего: 36



А чтобы не гадать выкини все остальное и оставь только этот блок.
Т.е. у тебя не проходит код:
Код

$f = fopen( 'users.txt', 'a+' );
flock( $f, LOCK_EX );
fwrite( $f, 'Просто строка' );
flock( $f, LOCK_UN );
fclose( $f );
? 

Что за операционка? На некоторых nix-ах с "a+" существуют проблемы.

А почему, кстати, при записи в файл переносы строк не вставляются?  

Это сообщение отредактировал(а) vasac - 12.7.2006, 20:58
PM WWW   Вверх
AztEK
Дата 12.7.2006, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 723
Регистрация: 4.1.2005

Репутация: 6
Всего: 18



А что за констукция
Код

$text = file( $GLOBALS['dbuser'] );

$GLOBALS['dbuser'] как получается? 


--------------------
Linux is like wigwam -- no windows, no gates, apache inside.
PM MAIL Jabber   Вверх
vasac
Дата 12.7.2006, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: 8
Всего: 36



AztEK, сверху там написано:
 
Код

$dbuser = "users.txt";
 
PM WWW   Вверх
AztEK
Дата 13.7.2006, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 723
Регистрация: 4.1.2005

Репутация: 6
Всего: 18



vasac, ой, точно, не заметил.

А действительно, зачем использовать "a+"? Хватит и просто "a" 


--------------------
Linux is like wigwam -- no windows, no gates, apache inside.
PM MAIL Jabber   Вверх
mr.Anderson
Дата 13.7.2006, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 1
Всего: 128



vasac, нет переносов, потому что при разборе строк мне они не нужны (у меня есть возможность отображения этого файла в таблице, чтобы не париться с пробелами и переносами, я юзаю только пробелы).

a+ для того, чтобы файл если не существует, то он бы создался. С этим режимом у меня никогда проблем не было... У меня еще в нескольких скриптах есть a+, там все ОК. 


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Kefir
Дата 13.7.2006, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: 13
Всего: 87



sim7, а локи реально ставятся? проверял? 
PM MAIL WWW Skype   Вверх
mr.Anderson
Дата 13.7.2006, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 1
Всего: 128



А как это можно проверить? 


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Kefir
Дата 13.7.2006, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: 13
Всего: 87



bool flock(...);  smile  
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0605 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.