если заполнить тут же форму и нажать кнопку, то вот такие ошибки:
Warning: array_keys() [function.array-keys]: The first argument should be an array in Z:\home\fredrsf.ru\www\gb\index.php on line 20
Warning: Wrong parameter count for max() in Z:\home\fredrsf.ru\www\gb\index.php on line 21
Warning: Cannot modify header information - headers already sent by (output started at Z:\home\fredrsf.ru\www\gb\index.php:20) in Z:\home\fredrsf.ru\www\gb\index.php on line 31
После если обновить ошибок нет, запись есть и далее всё работает на ура. В чем причина??? Мой код (проверял по уроку):
<?php
header ("Content-Type: text/html; charset=utf-8");
error_reporting (E_ALL);
$text1 = !empty($_POST['text1']) ? $_POST['text1'] : null;
$text2 = !empty($_POST['text2']) ? $_POST['text2'] : null;
$info = array();
if (!empty($_POST['ok']))
{
if (!$text1)
$info[] = 'Введите логин';
if (!$text2)
$info[] = 'Введите текст сообщения';
if (count($info) == 0)
{
if (file_exists('text.txt'))
{
$posts = unserialize(file_get_contents('text.txt'));
$keys = array_keys($posts);
$id = max($keys) + 1;
}
else
{
$id = 1;
}
$posts[$id]['date'] = date('d-m-Y');
$posts[$id]['name'] = $text1;
$posts[$id]['mess'] = $text2;
file_put_contents ('text.txt', serialize($posts));
header('location: http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']);
exit();
}
}
else
$info[] = 'Заполните форму';
?>
<form action="?" method="post">
ЛОгин:<br>
<input type="text" name="text1" value="<?php echo htmlspecialchars($text1); ?>"><br>
Текст:<br>
<textarea name="text2" cols="40" rows="10"><?php echo htmlspecialchars($text2); ?></textarea><br>
<input type="submit" name="ok">
</form>
<?php
echo implode('<br>', $info).'<br>';
if (file_exists('text.txt'))
{
$array = unserialize(file_get_contents('text.txt'));
foreach ($array as $id => $post)
{
$date = $post['date'];
$name = htmlspecialchars($post['name']);
$mess = nl2br(htmlspecialchars($post['mess']));
?>
<div style="border: 1px solid; width:40%; background-color: #ff6600; min-height:100px; margin:5px; padding:5px;">
<?php echo $date;?> / <strong><?php echo $name;?></strong>
<hr width="60%" align="left" noshade>
<?php echo $mess;?>
</div>
<?php
}
}
Подставлял код из урока тоже самое... Пожалуйста помогите разобраться, хочется двигаться далее.
Спустя 22 минуты, 27 секунд (20.09.2010 - 10:48) Nord написал(а):
Вам явно не хватает словарика, либо ссылки на http://php.net
Цитата |
Warning: Invalid argument supplied for foreach() in Z:\home\fredrsf.ru\www\gb\index.php on line 50 |
Переводится как:
Цитата |
Предупреждение: неправильный аргумент подсунут в foreach на строке 50 того самого файла |
Значит,
$array = unserialize(file_get_contents('text.txt'));
Возвращает не массив. И это логично при пустом файле т.к. unserialize("") != array()
Смотрим дальше, этот код выполняется при условии file_exists('text.txt').
Значит, подразумевается, что при отсутствии записей в гостевой книге, файла text.txt не должно быть вообще. Удалите его
Ну, и в коде повыше совсем неочевидно, что $posts равен array() при отсутсвии файла text.txt
Спустя 3 минуты, 25 секунд (20.09.2010 - 10:52) twin написал(а):
Не нужно делать файл text.txt руками. Скрипт при первом запуске создаст его сам. И тогда не будет ошибок.
Спустя 4 часа, 26 минут, 43 секунды (20.09.2010 - 15:18) fredrsf написал(а):
Спасибо большое ребят! Я просто думал, что может что-то не так(
Дошел до конца, все хорошо объясняется, но у меня еще есть вопрос... Не понял вот этот код:
Почему в цикле for префиксное увеличение??? И можно объяснить вот это $posts[$delete[$i]]['name'] = '';
$posts[$delete[$i]]['mess'] = '[b]Удалено модератором';[/b]
Что это за массивы?? это матрицы или как, чтот не пойму? Можно схемку чтоли, как это выглядит внутри. И почему в форме вот тут <input name="delete[]" имя с квадратными скобками???
Дошел до конца, все хорошо объясняется, но у меня еще есть вопрос... Не понял вот этот код:
if (count($delete) > 0)
{
$posts = unserialize(file_get_contents('data/'.$page));
for ($i = 0; $i < count($delete); ++$i)
{
$posts[$delete[$i]]['name'] = '';
$posts[$delete[$i]]['mess'] = 'Удалено модератором';
}
Почему в цикле for префиксное увеличение??? И можно объяснить вот это $posts[$delete[$i]]['name'] = '';
$posts[$delete[$i]]['mess'] = '[b]Удалено модератором';[/b]
Что это за массивы?? это матрицы или как, чтот не пойму? Можно схемку чтоли, как это выглядит внутри. И почему в форме вот тут <input name="delete[]" имя с квадратными скобками???
Спустя 53 минуты, 25 секунд (20.09.2010 - 16:12) twin написал(а):
Видно правда это сложно, многие спотыкаются. Я попозже распишу подробнее прямо там, чтоб не повторяться.
Спустя 15 часов, 52 минуты, 1 секунда (21.09.2010 - 08:04) fredrsf написал(а):
Отлично, спасибо, буду ждать

Спустя 1 час, 10 минут, 33 секунды (21.09.2010 - 09:14) twin написал(а):
Ну посмотри сейчас, может понятнее стало...
Спустя 1 час, 23 минуты, 26 секунд (21.09.2010 - 10:38) fredrsf написал(а):
Супер, спасибо! Чтобы не плодить тем буду вопросы задавать тут, но постараюсь разбираться сам.
Спустя 8 дней, 5 часов, 11 минут, 54 секунды (29.09.2010 - 15:50) fredrsf написал(а):
Немного не по теме курсов вопрос. Просто дошел до ядра полной версии. Что-то все дремучей становится. Поэтому еще параллельно использую доп лит-ру. Вот наткнулся на пример один, а что-то понять мозга не хватает. Может кто-нибудь объяснить логику именно в тех местах, где тернарный оператор. Функция считает возраст человека с точностью до дня:
<?php
function Full_age($b_day, $b_month, $b_year)
{
$y = date("Y");
$m = intval(date("m"));
$d = intval(date("d"));
$b_month = intval($b_month);
$b_day = intval($b_day);
$b_year = intval($b_year);
$day = ($b_day > $d ? 30 - $b_day + $d : $d - $b_day);
$tmpMonth = ($b_day > $d ? -1 : 0);
$month = ($b_month > $m + $tmpMonth ? 12 - $b_month +
$tmpMonth + $m : $m+$tmpMonth - $b_month);
$tmpYear = ($b_month > $m + $tmpMonth ? -1 : 0);
if ($b_year > $y + $tmpYear)
{
$year = 0; $month = 0; $day = 0;
}
else
{
$year = $y + $tmpYear - $b_year;
}
return array ($day,$month,$year);
}
$age = Full_age("29","06","1986");
echo "Вам $age[2] лет, $age[1] месяцев и $age[0] дней";
Спустя 19 минут, 32 секунды (29.09.2010 - 16:09) twin написал(а):
Тернарная операция вообще то... Не оператор.
У меня тоже как попало написано, обратил внимание.
Надо поправить.)
У меня тоже как попало написано, обратил внимание.
Надо поправить.)
Спустя 15 часов, 58 минут, 39 секунд (30.09.2010 - 08:08) fredrsf написал(а):
Сама операция понятна, но вот логику не пойму. Почему -30, почему то 0 то -1. Откуда это?))) В общем объясните плиз эту формулу...
Спустя 13 часов, 16 минут, 8 секунд (30.09.2010 - 21:24) eXaM написал(а):
У меня тоже вопрос по уроку про гостевую книгу, но, правда, проблем никаких не возникло, а дело в том, что я не понимаю, зачем использовать функцию empty(), когда можно просто проверить переменную по правилу лжи. Я имею в виду замену
на
В чем недостаток такого подхода? Дело в том, что перед тем, как начать изучать PHP по книжке, я ходил на курсы JavaScript и там преподаватель постоянно вместо сравнения значения переменной с NULL просто проверял её на, гм, «трушность», а вот когда дело касается PHP, то как авторы моей книжки, так и вы пользуетесь функциями вроде isset() и empty(), причем периодически напоминая о важности незагруженности кода. Ничего не понимаю.
if(!empty($head))
{
echo 'Что-то там есть!';
}
на
if($head)
{
echo 'Что-то там есть!';
}
В чем недостаток такого подхода? Дело в том, что перед тем, как начать изучать PHP по книжке, я ходил на курсы JavaScript и там преподаватель постоянно вместо сравнения значения переменной с NULL просто проверял её на, гм, «трушность», а вот когда дело касается PHP, то как авторы моей книжки, так и вы пользуетесь функциями вроде isset() и empty(), причем периодически напоминая о важности незагруженности кода. Ничего не понимаю.
Спустя 54 минуты, 22 секунды (30.09.2010 - 22:18) Nord написал(а):
Отличие
Вообще empty() и isset() обычно используются при обработке форм, ведь точный состав переданных клиентом параметров не известен. Чтобы не радовать пользователя сообщениями об ошибке скрипта, каждый параметр проверяют таким образом на существование/пустоту и, допустим, если параметра нет, то просят его ввести
А если известно точно, что проверяемая переменная определена, то я тоже предпочитаю второй способ.
от
if(!empty($head)){
echo 'Что-то там есть!';
}
заключается в том, что если до условия переменная $head была не определена, то второй вариант выдаст ошибку, что, типо, переменной не существует. А первый проигнорирует это.
if($head){
echo 'Что-то там есть!';
}
Вообще empty() и isset() обычно используются при обработке форм, ведь точный состав переданных клиентом параметров не известен. Чтобы не радовать пользователя сообщениями об ошибке скрипта, каждый параметр проверяют таким образом на существование/пустоту и, допустим, если параметра нет, то просят его ввести
А если известно точно, что проверяемая переменная определена, то я тоже предпочитаю второй способ.
Спустя 14 часов, 50 минут, 7 секунд (1.10.2010 - 13:08) eXaM написал(а):
Спасибо за исчерпывающий ответ! Как только наберу 10 постов, плюсану.
Спустя 10 дней, 3 часа, 13 минут, 14 секунд (11.10.2010 - 16:22) fredrsf написал(а):
Господа, опять ошибка.... Урок Гостевая на SQL. Вставлял Ваш код, аналогично. При переходе по ссылке на гостевую...
Warning: include(./mysql.php) [function.include]: failed to open stream: No such file or directory in Z:\home\fredrsf.ru\www\libs\irb_paginator.php on line 3
Warning: include() [function.include]: Failed opening './mysql.php' for inclusion (include_path='.;/usr/local/php5/PEAR') in Z:\home\fredrsf.ru\www\libs\irb_paginator.php on line 3
Warning: include(./mysql.php) [function.include]: failed to open stream: No such file or directory in Z:\home\fredrsf.ru\www\libs\irb_paginator.php on line 3
Warning: include() [function.include]: Failed opening './mysql.php' for inclusion (include_path='.;/usr/local/php5/PEAR') in Z:\home\fredrsf.ru\www\libs\irb_paginator.php on line 3
Спустя 17 минут, 20 секунд (11.10.2010 - 16:39) fire написал(а):
посмотри правильно ли расположен файл mysql.php ? скрипт не может найти его
Спустя 19 минут, 7 секунд (11.10.2010 - 16:58) fredrsf написал(а):
Цитата (fire @ 11.10.2010 - 13:39) |
посмотри правильно ли расположен файл mysql.php ? скрипт не может найти его |
Посмотрел, все на месте. Прописывал по разному пути... Результата нет(
Спустя 51 минута, 29 секунд (11.10.2010 - 17:50) twin написал(а):
В файле irb_paginator.php убери первую строчку. Она туда случайно затесалась.
Спустя 9 месяцев, 26 дней, 20 часов, 43 минуты, 55 секунд (8.08.2011 - 14:34) Гость_Светлана написал(а):
Подскажите, а как исправить
Warning: Invalid argument supplied for foreach() in /home/s/svetic/public_html/components/com_content/models/frontpage.php on line 104
102 $i = $limitstart;
103 $rows = array();
104 foreach ($Arows as $row)
{
// check to determine if section or category has proper access rights
$rows[$i] = $row;
$i ++;
}
$this->_data = $rows;
}
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/s/svetic/public_html/libraries/joomla/database/database/mysql.php on line 344
342 function getNumRows( $cur=null )
343 {
344 return mysql_num_rows( $cur ? $cur : $this->_cursor );
}
Warning: Invalid argument supplied for foreach() in /home/s/svetic/public_html/components/com_content/models/frontpage.php on line 104
102 $i = $limitstart;
103 $rows = array();
104 foreach ($Arows as $row)
{
// check to determine if section or category has proper access rights
$rows[$i] = $row;
$i ++;
}
$this->_data = $rows;
}
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/s/svetic/public_html/libraries/joomla/database/database/mysql.php on line 344
342 function getNumRows( $cur=null )
343 {
344 return mysql_num_rows( $cur ? $cur : $this->_cursor );
}
Спустя 9 часов, 52 минуты, 13 секунд (9.08.2011 - 00:26) fire написал(а):
насчет 1 ошибки попробуй так
...
foreach ($Arows as $i => $row)
{
...
Спустя 8 дней, 6 часов, 40 минут, 50 секунд (17.08.2011 - 07:07) Гость_Светлана написал(а):
нее, не помогло (((, но все равно спасибо
_____________
Фриланс-студия webthrust. Создание, поддержка и продвижение сайтов.