101

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

Вот у меня что получилось:

while($row = mysql_fetch_array($result1)) {   
    $substr=substr($row['text'], $count_str*$page, $count_str);
    $str_cut = preg_replace('/^(.*)([^\s\.,]+)([\s\.,]+)[^\s\.,]*$/s', '$1$2...', $substr);   
            $_GET['$out'].="<p class=history align=left> <b>".$row['header']." </b><br><br>  ".$str_cut."</p><br> &nbsp <p align=right style=padding-right:20px;><img src=images/dot_lnk9.png> &nbsp <a href=index.php?action=all_texts>Все статьи</a></p>";   

Но теперь обрезаются первые символы следующей страницы...((( (а конечные предыдущей красиво обрезаются...)

102 (изменено: Freeware, 2010-01-13 16:00:47)

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

А можно заменить последний параметр (в данном случае 20) на какой-то стандартный знак любого количества символов до пробела, или точки???

$_GET['$out'].="<p class=history align=left> <b>".$row['header']." </b><br><br>  ".substr($row['text'], $count_str*$page,$count_str + stripos(substr($row['text'],3000,20),' '))."...</p><br> &nbsp <p align=right style=padding-right:20px;><img src=images/dot_lnk9.png> &nbsp <a href=index.php?action=all_texts>Все статьи</a></p>";   

Спасибо...

103

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

Freeware
Покажите как должно быть и как получается.

104

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

Добрый вечер, уважаемый Hanut...

Не пойму, как показать...
Есть большой текст, который выводится на нескольких страницах от начала до конца... В связи с тем, что показывается лишь "n" знаков (если оставить только $substr, то именно такая ситуация) то страницы могут окончится на первой букве слова и т.п...

Для красоты исполнения хочется, чтобы страница заканчивалась, например, на конце одного слова, а начиналась на начале другого слова... Грубо говоря, разбить текст красиво... Не могу въехать, как это делается...

P.S. По-моему слово "Отредактировано" пишется с одной "н"... Хотя точно не помню...

Спасибо...

105

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

Подскажите ещё, а функция wordwrap() в php5 ещё используется?..

106

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

Freeware сказал:

Подскажите ещё, а функция wordwrap() в php5 ещё используется?..

Да, конечно.

<?php

$length = 50; // Резать по 50 символов
$page = 0; // Страница
$str = 'Любая строка'; // Строка данных
$aStr = str_split($str, $length);

switch ($page) {
    case 0:
        $return = (count($aStr) > 1)
            ? rtrim($aStr[0] . preg_replace('/^([^\s\.,]*)(.*)$/s', '$1', $aStr[1]), '.') . '...'
            : $aStr[0];
        break;
    case count($aStr) - 1:
        $return = preg_replace('/^([\.,]*)\s*(.*)$/s', '$2', $aStr[$page]);
        break;
    default :
        $return = rtrim(preg_replace('/^([^\s\.,]*)\s*(.*)$/s', '$2', $aStr[$page])
                      . preg_replace('/^([^\s\.,]*)(.*)$/s', '$1', $aStr[$page + 1]), '.') . '...';
}

echo $return;

107

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

То есть, как я понял, я могу только вписать полный текст в переменную $str?..
Или есть возможность указать mysql запрос на выбор данного текста?..

108

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

Freeware
В переменную $str надо вложить полный текст статьи.

109

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

Здравствуйте, уважаемый Hanut...
Случайно обнаружил вот такую ошибку: Unknown column 'asdfghjkl' in 'field list'...
Здесь на форуме видел подобную тему, но у меня как-то по-другому всё... После попытки регистрации, если пароль больше пяти знаков выводит такое сообщение... У меня длина пароля вообще не была указана, а потом попробовал сделать вот так: if (!eregi("^([_ A-Za-z0-9А]){3,50}", $password) and $password != ""), но ошибку всё равно выдаёт, может не там ищу?..
А с пятью знаками в пароле регистрация и запись в базу (md5) проходит нормально... В базе тип поля пароля varchar 50...

110

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

Заметил, что если одними цифрами вводить пароль, пускает и 15 знаков... А буквами только пять... Можете подсказать, где я протупил?..

111

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

Freeware сказал:

Unknown column 'asdfghjkl' in 'field list'

Означает, что запрос составлен таким образом, что в таблице ищется поле 'asdfghjkl', которого не существует. Смотрите как формируется запрос.

112

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

Не пойму, а почему тогда до пяти букв или сколько угодно цифр существует, а для больше пяти букв нет?..

113

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

Freeware
Не знаю. Я кода не вижу.

114 (изменено: Hanut, 2010-01-21 02:03:11)

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

Здравствуйте, уважаемый Hanut...
Так и не смог найти ошибку, проблема в том, что на цифрах работает регистрация, а на буквах не работает (пробовал немного переделать, ничего не получилось)...
Выдаёт ошибку Unknown column ..... пароль прописывает.... in 'field list', хотя один раз проскочила и на поле с логином ошибка такая же (в процессе проб)...

<?php
function reg_in(){
include_once("db_connect.inc");

if (isset($_POST['submit']))
{    
    $login = trim($_POST['login']);
    $password = trim($_POST['password']);
    $password2 = trim($_POST['password2']);
    $email = trim($_POST['email']);
    if(empty($_POST['login']))
    {        
    $_GET['$out'].= '<br><br><br> <center> <a href="?action=add_reg"> Вы не ввели логин </a></center>';
    }    
    elseif(empty($_POST['password'])||strlen($_POST['password'])>20)
    {
    $_GET['$out'].= '<br><br><br> <center> <a href="?action=add_reg"> Вы не ввели пароль, либо он превышает 20 символов. </a></center>';    
    }
    elseif(empty($_POST['password2']))
    {
    $_GET['$out'].= '<br><br><br> <center> <a href="?action=add_reg"> Вы не ввели подтверждение пароля </a></center>';    
    }
    elseif($_POST['password'] != $_POST['password2'])
    {
    $_GET['$out'].= '<br><br><br> <center> <a href="?action=add_reg"> Введенные пароли не совпадают </a></center>';    
    }
    elseif(empty($_POST['email']))
    {
    $_GET['$out'].= '<br><br><br> <center> <a href="?action=add_reg"> Вы не ввели E-mail </a></center>';    
    }    
    else
        header('Refresh:3; URL=index.php?action=add_reg');
//        {
        if(!eregi("[А-Яа-яA-Za-z' -]{1,50}",$login))
        {        
        $_GET['$out'].= '<br><br><br> <center> <a href="?action=add_reg"> Необходимо правильно заполнить поле "Имя" </a></center>';
        return;        
        }        
        if (strlen($password) < 3)
        {
        $_GET['$out'].='<br><br><br> <center> <a href="?action=add_reg">Пароль не должен быть короче, чем 3 символа!</a></center>';
        return;
        }
        if (!preg_match('/^[A-Za-z0-9]{3,20}$/i', $password) and $password != "")        
        {
        $_GET['$out'].= '<br><br><br> <center> <a href="?action=add_reg">Пароль должен состоять из латинских букв и/или цифр!</a></center>';
        return;
        }        
        if (!preg_match("/^[a-z0-9_-]{1,20}+(\.){0,2}+([a-z0-9_-]){0,5}@(([a-z0-9-]+\.)+(com|net|org|mil|".
        "edu|gov|arpa|info|biz|inc|name|[a-z]{2})|[0-9]{1,3}\.[0-9]{1,3}\.[0-".
        "9]{1,3}\.[0-9]{1,3})$/is",$email)){
        $_GET['$out'].= '<br><br><br> <center> <a href="?action=add_reg"> Необходимо правильно заполнить поле "Email" </a></center>';        
        return $email;
        }
        $login = $_POST['login'];
        $password = $_POST['password'];
        $password2 = $_POST['password2'];
        $email = $_POST['email'];
        $db='test';
        if (!$_GET['$MV'])
        {
        $_GET['$out'].= "<p>Произошла ошибка при подсоединении к MySQL!</p>".mysql_error(); exit();
        } // else {

        if (!@mysql_select_db($db, $_GET['$MV']))
        {
        $_GET['$out'].=("<p>Выбранной базы данных не существует!</p>");
        }

//        }
        $query = "SELECT `id`
        FROM `usersdb`
        WHERE `nick`='{$login}'";        
        $sql = mysql_query($query) or die(mysql_error());
        if (mysql_num_rows($sql) > 0)
        {
        $_GET['$out'].= '<br><br><br> <center> Такой логин уже существует </center>';
        }        
        else
        {
            $query = "INSERT INTO `usersdb`(`nick`, `pass`, `email`, `status`)
            VALUES ('$login', md5($password), '$email', 1)";
            $result = mysql_query($query) or die(mysql_error());            
            $_GET['$out'].=  'Регистрация прошла успешно';            
        }
//    }
}
return;
}
?>

Ошибки закомментированы.

115

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

На всякий случай код формы регистрации:

<?php
$_GET['$out'].="<border-left-widht=100px
<script type=\"text/javascript\">
     function valid(){
        if(frmLogin.login.value==''){
            document.getElementById('message').innerHTML='Заполните логин';
                 frmLogin.login.focus();
            return false;
        }
        if(frmLogin.password.value==''){
            document.getElementById('message').innerHTML='Заполните пароль';            
            return false;
        }
        if(frmLogin.password2.value!=frmLogin.password.value){
           document.getElementById('message').innerHTML='Пароли не совпадают';            
            return false;
        }
        if(frmLogin.email.value==''){
            document.getElementById('message').innerHTML='Заполните e-mail';            
            return false;
        }
        return true;
    }

</script>
            <fieldset 
                <html>
                    <head>
                    <title>Скрипт регистрации</title>
                    </head>
                    <body>
                    <table align=center
                        <b> Поля, обозначенные звёздочкой * , обязательны к заполнению </b><br><br>
                        <form action='?action=reg_in' method='POST' onsubmit=\"return valid()\" name=frmLogin>
                        <tr>
                        <td>Имя: *</td>
                        <td><input type=text name=login size=20 maxlength=20></td><div id='message'></div>
                        </tr>
                        <tr>
                        <td>Пароль: *</td>
                        <td><input type=password name=password size=20 maxlength=20></td>
                        </tr>
                        <tr>
                        <td>Повторите пароль: *</td>
                        <td><input type=password name=password2 size=20 maxlength=20></td>
                        </tr>
                        <tr>
                        <td>Email: *</td>
                        <td><input type=text name=email size=20 maxlength=20></td>
                        </tr>
                        <tr>
                        <td align=center colspan=2><input type=submit value=Зарегистрироваться name=submit></td>
                        </tr>
                        </form>
                    </table>
                    </body>
                </html>";
$_GET['$out'].="</fieldset>";
?>

116

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

Freeware
В коде много лишних скобок. Используйте текстовый редактор с подсветкой синтаксиса.

117

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

Здравствуйте, уважаемый Hanut...
Спасибо за подсказку по поводу лишних скобок... Но и без них не работало...
Полазив по форумам, нашёл всё-таки причину, только сам не понимаю всех тонкостей, может объясните?..

Решение оказалось довольно простым... (Но честно говоря, не вижу разницы)...
1. применил функцию md5 в объявлении самих переменных...
2. а в запрос к базе поставил саму переменную $password...

Сейчас проверяю, вроде бы всё работает и смешанные, и только буквы...

118

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

Freeware
В запросе надо забрать пароль в кавычки, так как это строка.

$query = "INSERT INTO `usersdb`(`nick`, `pass`, `email`, `status`)
            VALUES ('$login', md5('$password'), '$email', 1)";

119

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

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

Warning: Cannot modify header information - headers already sent by (output started at /home/c/cl11765/kuschevka.ru/public_html/index.php:2) in /home/c/cl11765/kuschevka.ru/public_html/guestbook/class.php on line 5

Warning: Cannot modify header information - headers already sent by (output started at /home/c/cl11765/kuschevka.ru/public_html/index.php:2) in /home/c/cl11765/kuschevka.ru/public_html/guestbook/class.php on line 6

Warning: Cannot modify header information - headers already sent by (output started at /home/c/cl11765/kuschevka.ru/public_html/index.php:2) in /home/c/cl11765/kuschevka.ru/public_html/guestbook/class.php on line 7

Warning: Cannot modify header information - headers already sent by (output started at /home/c/cl11765/kuschevka.ru/public_html/index.php:2) in /home/c/cl11765/kuschevka.ru/public_html/guestbook/class.php on line 8

Warning: Cannot modify header information - headers already sent by (output started at /home/c/cl11765/kuschevka.ru/public_html/index.php:2) in /home/c/cl11765/kuschevka.ru/public_html/guestbook/class.php on line 9

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/c/cl11765/kuschevka.ru/public_html/guestbook/class.php on line 190
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CURRENT_TIMESTAMP, nick VARCHAR(256), homepage VARCHAR(256), email VARC' at line 3

Первые несколько строк ругаются именно на такую запись, которая на локалхосте игнорировалась, или работала...:

header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

Спасибо...

120

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

Ещё вопрос, а как можно сделать, чтобы после регистрации сайт сразу пускал человека и сразу видел его имя(то есть не писал гость и не заставлял снова входить на сайт)?..

121

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

Freeware
Нельзя отправлять заголовки (header) после того, как был вывод (print, echo). Заголовки должны быть перед выводом.

Хранить данные входа надо в кукисах. А именно, в кукисах надо хранить хеш (md5) пароля, чтобы сравнивать его с хешем пароля хранящимся в БД.

122

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

Здравствуйте, уважаемый Hanut...
1. Можно ли сделать header с условием?.. Чтобы в случае регистрации на главную, а если нет, то снова на форму регистрации?.. (Просто условие выполняется ниже, чем хидер, и вот, не пойму как сделать)...
2. Можно ли прописать Мета-теги в файлах (шаблонных) с расширением tpl?.. (Например, index.tpl, или обязательно нужно расширение html?..)
3. Не могу совместить стиль для Мозиллы и Оперы, а как можно сделать условие, чтобы для Мозиллы включался один файл ЦСС, а для Оперы -- другой?..
Спасибо...

123

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

Freeware
1) Надо перенести выполнение условия вверх.
2) Можно сделать tpl. Все зависит от используемого механизма шаблонов.
3) Лучше писать стили так, чтобы они во всех основных браузерах отображались одинаково. Это не просто, но все остальные способы плохие.

124

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

Здравствуйте, уважаемый Hanut...
Потихонечку пытаюсь сделать одну ЦСС, чтобы везде отображало, хотя бы нормально...))) (Пока с трудом...)))
Вопрос: А как можно в некотором коде не использовать какой-то класс, если он прописан для вывода в другом месте, а именно в этом месте такой класс не нужен?..
(для вывода всех цитат использую класс, который сдвигает стихи(отрывки) вправо, а в маленьком окне типа "цитата дня", сдвигать не нужно, потому что получается некрасиво, но класс указан для каждой записи уже в базе)...
Спасибо...

125

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

Здесь есть зависимость от того, как вы прописали стиль.

Обычно делается так:
[mono]div { margin-left: 1em; }[/mono]

Чтобы во всех div на странице текст был с отступом, кроме меню, к примеру, устанавливаем для меню идентификатор и пишем так:
[mono]#id_name div { margin-left: 0; }[/mono]
Теперь все div внутри слоя [mono]<div id="id_name></div>[/mono] не будут иметь отступ.

Вот вам ссылка на замечательный и очень доходчивый справочник по CSS: http://stepbystep.htmlbook.ru/?id=43