[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вопрос знатокам
zmmradm
Господа програмисты. Помогите советом.

Имеется файл с такой структурой:
main | 2009.html | Главное меню | Дилерам | 4 | 0
main | preimushestva.html | Главное меню | Преимущества | 2 | 0
main | main.html | Главное меню | Натяжные потолки | 1 | 1
main | stoimost.html | Главное меню | Стоимость потолков | 3 | 0

Имеется функция:

<?php
function
check_main_page($checkmainpage='')
{
$file = file('../modules/mod_articles/data/category.dat');
$str = count($file);
$fp = fopen("../modules/mod_articles/data/category.dat", "w");

for ($i=0; $i<$str; $i++)
{
$piece = explode("|", $file[$i]);
if ($checkmainpage === trim($piece[1]))
{
$line = trim($piece[0]).' | '.trim($piece[1]).' | '.trim($piece[2]).' | '.trim($piece[3]).' | '.trim($piece[4]).' | 1 ';
}
else
{
$line = trim($piece[0]).' | '.trim($piece[1]).' | '.trim($piece[2]).' | '.trim($piece[3]).' | '.trim($piece[4]).' | 0 ';
}

fputs($fp, $line."\r\n");
}

fclose($fp);

}

Вот таким образом ее стартую: check_main_page('stoimost.html');

Теоретически функция должна записать файл в массив, где каждый элемент массива - строка, затем построчно перезаписать файл из массива и найдя строку c элементом stoimost.html, в конце строки поставить цифру '1', а во всех остальных случаях ставить в конце строки 0.

А проблема заключается в том, что если я передаю в функцию название элемента, который находится строкой выше элемента с единичкой в конце функция не перезаписывает выбранную строку, а если строкой ниже то ставит в конце '1'



Спустя 14 минут, 43 секунды (22.12.2009 - 19:31) VolCh написал(а):
fputs($fp, $line."\r\n");
замени на
fputs($fp, $line."\n");
если крутится под никсами сайт

Спустя 2 минуты, 18 секунд (22.12.2009 - 19:34) zmmradm написал(а):
Нет сайт находится на моем домашнем сервере под виндой.
Кстати когда перезаливал его под никсовй сервер "\r\n" спокойно ставил переход на новую строку. Спасибо за совет но это проблему не решило

Спустя 18 минут, 57 секунд (22.12.2009 - 19:53) VolCh написал(а):
Хм... Раз на домашнем сервере, значит ситуация, что идёт несколько обращений исключена (ведь нет никаких блокировок, а файл общий на всех)? Только что прогнал на своем хостинге - вроде всё работает как надо. Может у тебя что-нибудь где-то кешеируется?

Спустя 39 минут, 39 секунд (22.12.2009 - 20:32) twin написал(а):
Попробуй
$file = array_map('rtrim', file('../modules/mod_articles/data/category.dat'));

Спустя 8 минут, 57 секунд (22.12.2009 - 20:41) zmmradm написал(а):
В общем если вызвать функцию так: check_main_page('stoimost.html'); И о чудо все работает, и все хорошо в любой последовательности,

допустим что $_REQUEST['checkmainpage'] = stoimost.html
А если вызвать так: check_main_page($_REQUEST['checkmainpage']); то блин все равно, не работает ппц, что-то никак не определю в чем же дело...

Спустя 8 минут, 24 секунды (22.12.2009 - 20:50) zmmradm написал(а):
Цитата (twin @ 22.12.2009 - 17:32)
Попробуй
$file = array_map('rtrim', file('../modules/mod_articles/data/category.dat'));

Ничего не изменилось, никаких ошибок не написалось =(.
Прилагаю скрин и листинг формы в которой происходит вызов функции.

<form name="mainpage" action="index.php?option=com_modules&mod=articles&content=all&actid=4" method="post">
<table
border=0 cellspacing=3><tr><td>Название страницы</td><td>Категория</td><td>УРЛ</td><td>По умолчанию</td></tr><tr>';
<td>тут вывод названия</td>
<td>
итд</td>
<td>
итд</td>
<td><input
onClick="mainpage.submit()" name="checkmainpage" type="checkbox" value="тут вывод урл страницы"></td>
</tr>
<tr>
<td><input
type="submit" value="Выбрать"></td>
</tr>
</table>
</form>


Вызов функции происходит оперaтором
switch ($_REQUEST['actid']) {
case 4:
check_main_page($_REQUEST['checkmainpage'])
break;
}

Спустя 10 минут, 23 секунды (22.12.2009 - 21:00) VolCh написал(а):
хм.. а если строчку
if ($checkmainpage === trim($piece[1]))
заменить на
if (trim($checkmainpage) == trim($piece[1]))


добавлено trim и === заменен на ===

Спустя 18 минут, 19 секунд (22.12.2009 - 21:18) zmmradm написал(а):
Цитата (VolCh @ 22.12.2009 - 18:00)
хм.. а если строчку
if ($checkmainpage === trim($piece[1]))
заменить на
if (trim($checkmainpage) == trim($piece[1]))


добавлено trim и === заменен на ===

Блин мистика какая-то, все как ты сказал заменил, тоже самое =((

Спустя 8 минут, 55 секунд (22.12.2009 - 21:27) zmmradm написал(а):
Тут мне кажется дело не в пробелах, он условие(сравнения) выполняет на ура. Просто не может поставить единичку в строчке файла, где позиция выше чем текущая строка с единицей. Короче вниз ставит, вверх никак =(

Спустя 13 минут, 38 секунд (22.12.2009 - 21:41) VolCh написал(а):
Да ужж.. удалить файл перед записью? smile.gif

Спустя 1 час, 47 минут, 52 секунды (22.12.2009 - 23:29) zmmradm написал(а):
Я просто очень невнимательный. Так лоханулся ужас =(. В функции вывода формы:
function get_content_form_all() {
$file = file('../modules/mod_articles/data/category.dat');
echo '
<big>Тут можно указать какая страница выводится по умолчанию на лицевой части сайта</big>
<form name="mainpage" action="index.php?option=com_modules&mod=articles&content=all&actid=4" method="post">
<table border=0 cellspacing=3><tr><td>Название страницы</td><td>Категория</td><td>УРЛ</td><td>Выбрать?</td><td>Статус</td></tr><tr>'
;
foreach ($file as $value) {
$piece = explode("|", $value);
echo '<td>'.$piece[3].'</td>
<td>'
.$piece[2].'</td>
<td>'
.$piece[1].'</td>';
if (trim($piece[5]) === '1') {
$checked = '<img src="/admin/images/publish_g.png" title="На главной">';
} else {
$checked = '<img src="/admin/images/publish_r.png" title="Обычная">';
}
echo '<td>
<input onClick="mainpage.submit()" name="checkmainpage" type="checkbox" value="'
.trim($piece[1]).'"></td>
<td>'
.$checked.'</td>
</tr>'
;
}
echo '<tr><td><input type="submit" value="Выбрать"></td></tr></table></form>';
}

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

Всем спасибо за посильную помощь, а в особенности товарищу VolCh - он натолкнул меня на мысль проверить функцию напрямую без формы
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.