| |
 1.8 Кб |
|
| | Я никогда не работал с файлами. Хотел сначала для добавления данных товара в корзину использовать массив сессий, но так ничего и не получилось. Ну тогда я это потом разберусь, т. к. никто еще не смог мне в этом помочь. Тогда придумал хотя бы собирать все данные в файле. Но так как я с ними не работал, то мне хочется чтобы в созданном файле проверялись значения товара, и если этот товар уже существует (т. е. такая строка в файле уже есть) то запись не производить или удалять повторяющиеся записи. Помогите пожалуйста это осуществить.
Прикрепляю свой файл. | |
| |
|
|
| |
 1.6 Кб |
|
| |
для: diman
(19.09.2006 в 11:30)
| | | Вот, что-то типа этого | |
| |
|
|
| |
|
|
| |
для: ec_stasis
(19.09.2006 в 11:43)
| | | Что делает функция file()? Пишет ошибку о несуществовании такого файла. | |
| |
|
|
| |
|
|
| |
для: Diman
(19.09.2006 в 12:03)
| | | Функция помещает данные из файла в массив, каждый элемент - одна строка.
Значит неверно имя файла. Вроде брал из твоего кода | |
| |
|
|
| |
|
|
| |
для: ec_stasis
(19.09.2006 в 12:11)
| | | С этим можно и поиграть. Но тогда наверное следует вначеле открыть файл. Файл сам создается. Но ошибка осталась прежняя:
Can't open Гость.txt: php_errormsg
$product=$prod['kod']."/".$prod['name']."/".$prod['price']."<br>";
$name_file=$_SESSION['login'].".txt";
$fp = fopen('admin/file/'.$name_file, 'a')
or die("Can't open $name_file:php_errormsg");
$korzina = file('admin/file/'.$name_file)
or die("Can't open $name_file:php_errormsg");
if (!in_array($product . "\n", $korzina))
{
fwrite($fp, $product . "\n");
fclose($fp);
}
|
| |
| |
|
|
| |
|
|
| |
для: Diman
(19.09.2006 в 12:24)
| | | Нет, наверное, надо вначеле вызывать File(), а потом открывать файл.
сделай так, и увидишь, где не открывается файл (1 или 2).
Тут 2 варианта:
если нет файла - то 1;
если файл есть, но ты его открыл на запись, то 2
$product=$prod['kod']."/".$prod['name']."/".$prod['price']."<br>";
$name_file=$_SESSION['login'].".txt";
$fp = fopen('admin/file/'.$name_file, 'a')
or die("1: Can't open $name_file: $php_errormsg");
$korzina = file('admin/file/'.$name_file)
or die("2: Can't open $name_file: $php_errormsg");
if (!in_array($product . "\n", $korzina))
{
fwrite($fp, $product . "\n");
fclose($fp);
}
|
| |
| |
|
|
| |
|
|
| |
для: ec_stasis
(19.09.2006 в 13:07)
| | | Наверное, тебе надо создавать такой файл при регистрации пользователя, или при его входе в систему. Тогда file() не будет говорить, что файл не существует. | |
| |
|
|
| |
|
|
| |
для: ec_stasis
(19.09.2006 в 13:09)
| | | Ничего не могу понять. Файл действительно есть. Да, и он открыт действительно на запись. Для чего же он мне еще нужен, именно для записи. Именно возникает ошибка при использовании функции file(). Помогите кто-нибудь, а? | |
| |
|
|
| |
|
|
| |
для: Diman
(19.09.2006 в 15:49)
| | | А в сообщении об ошибке кроме "Can't open" есть что-то ещё? Как точно оно выглядит в оригинале? | |
| |
|
|
| |
|
|
| |
для: cheops
(19.09.2006 в 18:33)
| | | Функция $php_errormsg вообще не срабатывает. Действует как какая-то простая переменная, а хотелось бы действительно увидеть в чем ошибка. | |
| |
|
|
| |
|
|
| |
для: Diman
(20.09.2006 в 07:44)
| | | Ну что, мне кто-нибудь поможет? Если не получается с этим вариантом, то предложите другой. | |
| |
|
|
| |
|
|
| |
для: Diman
(20.09.2006 в 07:44)
| | | А дело где происходит на хостинге или локальной машине? | |
| |
|
|
| |
|
|
| |
для: cheops
(20.09.2006 в 12:48)
| | | На локальной машине.
Теперь заметил следующее. Если же в файле сперва что-либо прописать, поставить пробел или еще что-то, то все работает. Как сделать так, чтобы файл создавался в самом начале, при входе в систему. Если использовать в главном файле fopen() это поможет?
А лучше как создать временный файл и сколько он существует? Так как я хочу данные из массива $korzina присвоить массиву $_SESSION['korzina']. Я пытался это сделать без файлов, но чтож, придется обходить эту вещь таким путем. | |
| |
|
|
| |
|
|
| |
для: Diman
(20.09.2006 в 13:17)
| | | А у вас Apache из под какого пользователя запущен? Администратора или System? | |
| |
|
|
| |
|
|
| |
для: cheops
(20.09.2006 в 13:25)
| | | Администратора | |
| |
|
|
| |
|
|
| |
для: Diman
(20.09.2006 в 13:28)
| | | Хм... странно, а версии PHP и Apache какие? | |
| |
|
|
| |
|
|
| |
для: Diman
(20.09.2006 в 07:44)
| | | $php_errormsg - это не функция, а переменная. Определяется только в том случае, если в настройках пхп (пхп.ини) директива track_errors = On.
А для того, чтобы видеть ошибки можно
display_errors = On
Error_reporting = E_ALL | |
| |
|
|
| |
|
|
| |
для: Diman
(19.09.2006 в 15:49)
| | | Он тебе еще нужен для чтения, чтобы узнать что в корзине :). file() - как раз и есть чтение. | |
| |
|
|
| |
|
|
| |
для: ec_stasis
(20.09.2006 в 13:56)
| | | Включил
track_errors = On
Пишет
A session had already been started - ignoring session_start()
Вот теперь всё ясно. Значит ему мешают сессии. Ну что ж, буду создавать вначале главной страницы файл, пропишу в него пустую строку и всё будет Ok. | |
| |
|
|