76

Re: Подскажите с РНР, учу по книжке...

Здравствуйте, уважаемый Hanut!
С Новым Годом!.. Желаю, чтобы политики наших стран меньше тупили в международных отношениях!..)))
У меня возникли новые вопросы:
1. Очень часто сталкиваюсь с информацией, что скрипты, выкладываемые на хостинг нужо кодировать, очень ли необходима данная процедура?.. И как потом внести изменения?..
2. Не могу въехать, как сделать правильно навигацию, как на Яндексе, например, чтобы были кнопки "начало", "начало+-5 (в случае перехода)", "номера страниц", "конец+-5", "конец"... Фактически это получается, как вывод по несколько (например, статей), но не получается сделать такие ссылки для строки с буквочками i, которыми обозначаются номера страниц...(((
Спасибо...

77

Re: Подскажите с РНР, учу по книжке...

Freeware
1. Кодировать PHP скрипты не надо. Кодировка может понадобиться только для JavaScript, если их размер слишком большой; тогда можно использовать данный сервис: http://code.google.com/p/closure-compiler/

2. Посмотрите здесь код листалки, возможно сможете его использовать. http://forum.php-myadmin.ru/viewtopic.p … 8971#p8971
Про "строи с буквочками i" не смог понять.

Спасибо, и вас с Новым Годом! smile

78

Re: Подскажите с РНР, учу по книжке...

Снова здравствуйте,
Вопрос по синтаксису: При отключении глобальных переменных не могу записать такой вид: {$user[$login]}, получается переменная от переменной, как правильно нужно ставить $_GET в такой ситуации?.. ($login проверяет пару логин-пароль и Юзер должен писаться от совпадения обеих значений)...
Спасибо...

79

Re: Подскажите с РНР, учу по книжке...

Freeware
Не совсем понял, но выше в коде можно скопировать значение в переменную. Например:
$login = $_GET['login'];

80

Re: Подскажите с РНР, учу по книжке...

Здравствуйте, Hanut...
А если у меня стоит вот так $login=login_check($_COOKIE['login'],$_COOKIE['password']);?..

81

Re: Подскажите с РНР, учу по книжке...

А, всё, разобрался, у меня была ошибка: приписал лишний $_GET переменной, которая только в этой функции работает... Когда убрал, всё заработало...

Вопрос: Поставил скрипт "счётчик посетителей", библиотека ГД2 включена, но с первого раза картинка почему-то не открывается, а если дальше листать, или обновлять -- открывается, в чём прикол?..

Спасибо...)))

82

Re: Подскажите с РНР, учу по книжке...

Здравствуйте, уважаемый Hanut,
Вопрос: Как можно сделать возврат на главную страницу в случае, если выходил из под админа, и была открыта форма добавления новости, а нужно, чтобы из пользователя был HTTP_REFERER, а из админа выходило на главную (потому что, если выходит из под админа, то оставляет пользователю открытую форму добавления!!!)?..

function logout(){
    //global $out;
    setcookie('login');
    setcookie('password');
   
    //for($_GET['$user[status]'] = 2){
    //$user['status'] = 0;
    //$rr='../engine77';   
    //}
   
    $rr=$_SERVER['HTTP_REFERER'];
   
    $mess='Все куки почищены.<br>Приходите еще!';
    $_GET['$out[center]'].=print_table('Сообщение',$mess,$rr,2);
return;   
}

Как нужно указать скрипту, что выходя из под админа с одним статусом, он сразу принимал статус гостя и загружал обычную страницу?..

Спасибо...

83

Re: Подскажите с РНР, учу по книжке...

Freeware сказал:

Поставил скрипт "счётчик посетителей", библиотека ГД2 включена, но с первого раза картинка почему-то не открывается, а если дальше листать, или обновлять -- открывается, в чём прикол?

Смотрите ошибки в журнале Apache. Попробуйте выделить код формирования картинки и проверить его работу.
__________

Если вы хотите переходить на страницу из $_SERVER['HTTP_REFERER'], то это плохая идея, так как данное значение может быть пустым (отключается в браузере). Лучше перенаправлять на заданную страницу.

header("Location: http://www.***.com/");

Данная строка должна быть перед функциями формирования страницы: print, echo, header.

84

Re: Подскажите с РНР, учу по книжке...

Спасибо, за предыдущие ответы, занимаюсь...)))
Уважаемый, Hanut, можете ткнуть меня носом, куда смотреть?..
Почему при отключении глобальных переменных и изменении кода, например, в такой вид:

if($_GET['$user[status]']==2){
        $_GET['$out[listnews]'].="<a href=\"?action=delete&id=$id\">[удалить]</a> ";
        $_GET['$out[listnews]'].="<a href=\"?action=edit&id=$id\">[править]</a>";
    }

код перестал работать?.. Когда стояло global $user и т.д., и просто -- $user['status'] код работал нормально... Где у меня ошибка?.. Статус перестал проверятся, соответственно такие условия, где есть статус, перестали работать...

85

Re: Подскажите с РНР, учу по книжке...

Исправьте кавычки, сейчас они стоят не там где надо.

$_GET[$user['status']]

86

Re: Подскажите с РНР, учу по книжке...

Если я меняю кавычки, то сразу выводит ошибки:

Notice: Undefined variable: user in E:\usr\apache\localhost\www\engine77\elib.php on line 35

Notice: Undefined index: in E:\usr\apache\localhost\www\engine77\elib.php on line 35

87

Re: Подскажите с РНР, учу по книжке...

Freeware
Значит нет такой переменной. Проверьте что выводит $user['status'].

88 (изменено: Hanut, 2010-01-05 14:15:14)

Re: Подскажите с РНР, учу по книжке...

Вопрос по навигации...
Используя указанный вами скрипт, у меня получилось следующее (работает):
[mono]<?php
function add_authorszit(){   
    $query="SELECT * FROM `zitata` GROUP by `authors`";   
    $result_count=mysql_query($query,$_GET['$MV']); // $_GET['$MV'] - не имеет смысла.
   
        // Нельзя писать $_GET['$out[navy]']. Если надо, чтобы функция вернула строку, то следует завести обычную переменную и затем вернуть ее значение через return.
    $_GET['$out[navy]'].='<a href="http://localhost/engine77/">Главная</a> &nbsp<img src=images/back2_24_13.png> &nbsp';
    $_GET['$out[navy]'].='<a href="index.php?action=add_news">Темы</a><br><br><br><br>';
    $items_per_page = 10;   
    $aCount = mysql_affected_rows(); // Ошибка. Здесь ничего не будет в переменной. Используйте для подсчета COUNT(*) в запросе.
    $iPages = ceil($aCount/$items_per_page);   
    if(isset($_GET['page'])){
        $_GET['page']=intval($_GET['page']);
        $page=$_GET['page'];
    }
    else{
        $page=0;
    }   
    $iStart = $page*$items_per_page;   
    $query=mysql_query("SELECT * FROM `zitata` GROUP by `authors` limit ".$iStart.",".$items_per_page);   
    $_GET['$out[navy]'].="<fieldset>";   
    while($row = mysql_fetch_array($query)) {////Вместо while поставил if, чтобы вывести сообщение, если база не содержит данных в этой категории!!!           
            $aCount++;
            $_GET['$out[navy]'].="<a href='index.php?action=add_zit&id_authors={$row['id_authors']}'>";
            $_GET['$out[navy]'].=$row['authors'].'</a><br>';
            }
    $_GET['$out[navy]'].="<br><br>Выберите автора";               
    $_GET['$out[navy]'].= "<br><br>Страницы:<br>";
    $_GET['$out[navy]'].="<div style='border:#1111ff 1px solid; text-align:center'>";   
    for ($i = 0; $i <= $iPages; $i++) {
        $ii=$i+1;       
        if ($page > 4 && $i == $page - 4) {
            $_GET['$out[navy]'].= '<a href="?action=add_authorszit&authors='.$row['id_authors'].'&page=' . $i . '">...</a>' . "\n";
            continue;
        }
        if ($i > $page + 3) {
            $_GET['$out[navy]'].= '<a href="?action=add_authorszit&authors='.$row['id_authors'].'&page=' . $i . '">...</a>' . "\n";
            break;
        }
        if ($i == $page) {
            $_GET['$out[navy]'].= ' <span style="font-weight: bold;"> '. $ii .' </span> ' . "\n";
        } else {
            $_GET['$out[navy]'].= '<a href="?action=add_authorszit&authors='.$row['id_authors'].'&page=' . $i . '">' . $ii . '</a>' . "\n";
        }
       }
      
    $_GET['$out[navy]'].= '</div>' . "\n";   
    $_GET['$out[navy]'].="</div>";
    $_GET['$out[navy]'].="</fieldset>";       
return;   
}
?>[/mono]

Вопрос, а можно ли скрыть вывод цифр, с начала и конца, если условие вывода "..." выполнено?.. (То есть, уже ненужных ссылок на страницы)

Сообщение добавлено Tue Jan  5 12:21:04 2010
Да, и какой кнопкой, делать на форуме окно с текстом?..)))

89

Re: Подскажите с РНР, учу по книжке...

Не так задал вопрос...
В общем, не получается вывести конкретное число ссылок на страницы... Выводятся ВСЕ ссылки, с двумя заменёнными (по условию от исходной страницы "...")... А не пять, например...

90

Re: Подскажите с РНР, учу по книжке...

Всё получилось!!! Можете не отвечать по навигации... В процессе неправильно поменял переменную iStart...((( Сейчас изменил, всё работает!!!
Спасибо за терпение...)))

Сообщение добавлено Tue Jan  5 12:59:52 2010
А вот ни фига, рано обрадовался... Теперь при красивой навигации неправильно выводятся данные из базы...(((

91

Re: Подскажите с РНР, учу по книжке...

Freeware сказал:

Да, и какой кнопкой, делать на форуме окно с текстом?

Не понял вопрос.

92

Re: Подскажите с РНР, учу по книжке...

Freeware сказал:

Нельзя писать $_GET['$out[navy]']. Если надо, чтобы функция вернула строку, то следует завести обычную переменную и затем вернуть ее значение через return.

У меня просто вот такой разборщик шаблона записанный в файле index, а так как глобальные отключил, то ничего лучше не придумал (по книжкам учусь, да и вы помогоаете...))):

// Разборщик шаблона
$ar=array(
'<!-- navy -->' => $_GET['$out[navy]'],
);

Можете пояснить, как лучше сделать?..

И второй вопрос, свой код убрал, разобрался с вашим кодом... Только один косяк получился...
Не работает запрос, если группирую...(((

$result_count=mysql_query('SELECT COUNT(*) AS `count` FROM `zitata` GROUP by `authors`', $_GET['$MV']);

У меня авторы повторяются, и не нужно считать всех!!! А если не группировать, то скрипт выводит навигацию и на пустые страницы, даже если сам группирует, короче по всем наименованиям... Если группирую, то вообще не выводится навигация... Что я делаю не так?.. Или может есть какой-то другой тактический ход?..

И напоследок вспомнил, так что же мне сделать с такими красивыми, например, $_GET['$user[status]'], кстати, пробовал менять переставлять кавычки на внутреннюю, тогда ошибки показывает... Притом, что их много...

Спасибо...

93

Re: Подскажите с РНР, учу по книжке...

С этим разобрался...
$result_count=mysql_query('SELECT COUNT(*) AS `count` FROM `zitata` GROUP by `authors`', $_GET['$MV']);
привык группировать и забыл про DISTINCT...(((
Получилось:
$result_count=mysql_query('SELECT COUNT(DISTINCT `authors`) AS `count` FROM `zitata`', $_GET['$MV']);
Премного благодарен, теперь работает почти идеально...)))

94

Re: Подскажите с РНР, учу по книжке...

Freeware сказал:

$ar=array(
'<!-- navy -->' => $_GET['$out[navy]'],
);

Нельзя так делать: $_GET['$out[navy]']. Получается элемент GET массива с ключом в виде строки $out[navy].

95

Re: Подскажите с РНР, учу по книжке...

А как тогда сделать, если я отключил глобальные переменные, а эти данные находятся в файле index, а используются в некоторых других файлах и других функциях?.. Каждый раз объявлять переменную $out?.. Так это столько придётся прописывать...

96

Re: Подскажите с РНР, учу по книжке...

Freeware
Переменные можно объявлять в любом месте и они будут доступны во всех подключаемых файлах. Если нужен доступ к переменной из функции, то надо в функции объявить переменную глобальной, пример:
function test() {
  global $var;
}

Так же можно использовать константы (единожды объявляемые и содержащие определенное значение), которые не надо объявлять в функциях глобальными, так как они доступны везде.
define("CONSTANT", "Hello world."); // Имя константы задается в первом параметре, во втором - значение.
echo CONSTANT; // Выводит "Hello world."

97

Re: Подскажите с РНР, учу по книжке...

Hanut сказал:

2. Посмотрите здесь код листалки, возможно сможете его использовать. http://forum.php-myadmin.ru/viewtopic.p … 8971#p8971
Про "строи с буквочками i" не смог понять.

Здравствуйте, уважаемы Hanut...
Использовал, указанный код, отлично работает на простых страницах...
Но столкнулся с первой трудностью, если данные выводятся в шаблоне, например такого вида:

<div class="inset">
<b class="b1"></b><b class="b2"></b><b class="b3"></b><b class="b4"></b>
<div class="boxcontent">
<h1><p align="center"><!-- blocktitle -->
</h1>
<hr width="7%" color="8b0e1a">
<hr width="95%" color="8b0e1a">

<!-- menucent -->
<!-- listnews -->
<!-- bookreg -->
<!-- footer -->

<hr width="95%" color="8b0e1a">
<hr width="7%" color="8b0e1a">
</p>
</div>
<b class="b4b"></b><b class="b3b"></b><b class="b2b"></b><b class="b1b"></b>
</div>

Переделал (код навигации) под вывод отрывков текста, счётчик изменился при этом, но всё работает, единственное, что с шаблоном не могу заменить page=0 на первую, как получалось на обычных страницах...((( И поэтому либо могу вывести так: 0 1 2 3 ... , либо с 1 2 3 ..., но 1 соответствует ВТОРОЙ странице текста...((( Если поняли, что я хотел сказать, может направите меня в поиске ошибки?..
Спасибо...

Сообщение добавлено Fri Jan  8 09:50:07 2010
А как же, если в целях безопасности глобальные будут отключены на хостинге?.. Я поэтому сразу и переделал без глобальных?.. Какова вообще опасность использования глобальных переменных?.. И какова безопасность использования их внутри функций?..

98

Re: Подскажите с РНР, учу по книжке...

Freeware
Наверное надо просто вычесть единицу.
$page=$_GET['page'] - 1;

Директива register_globals отключает перевод переменных окружения в обычные переменные. Если register_globals включен, то значение $_GET['page'] можно получить в коде под переменной $page (переменная создается автоматически). Если выключен, то только $_GET['page'] будет содержать значение.

Данные получаемые от пользователя (GET, POST, COOKIE) всегда являются потенциально опасными и за ними надо следить.

Директива register_globals не рекомендована к использованию в PHP 5. В PHP 6 ее уже нет, поэтому для совместимости кода использовать данную директиву нельзя.

99

Re: Подскажите с РНР, учу по книжке...

Здравствуйте, уважаемый Hanut...
с

Hanut сказал:

Наверное надо просто вычесть единицу.
$page=$_GET['page'] - 1;

ничего не получилось, попробовал подстановкой $ii=$i+1... Заработало...
Вопрос: Как можно красиво нарезать текст?..
У меня большие отрывки выставил по 3000 знаков, и обрываются где хотят, пробовал stripos и до точки, и до пробела, -- не получается, как нужно составить условие, чтобы отрывки заканчивались на пробеле, и начинались после него (например, или на точке и начинались с нового предложения)?..
Спасибо...

100

Re: Подскажите с РНР, учу по книжке...

Freeware

// Сперва обрезаем до 3000 знаков.
$substr = substr($str, 0, 3000);

// Затем, с помощью регулярного выражения, обрезаем конец до ближайшего слова.
$str_cut = preg_replace('/^(.*)([^\s\.,]+)([\s\.,]+)[^\s\.,]*$/s', '$1$2...', $substr);

Если надо, чтобы текст продолжался после троеточия, то сделать можно примерно также, но в обратную сторону.