Anytime you call my name.
Перестраиваю весь свой сайт на php. С базой данных работать научилась, текст вывожу без проблем.
Единственная проблема, с которой столкнулась - постраничная навигация (вывод текста, например статей в определенном порядке и кол-ве на 1 странице).
В инете много где находила и пробовала различные варианты, но обычно либо не происходило вобще ничего, либо с жуткими ошибками.
Есть у кого-то возможность проконсультировать?
Единственная проблема, с которой столкнулась - постраничная навигация (вывод текста, например статей в определенном порядке и кол-ве на 1 странице).
В инете много где находила и пробовала различные варианты, но обычно либо не происходило вобще ничего, либо с жуткими ошибками.
Есть у кого-то возможность проконсультировать?
Есть. Стучи в аську, если хочешь - она у меня в профиле.
ничего нигде не работает)) это кусок кода, который хотя бы должен разделять кол-во статей на кол-во страниц. а именно по 3 статьи на страницу. и вывести на 1ой первые 3. вот он как выводил 7штук из базы, все что есть, так и выводит(
1) либо у вас в базе поле str в первой записи из таблицы options не равно 3;
2) либо после выполнения этого кода вы выводите результат какого-то совсем другого запроса.
Проверьте, какой конкретно запрос идёт в базу.
Я, с позволения, ещё немного прокомментирую. )
@$page = $_GET['page'];
Здесь вы поставили подавление ошибки на операцию присваивания. Но переменной
$page
гарантированно можно присвоить всё, что угодно и это не может вызвать ошибку. )Видимо, имелось в виду
@$_GET['page']
— т.е. подавление ошибки при обращении к элементу'page'
из массива$_GET
. Но вообще это тоже плохой вариант, гораздо лучше написать что-нибудь вроде:$page = isset($_GET['page']) ? (int)$_GET['page'] : 0;
Если ещё не знакомы с условным оператором, то это то же самое, что:
if (isset($_GET['page'])){
$page = (int)$_GET['page'];
} else {
$page = 0;
}
if(empty($page) or $page < 0) $page = 1;
Проще было бы так:
if ($page <= 0) $page = 1;
здесь якобы какой-то текст, которого нет в принципе в помине
потом идет код того, что я уже кидала и далее
вывод текста из базы. вот может он за него и не цепляется вовсе, поэтому и не выводит нифига?
$result = mysql_query ("SELECT id, title, description FROM articles", $db);
Более того, ресурс результата в той же самой переменной $result, что и запрос в конце предыдущего кода. Так что второй вариант. )
$row = mysql_fetch_assoc($result);
do {
//
} while ($row = mysql_fetch_assoc($result));
можно писать так:
while ($row = mysql_fetch_assoc($result)) {
//
}
$result = mysql_query ("SELECT id, title, description FROM articles", $db);
Больше ничего не надо, всё остальное опционально. )
что то явно еще надо))))
Ну или перепишите вызов запроса примерно так:
$result = mysql_query('текст запроса') or die(mysql_error());
Думаю, будет сразу понятно, в чём дело.вот код..
=))
вот если бы я понимала все это =(( я бы сделала, честно честно. я не ленюсь, я не понимаю
Ок, показываю ход мыслей.
На 58-й строке у вас посылается запрос с LIMIT -3, 3, который, естественно, ошибочен. Это означает, что в переменной $start у вас число -3.
Из 55-й строки мы знаем, что $start вычисляется, как $page * $num - $num. Т.к. в переменной $num точно находится число 3 (оно попадает в строку запроса), то решив уравнение x * 3 - 3 = -3 получаем, что x = 0, т.е. в переменной $page находится ноль.
51-я строка гласит, что если $page равен или меньше нуля1, то $page присваивается единица. Почему же она тогда 0?
Потому, что в 52-й строке, если $page больше переменной $total, то ей присваивается значение $total. Из этого очевидно, что $total равняется 0 — а ноль действительно меньше единицы.
44-ю строку на пальцах объяснить сложно, но легко заметить, что при $posts, равном нулю, ((0 - 1) / 3) + 1= -1/3 + 1 = 2/3, т.е. 0,66666666666…
При этом в 45-й строке вы приводите $total к целому функцией intval(), которая округляет целые вниз. И именно поэтому $total становится нулевым.
Из этого следует, что, по крайней мере, при традиционном округлении и округлении вверх $total бы нулевым не стал. Но чтобы решить точно, каким округлением нужно воспользоваться и будет ли это вообще работать — нужно сначала разобраться с логикой 44-й строки. Я лично не могу сходу за минуту это прикинуть и честно написал, что мне лень. ))) Вы же, по крайней мере, можете попробовать поменять 45-ю строку на $total = round($total); или $total = ceil($total); и проверить самостоятельно, как это будет работать.
1 Правда, это записано через жопу, т.к. empty() возвращает true в том случае, если переменная не существует или равна null, false, 0, пустой строке, пустому массиву… В данном случае подобные проверки явно избыточны.
Я уже выше писал, что это проще записать, как if ($page <= 0) $page = 1;
Тут вообще ещё много, что можно написать проще и понятнее. ) Просто конкретно в этом я не вижу ошибки, мешающей работе скрипта. )
результат прежний. вобще ничегошеньки не выводит.
www.charmed4.net/articles.php
причем в коде все так же стоит " or die(mysql_error());" , но страница не выдает никаких ошибок
UPD. удалила в запросе последнем WHERE cat='$cat', и он мне вывел 3 статьи!!!!!!!!! прям праздник праздник!!
а как теперь сделать так, чтобы он дальше выводил?))))) на следующей странице
потому что на www.charmed4.net/articles.php?page=2 выводятся одни и те же статьи
Про условие cat = $cat я просто не знаю, откуда оно у вас там и что выбирало. ) Вероятно, это была разбивка по категориям.
а cat это вобще фигня какая-то была.))
Разумеется, после того, как они посчитаются. ) Можно на 60-й строке, например. ))
<pre><?php var_dump($_GET, $posts, $page, $total, $start, $num) ?></pre>
www.charmed4.net/articles.php
И совет на будущее — когда заработает, смените пароль на MySQL, а то вы его забыли поцензурить в исходниках.
pastebin.com/KTdKymdt
Parse error: syntax error, unexpected '=' in /home2/charmed4/public_html/articles.php on line 93