|
|
|
(PHP) использование fgets() и file() - а результат-то разный!
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток. Возник небольшой вопрос: есть два РНР-скрипта, выполнение которых должно, по логике вещей, давать один и тот же результат. А на практике.... Привожу отрывки кода (этот скрипт был написан для поиска ошибки, поэтому в нем в таком виде смысла особого нет): 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2005, 10:22 |
|
||
|
(PHP) использование fgets() и file() - а результат-то разный!
|
|||
|---|---|---|---|
|
#18+
$City = 1; $CityOther = 'Киев'; If ($City ==1) { $City = $CityOther; не уловил идею. суть вопроса-то в чём? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2005, 10:30 |
|
||
|
(PHP) использование fgets() и file() - а результат-то разный!
|
|||
|---|---|---|---|
|
#18+
Реально эти значения вводятся в форме: Пользователь либо выбирает свой город из списка, либо заносит его в текстовое поле, если свой город он в списке не нашел. Затем значение из текстового поля сравнивается со списком городов в базе (а вдруг пользователю просто лень было список смотреть?), если город не найден, он добавляется в базу. $City = 1; $CityOther = 'Киев'; было добавлено здесь, просто чтоб не ломать всю структуру существующего скрипта, т.к. сначала было вообще непонятно, почему скрипт так загадочно работает..... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2005, 10:37 |
|
||
|
(PHP) использование fgets() и file() - а результат-то разный!
|
|||
|---|---|---|---|
|
#18+
irkovПолучается, что значения в базу данных попадают разные при использовании fgets() и file()?Читать ВНИМАТЕЛЬНО про file , затем сравнивать с fgets ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2005, 10:51 |
|
||
|
(PHP) использование fgets() и file() - а результат-то разный!
|
|||
|---|---|---|---|
|
#18+
а в этом какой смысл? Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2005, 10:51 |
|
||
|
(PHP) использование fgets() и file() - а результат-то разный!
|
|||
|---|---|---|---|
|
#18+
И вообще, определитесь уже, откуда у вас данные в базу попадают (то ли с файла, то ли от пользователя - я так и не понял). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2005, 10:56 |
|
||
|
(PHP) использование fgets() и file() - а результат-то разный!
|
|||
|---|---|---|---|
|
#18+
$City1 = fgets($fp); $City1 = ereg_replace('[^А-Яа-я]', '', $City1); - было добавлено при поиске ошибки..... Насколько я понимаю, должно было бы хватить trim(). File() и fgets() ..... Не вижу принципиальной разницы в том, считывать файл сразу целиком, или делать это построчно...... Циклы для обработки полученных значений, в общем-то, разные..... Вопрос в том, почему в базу попадают разные значения...... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2005, 11:01 |
|
||
|
(PHP) использование fgets() и file() - а результат-то разный!
|
|||
|---|---|---|---|
|
#18+
Код: plaintext есть понимание, что сделает эта функция? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2005, 11:06 |
|
||
|
(PHP) использование fgets() и file() - а результат-то разный!
|
|||
|---|---|---|---|
|
#18+
Эта функция оставит в результате только буквы русского алфавита...... И вообще: в исходном скрипте есть только trim(), и для второго варианта кода его достаточно..... А для первого - не помогает ничего... В этом-то и проблема. Значения в базу изначально попадают из файла. Эти значения используются в SELECT в форме. Если пользователь не находит свой город в этом SELECT, он вписывает название в текстовое поле, и оттуда (после проверки на совпадение с данными из таблицы, а вдруг человеку просто лень читать было) название города попадает в базу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2005, 11:18 |
|
||
|
(PHP) использование fgets() и file() - а результат-то разный!
|
|||
|---|---|---|---|
|
#18+
Если MySQL не находит запись в базе - то либо её дейтсвительно нет, либо произошла ошибка запроса. Третьего - не дано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2005, 11:51 |
|
||
|
(PHP) использование fgets() и file() - а результат-то разный!
|
|||
|---|---|---|---|
|
#18+
Запись есть. Просто не видно, что туда попадает (в первом варианте), кроме названия города......Ведь в результате выводится ID=832 (в текстовом файле 831 строка, т.е. происходит добавление новой записи в конец таблицы ) Если значения в базу вводятся: 1)вручную (при поиске ошибки - штук 20 было добавлено через phpmyadmin), 2)при применении второго скрипта, 3) из формы (пользователем) - запрос работает корректно, находится существующая запись. Значит, проблема в том, что попадает в базу в первом варианте скрипта (к сожалению, визуально этого не видно.....). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2005, 12:01 |
|
||
|
(PHP) использование fgets() и file() - а результат-то разный!
|
|||
|---|---|---|---|
|
#18+
Тип оф зе дэй: Выведи на экран sql-запрос на селект и инсерт и сравни их. ИМХО, проблема станет очевидной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2005, 12:24 |
|
||
|
(PHP) использование fgets() и file() - а результат-то разный!
|
|||
|---|---|---|---|
|
#18+
irkovЗначит, проблема в том, что попадает в базу в первом варианте скрипта (к сожалению, визуально этого не видно.....). PHP FAQ: Ничего не работает! Что делать??? Код: 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2005, 12:24 |
|
||
|
(PHP) использование fgets() и file() - а результат-то разный!
|
|||
|---|---|---|---|
|
#18+
Пардон, Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2005, 12:25 |
|
||
|
(PHP) использование fgets() и file() - а результат-то разный!
|
|||
|---|---|---|---|
|
#18+
Sehensucht! (потерял пароль)Тип оф зе дэй: Выведи на экран sql-запрос на селект и инсерт и сравни их. ИМХО, проблема станет очевидной. Не совсем понимаю..... В том-то и дело, что не равны эти значения (причем исключительно для первого варианта кода, хотя при использовании всех тех функций trim(), ereg_replace() в строке вообще никаких левых символов оставаться не может) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2005, 12:37 |
|
||
|
(PHP) использование fgets() и file() - а результат-то разный!
|
|||
|---|---|---|---|
|
#18+
irkov , читайте ФАК. Эта проблема из разряда тех, которую вы должны решить самостоятельно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2005, 12:44 |
|
||
|
(PHP) использование fgets() и file() - а результат-то разный!
|
|||
|---|---|---|---|
|
#18+
да ладно вам, Guest, я сейчас подъеду к irkov и все сделаю ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2005, 12:51 |
|
||
|
(PHP) использование fgets() и file() - а результат-то разный!
|
|||
|---|---|---|---|
|
#18+
* irkov , читайте ФАК. Эта проблема из разряда тех, которую вы должны решить самостоятельно. Если честно, то с этого я обычно начинаю, потому как не люблю людей отвлекать по пустякам. И обычно помогает. И только если не помогает, иду в форум. В данном случае..... Рабочий вариант кода у меня есть. А проблему с нерабочим буду решать по мере возможности (не люблю оставлять нерешенные вопросы, потом может боком вылезти) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2005, 12:55 |
|
||
|
(PHP) использование fgets() и file() - а результат-то разный!
|
|||
|---|---|---|---|
|
#18+
Sehensucht! (потерял пароль)да ладно вам, Guest, я сейчас подъеду к irkov и все сделаю ;) Спасибо за содействие. Но, во-первых, далеко придется ехать, а во-вторых, если за меня сделать, я ведь так ничему и не научусь. Новые пути решения проблемы есть, буду пробовать. Рано или поздно получится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2005, 13:05 |
|
||
|
(PHP) использование fgets() и file() - а результат-то разный!
|
|||
|---|---|---|---|
|
#18+
irkovСпасибо за содействие. Но, во-первых, далеко придется ехать, а во-вторых, если за меня сделать, я ведь так ничему и не научусь. Новые пути решения проблемы есть, буду пробовать. Рано или поздно получится Мудро :) Просто будь внимательнее и со временем появится опыт ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2005, 13:07 |
|
||
|
(PHP) использование fgets() и file() - а результат-то разный!
|
|||
|---|---|---|---|
|
#18+
Всем спасибо, все работает. Да, главное - воспользоваться подходящим методом для поиска ошибок. Дамп все действительно расставил на свои места. З.Ы. А в приведенном выше коде нет той ошибки, которая была в реальном скрипте и все это вызывала..... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2005, 21:37 |
|
||
|
(PHP) использование fgets() и file() - а результат-то разный!
|
|||
|---|---|---|---|
|
#18+
irkovДамп все действительно расставил на свои места.Пользуйся. В следующий раз прежде чем что-нибудь спросить (в плане "найдите ошибку") - обязательно вспоминай о FAQ. Как минимум - он позволит тебе правильно описать проблему. irkovА в приведенном выше коде нет той ошибки, которая была в реальном скрипте и все это вызывала.....Ну вот видишь - поди догадайся, чего там у тебя не так, за тыщу километров от тебя :) А проблема-то всё же в чём заключалась? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2005, 22:14 |
|
||
|
(PHP) использование fgets() и file() - а результат-то разный!
|
|||
|---|---|---|---|
|
#18+
Вспоминать-то я вспоминаю, но поскольку я только начинаю изучать рнр, бывает сложно применять теорию на практике. А проблема заключалась в пробеле, который был между открывающей кавычкой и именем переменной непосредственно в запросе на добавление значений в таблицу из файла.....И который благополучно попадал в таблицу.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2005, 11:19 |
|
||
|
|

start [/forum/topic.php?fid=23&msg=32960258&tid=1478596]: |
0ms |
get settings: |
6ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
23ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
| others: | 215ms |
| total: | 346ms |

| 0 / 0 |
