Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PHP) использование fgets() и file() - а результат-то разный! / 23 сообщений из 23, страница 1 из 1
15.03.2005, 10:22
    #32960148
irkov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) использование fgets() и file() - а результат-то разный!
Доброго времени суток. Возник небольшой вопрос: есть два РНР-скрипта, выполнение которых должно, по логике вещей, давать один и тот же результат. А на практике....
Привожу отрывки кода (этот скрипт был написан для поиска ошибки, поэтому в нем в таком виде смысла особого нет):

1) $fp = fopen("city2.txt", 'r');
$conn = db_connect();
$query = "create table city3 (IDCity smallint(5) not null auto_increment primary key,
City varchar(50) CHARACTER SET cp1251) ";
$result = mysql_query($query);

while (!feof($fp))
{
$City1 = fgets($fp);
$City1 = ereg_replace('[^А-Яа-я]', '', $City1);
$City = ereg_replace("[\n\r\t\v\o]", "", $City1);
$City1 = trim($City1);
$result = mysql_query("insert into city3 (City) values (' $City1 ') ");
}

$City = 1;
$CityOther = 'Киев';
If ($City ==1)
{
$City = $CityOther;

$query = "select City from city3 where City = '$City' " ;
$result = mysql_query($query);
$num_result = mysql_num_rows($result);
echo 'найдено:'.$num_result;
If ($num_result==0)
{
$result1 = mysql_query("insert into city3 (City) values ('$City') ");
}
//Получаем ID города
$query = "select IDCity from city3 where City ='$City' " ;
$result = mysql_query($query);
$num_result = mysql_num_rows($result);
$row = mysql_fetch_array($result);
$City = $row['IDCity'];
}
echo 'ID ='.$City;

Результат: при первом вызове имеем найдено: 0; ID=832, т.е. "Киев", несмотря на то, что в базе он присутствует, найден не был; его добавили в конец таблицы, и только потом нашли.

Код номер 2: все то же самое, повторяться не буду, используется др. функция для вставки значений в базу:
2)
$fp = file("city2.txt");
$number = count($fp);

for($i = 0; $i < $number;$i++)
{

$City1 = $fp[$i];

$City1 = trim($City1);

$City1 = ereg_replace("[^а-я^А-я]", "", $City1);
$City1 = ereg_replace("[\n\r\t\v\o]", "", $City1);
$strSQL = "insert into city3 (City) values ('".$City1."')";
$result = mysql_query($strSQL);
}
...
....
....
Результат: Результат: при первом вызове имеем: найдено: 1; ID=320, т.е. "Киев" в данном случае находится....
Получается, что значения в базу данных попадают разные при использовании fgets() и file()?
Но такого не должно же вроде быть.....
Подскажите, пожалуйста, почему так выходит?
Версии: MySQL 4.1.8, PHP 4.3.10
...
Рейтинг: 0 / 0
15.03.2005, 10:30
    #32960166
(PHP) использование fgets() и file() - а результат-то разный!
$City = 1;
$CityOther = 'Киев';
If ($City ==1)
{
$City = $CityOther;


не уловил идею.
суть вопроса-то в чём?
...
Рейтинг: 0 / 0
15.03.2005, 10:37
    #32960181
irkov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) использование fgets() и file() - а результат-то разный!
Реально эти значения вводятся в форме: Пользователь либо выбирает свой город из списка, либо заносит его в текстовое поле, если свой город он в списке не нашел. Затем значение из текстового поля сравнивается со списком городов в базе (а вдруг пользователю просто лень было список смотреть?), если город не найден, он добавляется в базу.
$City = 1;
$CityOther = 'Киев';
было добавлено здесь, просто чтоб не ломать всю структуру существующего скрипта, т.к. сначала было вообще непонятно, почему скрипт так загадочно работает.....
...
Рейтинг: 0 / 0
15.03.2005, 10:51
    #32960207
*
*
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) использование fgets() и file() - а результат-то разный!
irkovПолучается, что значения в базу данных попадают разные при использовании fgets() и file()?Читать ВНИМАТЕЛЬНО про file , затем сравнивать с fgets
...
Рейтинг: 0 / 0
15.03.2005, 10:51
    #32960209
Sehensucht! (потерял пароль)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) использование fgets() и file() - а результат-то разный!
а в этом какой смысл?

Код: plaintext
1.
$City1 = fgets($fp);
$City1 = ereg_replace('[^А-Яа-я]', '', $City1);
...
Рейтинг: 0 / 0
15.03.2005, 10:56
    #32960222
*
*
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) использование fgets() и file() - а результат-то разный!
И вообще, определитесь уже, откуда у вас данные в базу попадают (то ли с файла, то ли от пользователя - я так и не понял).
...
Рейтинг: 0 / 0
15.03.2005, 11:01
    #32960243
irkov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) использование fgets() и file() - а результат-то разный!
$City1 = fgets($fp);
$City1 = ereg_replace('[^А-Яа-я]', '', $City1);
- было добавлено при поиске ошибки..... Насколько я понимаю, должно было бы хватить trim().


File() и fgets() ..... Не вижу принципиальной разницы в том, считывать файл сразу целиком, или делать это построчно......
Циклы для обработки полученных значений, в общем-то, разные.....
Вопрос в том, почему в базу попадают разные значения......
...
Рейтинг: 0 / 0
15.03.2005, 11:06
    #32960258
Sehensucht! (потерял пароль)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) использование fgets() и file() - а результат-то разный!
Код: plaintext
$City1 = ereg_replace("[^а-я^А-я]", "", $City1);

есть понимание, что сделает эта функция?
...
Рейтинг: 0 / 0
15.03.2005, 11:18
    #32960300
irkov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) использование fgets() и file() - а результат-то разный!
Эта функция оставит в результате только буквы русского алфавита......
И вообще: в исходном скрипте есть только trim(), и для второго варианта кода его достаточно.....
А для первого - не помогает ничего... В этом-то и проблема.

Значения в базу изначально попадают из файла. Эти значения используются в SELECT в форме. Если пользователь не находит свой город в этом SELECT, он вписывает название в текстовое поле, и оттуда (после проверки на совпадение с данными из таблицы, а вдруг человеку просто лень читать было) название города попадает в базу.
...
Рейтинг: 0 / 0
15.03.2005, 11:51
    #32960408
*
*
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) использование fgets() и file() - а результат-то разный!
Если MySQL не находит запись в базе - то либо её дейтсвительно нет, либо произошла ошибка запроса. Третьего - не дано.
...
Рейтинг: 0 / 0
15.03.2005, 12:01
    #32960443
irkov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) использование fgets() и file() - а результат-то разный!
Запись есть. Просто не видно, что туда попадает (в первом варианте), кроме названия города......Ведь в результате выводится ID=832 (в текстовом файле 831 строка, т.е. происходит добавление новой записи в конец таблицы )

Если значения в базу вводятся: 1)вручную (при поиске ошибки - штук 20 было добавлено через phpmyadmin), 2)при применении второго скрипта, 3) из формы (пользователем) - запрос работает корректно, находится существующая запись. Значит, проблема в том, что попадает в базу в первом варианте скрипта (к сожалению, визуально этого не видно.....).
...
Рейтинг: 0 / 0
15.03.2005, 12:24
    #32960509
Sehensucht! (потерял пароль)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) использование fgets() и file() - а результат-то разный!
Тип оф зе дэй: Выведи на экран sql-запрос на селект и инсерт и сравни их. ИМХО, проблема станет очевидной.
...
Рейтинг: 0 / 0
15.03.2005, 12:24
    #32960510
*
*
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) использование fgets() и file() - а результат-то разный!
irkovЗначит, проблема в том, что попадает в базу в первом варианте скрипта (к сожалению, визуально этого не видно.....). PHP FAQ: Ничего не работает! Что делать???
Код:
1.
2.
echo "<pre>\n";
var_dump(array($var));
echo "<pre>\n";
...
Рейтинг: 0 / 0
15.03.2005, 12:25
    #32960512
*
*
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) использование fgets() и file() - а результат-то разный!
Пардон,
Код: plaintext
1.
2.
echo "<pre>\n";
var_dump($var);
echo "<pre>\n";
...
Рейтинг: 0 / 0
15.03.2005, 12:37
    #32960548
irkov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) использование fgets() и file() - а результат-то разный!
Sehensucht! (потерял пароль)Тип оф зе дэй: Выведи на экран sql-запрос на селект и инсерт и сравни их. ИМХО, проблема станет очевидной.

Не совсем понимаю..... В том-то и дело, что не равны эти значения (причем исключительно для первого варианта кода, хотя при использовании всех тех функций trim(), ereg_replace() в строке вообще никаких левых символов оставаться не может)
...
Рейтинг: 0 / 0
15.03.2005, 12:44
    #32960567
*
*
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) использование fgets() и file() - а результат-то разный!
irkov , читайте ФАК. Эта проблема из разряда тех, которую вы должны решить самостоятельно.
...
Рейтинг: 0 / 0
15.03.2005, 12:51
    #32960590
Sehensucht! (потерял пароль)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) использование fgets() и file() - а результат-то разный!
да ладно вам, Guest, я сейчас подъеду к irkov и все сделаю ;)
...
Рейтинг: 0 / 0
15.03.2005, 12:55
    #32960606
irkov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) использование fgets() и file() - а результат-то разный!
* irkov , читайте ФАК. Эта проблема из разряда тех, которую вы должны решить самостоятельно.

Если честно, то с этого я обычно начинаю, потому как не люблю людей отвлекать по пустякам.
И обычно помогает. И только если не помогает, иду в форум.
В данном случае..... Рабочий вариант кода у меня есть. А проблему с нерабочим буду решать по мере возможности (не люблю оставлять нерешенные вопросы, потом может боком вылезти)
...
Рейтинг: 0 / 0
15.03.2005, 13:05
    #32960635
irkov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) использование fgets() и file() - а результат-то разный!
Sehensucht! (потерял пароль)да ладно вам, Guest, я сейчас подъеду к irkov и все сделаю ;)

Спасибо за содействие. Но, во-первых, далеко придется ехать, а во-вторых, если за меня сделать, я ведь так ничему и не научусь.
Новые пути решения проблемы есть, буду пробовать. Рано или поздно получится.
...
Рейтинг: 0 / 0
15.03.2005, 13:07
    #32960643
Sehensucht! (потерял пароль)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) использование fgets() и file() - а результат-то разный!
irkovСпасибо за содействие. Но, во-первых, далеко придется ехать, а во-вторых, если за меня сделать, я ведь так ничему и не научусь.
Новые пути решения проблемы есть, буду пробовать. Рано или поздно получится
Мудро :)

Просто будь внимательнее и со временем появится опыт ;)
...
Рейтинг: 0 / 0
15.03.2005, 21:37
    #32961989
irkov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) использование fgets() и file() - а результат-то разный!
Всем спасибо, все работает. Да, главное - воспользоваться подходящим методом для поиска ошибок.
Дамп все действительно расставил на свои места.

З.Ы. А в приведенном выше коде нет той ошибки, которая была в реальном скрипте и все это вызывала.....
...
Рейтинг: 0 / 0
15.03.2005, 22:14
    #32962001
*
*
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) использование fgets() и file() - а результат-то разный!
irkovДамп все действительно расставил на свои места.Пользуйся. В следующий раз прежде чем что-нибудь спросить (в плане "найдите ошибку") - обязательно вспоминай о FAQ. Как минимум - он позволит тебе правильно описать проблему. irkovА в приведенном выше коде нет той ошибки, которая была в реальном скрипте и все это вызывала.....Ну вот видишь - поди догадайся, чего там у тебя не так, за тыщу километров от тебя :)
А проблема-то всё же в чём заключалась?
...
Рейтинг: 0 / 0
18.03.2005, 11:19
    #32967688
irkov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) использование fgets() и file() - а результат-то разный!
Вспоминать-то я вспоминаю, но поскольку я только начинаю изучать рнр, бывает сложно применять теорию на практике.

А проблема заключалась в пробеле, который был между открывающей кавычкой и именем переменной непосредственно в запросе на добавление значений в таблицу из файла.....И который благополучно попадал в таблицу....
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PHP) использование fgets() и file() - а результат-то разный! / 23 сообщений из 23, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]