Вот как у вас написано функция вывода, зачем тут $num, если чуть ниже она вообще считывает кол-во постов в файле($num = count($posts), их может быть в первом файл скажем 4, потом эти 4 обрабатываются и вставляются в ссылку($menu .= '<a href="?page='. $num .'">'. $num .'</a> | '; ), но ведь имея 4 записи в первом файле мы не получаем 4 страницы, можете поподробнее объяснить что происходит, есть подозрение что я цикл foreach в данном коде не могу понять, что он именно делает, ведь foreach работает с массивами, а тут его нет я так понимаю!
function pageMenu($page)
{
$files = dirScan('data');
$menu = ' | ';
foreach($files as $num)
if($page == $num)
$menu .= '<strong>'. $num .'</strong> | ';
else
$menu .= '<a href="?page='. $num .'">'. $num .'</a> | ';
return $menu;
}
Спустя 21 минута, 16 секунд (4.05.2010 - 17:31) twin написал(а):
Вот это ключевой момент:
Эта функция возвращает номера файлов, которые имеются в директории. В каждом из которых (кроме последнего) уже есть определенное количество постов. И в ссылку подставляется номер файла.
По этому на странице будет только содержимое одного из них.
$files = dirScan('data');
Эта функция возвращает номера файлов, которые имеются в директории. В каждом из которых (кроме последнего) уже есть определенное количество постов. И в ссылку подставляется номер файла.
По этому на странице будет только содержимое одного из них.
Спустя 19 минут, 55 секунд (4.05.2010 - 17:51) Spamol написал(а):
С этим я уже разобрался, что делает переменная $num не понятно, ведь она кол-во постов из файла читает?
А конкретно из последнего файла
$num = count($posts);
А конкретно из последнего файла
$file = max(dirScan('data'));
$posts = unserialize(file_get_contents('data/'.$file));
Спустя 6 минут, 36 секунд (4.05.2010 - 17:58) twin написал(а):
Да, считает количество постов в последнем файле. Функция max() выдаст максимальный элемент массива, а значит номер последнего файла.
Спустя 10 минут, 59 секунд (4.05.2010 - 18:09) twin написал(а):
Я кажется понял, в чем вопрос. Переменная $num в функции, это совсем не та, что ниже. В функции она живет самостоятельной жизнью и образуется именно в цикле foreach. В неё при каждой интерации (витке цикла) записывается по очереди элемент массива. А в массиве $files номера файлов.
Просто они одинаково называются, а служат для разных целей.
Просто они одинаково называются, а служат для разных целей.
Спустя 16 минут, 45 секунд (4.05.2010 - 18:25) Spamol написал(а):
Воо блин, теперь вроде ясно, жесть, а я всю говову сломал, могли бы в комментах в коде поменить, что это две разные фукции или хотя бы назвать по разному)
Т.е. если у меня 3 файла, в цикле в $num почередно попадет 1,2,3, пока не кончаться файлы?
Т.е. если у меня 3 файла, в цикле в $num почередно попадет 1,2,3, пока не кончаться файлы?
Спустя 5 минут, 55 секунд (4.05.2010 - 18:31) twin написал(а):
Функции называются по разному. Они не могут одинаково называться, а то будет конфликт имен.
А к тому, что переменные называются одинаково - привыкай. Это обычная практика.
Во первых при большом листинге не хватит фантазии придумать всем разные.
А если и придумаешь, это усложнит читабельность.
Да и перезапись экономит память, если не уничтожать ненужные.
А к тому, что переменные называются одинаково - привыкай. Это обычная практика.
Во первых при большом листинге не хватит фантазии придумать всем разные.
А если и придумаешь, это усложнит читабельность.
Да и перезапись экономит память, если не уничтожать ненужные.
Цитата |
Т.е. если у меня 3 файла, в цикле в $num почередно попадет 1,2,3, пока не кончаться файлы? |
именно так.
Спустя 4 часа, 11 минут, 18 секунд (4.05.2010 - 22:43) Spamol написал(а):
Так-с, вот еще вопрос, но уже про админку, расскажите как работает этот цикл
Не пойму как он находит какой именно коммент править, ведь нету не id ничего, как обратиться к отдельному комменту, например чтобы дописать функционал редактирования, которой хочу ради практики сделать!
for($i = 0; $i < count($delete); ++$i)
{
$posts[$delete[$i]]['name'] = '';
$posts[$delete[$i]]['mess'] = 'Удалено модератором';
}
Не пойму как он находит какой именно коммент править, ведь нету не id ничего, как обратиться к отдельному комменту, например чтобы дописать функционал редактирования, которой хочу ради практики сделать!
Спустя 56 минут, 43 секунды (4.05.2010 - 23:39) twin написал(а):
Сделай чуть выше так
echo '<pre>';и изучай что где.
print_r($_POST);
print_r($posts);
echo '</pre>';
for($i = 0; $i < count($delete); ++$i)
{
$posts[$delete[$i]]['name'] = '';
$posts[$delete[$i]]['mess'] = 'Удалено модератором';
}
Спустя 12 часов, 39 минут, 31 секунда (5.05.2010 - 12:19) Spamol написал(а):
Я понимал и без этого, что в этих массивах, сейчас на свежую голову посмотрел, понял что через POST приходит массив delete с ключом коммента, который изменить, потом в цикле идет перебор до нужного коммента и он его редактирует, все ясно, но вот как до этого самому додуматься, это вообще жесть, надеюсь это придет и ко мне со временем=)
Спустя 12 минут, 17 секунд (5.05.2010 - 12:31) twin написал(а):
Придет со временем))) Это просто опыт нужен. Дело наживное.
Спустя 11 минут, 34 секунды (5.05.2010 - 12:43) Spamol написал(а):
Надеюсь, просто в некоторые моменты хочеться бросить, потому что смотришь скрипт, прослеживаешь его работу и охреневаешь как это вообще можно придумать, особенно это было с этой гостевой, сначала все понятно и логично, потом начиная с Шага 7 Архивирование файлов началась жесть)))
Кстати у меня поэтому поводу 3 раза изучения пхп заканчивались ничем, но вот в 4 раз попытаюсь довести все до конца!
Кстати у меня поэтому поводу 3 раза изучения пхп заканчивались ничем, но вот в 4 раз попытаюсь довести все до конца!
Спустя 21 день, 8 часов, 33 минуты, 17 секунд (26.05.2010 - 21:16) admrp написал(а):
Здравствуйте! Пишу в этой теме дабы не плодить их большое кол-во.
Проблема скорее относится к настройкам веб-сервера, думаю так.
Занимаюсь разбором гостевой книги, под "виндой" всё хорошо, но вот в "опенсьюз" возникла проблема с отработкой скрипта. Значит так: готовый скрипт, писал ли его я, либо копировал уже для теста Ваш
- при первоначальном его открытии отлично отображается внешний вид, отображается сообщение если не нажата кнопка, но если нажать просто кнопку без ввода текста либо набрать в оба поля текст, то не происходит ровным счётом ничего, обновляется страница и всё, повторюсь, что под "виндой" - работает, а на "лине" даже копипаст Вашего варианта не даёт результата.
Пожалуйста, помогите разобраться!
p.s.: в логах ошибок нет ничего. ну и не создаётся сам текстовый файл, думаю, что что-то с правами, но не понимаю почему ошибки не отображаются, тем более, что должы выводится все.
Проблема скорее относится к настройкам веб-сервера, думаю так.
Занимаюсь разбором гостевой книги, под "виндой" всё хорошо, но вот в "опенсьюз" возникла проблема с отработкой скрипта. Значит так: готовый скрипт, писал ли его я, либо копировал уже для теста Ваш
<?php
header("Content-Type: text/html; charset = UTF-8");
error_reporting(E_ALL);
//////////////////////////////////////////////////////////////////////////////////////////
//VARIABLES
//////////////////////////////////////////////////////////////////////////////////////////
$text1 = !empty($_POST['text1']) ? $_POST['text1'] : null;
$text2 = !empty($_POST['text2']) ? $_POST['text2'] : null;
$info = array();
///////////////////////////////////////////////////////////////////////////////////////////
//SCRIPTS
///////////////////////////////////////////////////////////////////////////////////////////
if(!empty($_POST['ok']))
{
if(!$text1)
$info[] = 'Вы не заполнили все поля!';
if(!$text2)
$info[] = 'Вы не написали комментарий!';
if(count($info) == 0);
{
file_put_contents('text.txt', $text2, FILE_APPEND);
header('location: http://'. $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']);
exit();
}
}
else
$info[] = 'Пишите, не стесняйтесь!';
?>
<form action="" method="POST">
Имя:<br />
<input name="text1" type="text" value="<?php htmlspecialchars($text1) ?>"><br />
Ващ комментарий:<br />
<textarea name="text2" cols="40" rows="10"><?php htmlspecialchars($text2) ?></textarea><br />
<input name="ok" type="submit"><br />
</form>
<?php
echo implode('<br />', $info) . '<br />';
if(file_exists('text.txt'))
echo nl2br(htmlspecialchars(file_get_contents('text.txt')));
- при первоначальном его открытии отлично отображается внешний вид, отображается сообщение если не нажата кнопка, но если нажать просто кнопку без ввода текста либо набрать в оба поля текст, то не происходит ровным счётом ничего, обновляется страница и всё, повторюсь, что под "виндой" - работает, а на "лине" даже копипаст Вашего варианта не даёт результата.
Пожалуйста, помогите разобраться!
p.s.: в логах ошибок нет ничего. ну и не создаётся сам текстовый файл, думаю, что что-то с правами, но не понимаю почему ошибки не отображаются, тем более, что должы выводится все.
Спустя 7 минут, 37 секунд (26.05.2010 - 21:24) admrp написал(а):
прошу прощения.., кое что изменилось, сейчас проверю - дополню///
не понимаю - поменял !empty на isset в проверке нажатия кнопки, обновил страницу, сообщения появились в браузере, поменял обратно, пообновлял страничку, сообщения остались и добавляются в файл(файл тоже же появился), но новые сообщения просто добавляются без пробелов к предыдущим(если набрать в поле без переноса строки, если набрать с переносами, то переносыы нормально обрабатываются).
Информационные сообщения кроме как о не нажатии кнопки(которое не исчезает совсем с экрана) не появляются.
не понимаю - поменял !empty на isset в проверке нажатия кнопки, обновил страницу, сообщения появились в браузере, поменял обратно, пообновлял страничку, сообщения остались и добавляются в файл(файл тоже же появился), но новые сообщения просто добавляются без пробелов к предыдущим(если набрать в поле без переноса строки, если набрать с переносами, то переносыы нормально обрабатываются).
Информационные сообщения кроме как о не нажатии кнопки(которое не исчезает совсем с экрана) не появляются.
Спустя 1 час, 5 минут, 51 секунда (26.05.2010 - 22:29) twin написал(а):
Мистика... Дело все в системе... По скрипту даже и посоветовать ничего не могу...
Спустя 9 часов, 46 минут, 43 секунды (27.05.2010 - 08:16) admrp написал(а):
угу, мистика.
версия php 5.2.3, apache 2 какой-то, не помню сейчас точно.
вот и я сижу вчера вечером и ума не дам в чём дело-то.
версия php 5.2.3, apache 2 какой-то, не помню сейчас точно.
вот и я сижу вчера вечером и ума не дам в чём дело-то.
Спустя 7 дней, 4 часа, 41 минута, 53 секунды (4.06.2010 - 12:58) admrp написал(а):
Вопрос, пишу код самостоятельно - без копипаста, под ос windows, после полного написания пробую открыть его в браузере, но он мне предлагает его сохранить... ??? в то время как, например другой код php работает на этом же "сервере"
привожу код:
я что-то упускаю ?
привожу код:
<?php
header("Content-Type: text/html: charset = utf-8");
error_reporting(E_ALL);
///////////////////////////////
//FUNCTION
///////////////////////////////
function dScan($dir)
{
static $files;
if(empty($files))
{
$files = scandir($dir);
$files = array_diff($files, array('.', '..'));
}
$files = count($files) ? $files : array('1');
return $files;
}
///////////////////////////////
//VARIAbLES
///////////////////////////////
$text1 = !empty($_POST['text1']) ? $_POST['text1'] : null;
$text2 = !empty($_POST['text2']) ? $_POST['text2'] : null;
$info = array();
$posts = array();
///////////////////////////////
//SCRIPTS
///////////////////////////////
if(!empty($_POST['ok']))
{
if(!$text1)
$info[] = 'Вы не указали имя!';
if(!$text2)
$info[] = 'Вы не написали комментарий!';
if(count($info) == 0)
{
$file = max(dScan('data'));
if(file_exists('data/'.$file))
{
$posts = unserialize(file_get_contents('data/'.$file));
$keys = array_keys($posts);
$id = max($keys) + 1;
$num = count($posts);
}
else
$num = $id = 1;
if($num > 5)
{
++$file;
unset($posts);
}
$posts[$id]['date'] = date('d/m/Y, H:i:s');
$posts[$id]['name'] = $text1;
$posts[$id]['mess'] = $text2;
file_put_contents('data/'.$file, serialize($posts));
header("location: http://". $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']);
exit();
}
}
else
$info[] = 'Пишите не стесняйтесь!';
?>
<form action="" method="POST">
Имя:<br />
<input name="text1" type="text" value="<?php echo htmlspecialchars($text1) ?>"/><br />
Комментарий:<br />
<textarea name="text2" cols="40" rows="10"><?php echo htmlspecialchars($text2) ?></textarea><br />
<input name="ok" type="submit" />
</form>
<?php
echo implode('<br />', $info) . '<br />';
$file = max(dScan('data'));
if(file_exists('data/'.$file))
{
$posts = unserialize(file_get_contents('data/'.$file));
foreach($posts as $id => $post)
{
$date = $post['date'];
$name = htmlspecialchars($post['name']);
$mess = nl2br(htmlspecialchars($post['mess']));
?>
<div style="border:1px solid;
width:70%;
min-height:100px;
margin:5px;
padding:5px;
background-color:#cccfff;">
<?php echo $date ?> | <b><?php echo $name ?></b>
<hr width="100%">
<?php echo $mess ?>
</div>
<?php
}
}
я что-то упускаю ?
Спустя 11 минут, 30 секунд (4.06.2010 - 13:10) twin написал(а):
header("Content-Type: text/html; charset=utf-8");
header("Content-Type: text/html: charset=utf-8");
header("Content-Type: text/html: charset=utf-8");
Спустя 2 минуты, 17 секунд (4.06.2010 - 13:12) admrp написал(а):
))благодарю twin
Спустя 1 день, 1 час, 36 минут, 58 секунд (5.06.2010 - 14:49) ruzarh написал(а):
Вот вопрос по "гостевой книге SQL"
Вот происходит вывод данных как по учебнику(http://irbis-team.com/15/6/1)
<!-- ./skins/tpl/guest/rows.tpl begin -->
<div style="border:1px solid; width:70%; background-color:#66FFFF; min-height:100px; margin:5px; margin-left:10%; padding:5px">
<?php echo $tpl_date; ?> / <?php echo $tpl_name; ?>
<hr width="30%" align="left" />
<?php echo $tpl_text; ?>
</div>
<!-- ./skins/tpl/guest/rows.tpl end -->
А вот формирование запроса
$res = mysqlQuery("SELECT * FROM `". IRB_DBPREFIX ."guest`
ORDER BY `id` ASC");
$rows = '';
if(mysql_num_rows($res) > 0)
{
$cont = getTpl('guest/rows');
while($row = htmlChars(mysql_fetch_assoc($res)))
{
$row['date'] = formatDate($row['date'], false);
$row['text'] = nl2br($row['text']);
$rows .= parseTpl($cont, $row);
}
}
Вопрос откуда берутся переменные
$tpl_date; $tpl_name и $tpl_text;
Вот происходит вывод данных как по учебнику(http://irbis-team.com/15/6/1)
<!-- ./skins/tpl/guest/rows.tpl begin -->
<div style="border:1px solid; width:70%; background-color:#66FFFF; min-height:100px; margin:5px; margin-left:10%; padding:5px">
<?php echo $tpl_date; ?> / <?php echo $tpl_name; ?>
<hr width="30%" align="left" />
<?php echo $tpl_text; ?>
</div>
<!-- ./skins/tpl/guest/rows.tpl end -->
А вот формирование запроса
$res = mysqlQuery("SELECT * FROM `". IRB_DBPREFIX ."guest`
ORDER BY `id` ASC");
$rows = '';
if(mysql_num_rows($res) > 0)
{
$cont = getTpl('guest/rows');
while($row = htmlChars(mysql_fetch_assoc($res)))
{
$row['date'] = formatDate($row['date'], false);
$row['text'] = nl2br($row['text']);
$rows .= parseTpl($cont, $row);
}
}
Вопрос откуда берутся переменные
$tpl_date; $tpl_name и $tpl_text;
Спустя 8 часов, 52 секунды (5.06.2010 - 22:50) twin написал(а):
Ну нужно было все читать...
А вообще, отсюда.
А вообще, отсюда.
Спустя 9 часов, 59 минут, 5 секунд (6.06.2010 - 08:49) ruzarh написал(а):
Спасибо большое twin просто я понимаю все с задержками, когда вычитываю больше приходит и понимание прошлого материала! Я еще Катерова и Костерова "PHP 5 в подленике" почитываю! А где можно про настройки APACHE почитать, про необходимые, рекомендуемые и безопасные настройки(Хорошо бы на Русском)? Спасибо большое еще раз!
Спустя 8 часов, 50 минут, 33 секунды (6.06.2010 - 17:39) ruzarh написал(а):
Предложение по 'гостевой книге SQL'
Функцию предлагаю сделать вот так!
А в show.tpl
Функцию предлагаю сделать вот так!
function bbTags($text)
{
$bb = array(
'',
'',
'',
'',
'',
'',
'',
'',
'[]',
'[]',
'[]',
'[]'
);
$tag = array(
'<b>',
'</b>',
'<i>',
'</i>',
'<s>',
'</s>',
'<u>',
'</u>',
'<img src="' . IRB_HOST . 'skins/images/smiles/1.gif" />',
'<img src="' . IRB_HOST . 'skins/images/smiles/2.gif" />',
'<img src="' . IRB_HOST . 'skins/images/smiles/3.gif" />',
'<img src="' . IRB_HOST . 'skins/images/smiles/4.gif" />'
);
return str_ireplace($bb, $tag, $text);
}
А в show.tpl
<form action="" name="post" method="post">
Имя:<br />
<input name="form[value1]" type="text" value="<?php echo $POST['value1'];?>"/><br />
<img style="cursor:pointer" src="<?php echo IRB_HOST ?>skins/images/smiles/bold.gif" alt="Жирный" onclick="tag('','')">
<img style="cursor:pointer" src="<?php echo IRB_HOST ?>skins/images/smiles/italics.gif" alt="Курсив" onclick="tag('','')">
<img style="cursor:pointer" src="<?php echo IRB_HOST ?>skins/images/smiles/underline.gif" alt="Подчеркнутый" onclick="tag('','')">
<img style="cursor:pointer" src="<?php echo IRB_HOST ?>skins/images/smiles/strikethrough.gif" alt="Зачеркнутый" onclick="tag('','')">
<img style="cursor:pointer" src="<?php echo IRB_HOST ?>skins/images/smiles/1.gif" onclick="tag('[]','')">
<img style="cursor:pointer" src="<?php echo IRB_HOST ?>skins/images/smiles/2.gif" onclick="tag('[]','')">
<img style="cursor:pointer" src="<?php echo IRB_HOST ?>skins/images/smiles/3.gif" onclick="tag('[]','')">
<img style="cursor:pointer" src="<?php echo IRB_HOST ?>skins/images/smiles/4.gif" onclick="tag('[]','')"><br />
Спустя 14 часов, 14 минут, 17 секунд (7.06.2010 - 07:54) ruzarh написал(а):
Понял свою ошибку! Пропадает основной принцип разделения!