Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Ошибка или опечатка в книге "РНР практика создания Web-сайтов 2-е издание"
 
 автор: muravey   (24.12.2010 в 16:24)   письмо автору
 
 

Доброго всем времени суток!

Сейчас изучаю очень познавательную книгу "РНР практика создания Web-сайтов 2-е издание". Но в процессе изучения и отладки примеров скриптов нахожу ошибки.

Вот например одна из них:
создаю класс

...
$pass_again = new field_text_password ("pass_again",
            "Повтор пароля",
            true,
            $_POST['pass_again']);
...

и т.д. как в книге.
Но браузер выдает исключительную ситуацию:
...
Произошла исключительная ситуация (ExceptionMember) - попытка обращения к несуществующему члену класса field. Член field::value не существует.

Ошибка в файле Z:\home\localhost\www\muraveynik\class\class.field.php в строке 48.
...

Дальше ищу в чем ошибка и смотрю HTML код в браузере:

...
<td  class="field" valign=top><input  
                    type="password"
                    name="passiagain"
                    value=""
                    size=41 maxlength=255>
 </td>
...

И вижу что name="passiagain", а не name="pass_again". Странно?
Но если меняю pass_again на pass2 то все работает. Почему так?

  Ответить  
 
 автор: Ирбис   (24.12.2010 в 16:46)   письмо автору
 
   для: muravey   (24.12.2010 в 16:24)
 

Откройте файл /class/class.field.php

В конструкторе:
<?php
$this
->name $this->encodestring($name);
?>


Определение метода encodestring()
<?php
protected function encodestring($st)
{
  
// Сначала заменяем "односимвольные" фонемы.
  
$st=strtr($st,"абвгдеёзийклмнопрстуфхъыэ_",
  
"abvgdeeziyklmnoprstufh'iei");
  
$st=strtr($st,"АБВГДЕЁЗИЙКЛМНОПРСТУФХЪЫЭ_",
  
"ABVGDEEZIYKLMNOPRSTUFH'IEI");
  
// Затем - "многосимвольные".
  
$st=strtr($st
                    array(
                          
"ж"=>"zh""ц"=>"ts""ч"=>"ch""ш"=>"sh"
                          
"щ"=>"shch","ь"=>"""ю"=>"yu""я"=>"ya",
                          
"Ж"=>"ZH""Ц"=>"TS""Ч"=>"CH""Ш"=>"SH"
                          
"Щ"=>"SHCH","Ь"=>"""Ю"=>"YU""Я"=>"YA",
                          
"ї"=>"i""Ї"=>"Yi""є"=>"ie""Є"=>"Ye"
                          
)
                 );
  
// Возвращаем результат.
  
return $st;
}
?>


Обратите внимание на этот участок кода:
<?php
$st
=strtr($st,"абвгдеёзийклмнопрстуфхъыэ_",
"abvgdeeziyklmnoprstufh'iei");
$st=strtr($st,"АБВГДЕЁЗИЙКЛМНОПРСТУФХЪЫЭ_",
"ABVGDEEZIYKLMNOPRSTUFH'IEI");
?>


Как видно, нижнее подчеркивание заменяется на i

Измените этот участок кода таким образом, чтобы нижнее подчёркивание ничем на заменялось(в нём нет ничего опасного):
<?php
$st
=strtr($st,"абвгдеёзийклмнопрстуфхъыэ",
"abvgdeeziyklmnoprstufh'ie");
$st=strtr($st,"АБВГДЕЁЗИЙКЛМНОПРСТУФХЪЫЭ",
"ABVGDEEZIYKLMNOPRSTUFH'IE");
?>

  Ответить  
 
 автор: muravey   (24.12.2010 в 17:13)   письмо автору
 
   для: Ирбис   (24.12.2010 в 16:46)
 

Спасибо, все получилось!

Еще есть опечатки:

class minmax
 {
     private function __call($method, $arg)//
     {
         if (!is_array($arg))
         {
             return false;
         }
         $value = $arr[0];
         if ($method == "min")
         {
             for ($i=0; $i < count($arg); $i++)
             {
                 if ($agr[$i] < $value) $value = $agr[$i];
             }
         }
         if ($method == "max")
         {
             for ($i=0; $i < count($arg); $i++)
             {
                 if ($agr[$i] > $value) $value = $agr[$i];
             }
         }
         return $value;
     }
 }

Такой код не работает, я заменил все $arg, $arg на $arr и все заработало...

У кого нибудь еще встречались ошибки?

  Ответить  
 
 автор: Ирбис   (24.12.2010 в 17:17)   письмо автору
 
   для: muravey   (24.12.2010 в 17:13)
 

Еще какие-то встречались, но сейчас точно вспомнить не могу где и что.
ИМХО: вообще SoftTime FrameWork является весьма удобным средством для разработки web-приложений, но чтобы он заработал как надо, требуется допиливание

  Ответить  
 
 автор: muravey   (24.12.2010 в 17:20)   письмо автору
 
   для: Ирбис   (24.12.2010 в 17:17)
 

Ладно, будут вопросы по книге буду писать!

  Ответить  
 
 автор: muravey   (25.12.2010 в 14:46)   письмо автору
 
   для: muravey   (24.12.2010 в 17:20)
 

Дошел до расширенной регистрации пользователей (Л.6.23.)

...
//проверка эл. ящ.
$query = "SELECT COUNT(*) FROM system_accounts
    WHERE email = '{$form->fields[email]->value}'";
$mal = mysql_query($query);
if (!$mal)
{
throw new ExceptionMySQL(mysql_error(),
        $query,
        "Ошибка регистрации пользователя!");
}
if (mysql_result($mal, 0))
{
$error[] = "Пользователь с электронным адресом
    {$form->fields[email]->value} уже зарегистрирован!";
}
...


Почему когда оставляю все поля пустыми и нажимаю на кнопку Добавить выдает, что пользователь с таким емайлом есть. Тоже самое выдает когда в поле E-mail набираю различный текст.

Вариант1

Поле "Имя" не заполнено!
Поле "Пароль" не заполнено!
Поле "Повтор пароля" не заполнено!
Введите e-mail в виде admin@mail.ru
Пользователь с электронным адресом уже зарегистрирован!


Вариант2

Поле "Имя" не заполнено!
Поле "Пароль" не заполнено!
Поле "Повтор пароля" не заполнено!
Введите e-mail в виде admin@mail.ru
Пользователь с электронным адресом ййййй уже зарегистрирован!

  Ответить  
 
 автор: muravey   (25.12.2010 в 15:18)   письмо автору
 
   для: muravey   (25.12.2010 в 14:46)
 

Сам нашел ошибку...
опечатка...

В книге так

class field_textarea extends field
{
    protected $cols;
    protected $rows;
    protected $disabled;
    protected $readonly;
    protected $wrap;

    //конструктор класса
     function __construct($name,
                         $caption,
                         $id_required = false,
                         $value = "",
                         $cols = 35,
                         $rows = 7,
                         $disabled = false,
                         $readonly = false,
                         $wrap = false,
                         $parameters = "",
                         $help = "",
                         $help_url = "")
     {
         parent::__construct($name,
                         "textarea",
                         $caption,
                         $id_required,
                         $value,
                         $parameters,
                         $help,
                         $help_url);

         $this->cols = $cols;
         $this->rows = $rows;
         $this->disabled = $disabled;
         $this->readonly = $readonly;
         $this->wrap = $wrap;
     }


нуно исправить $id_required на $is_required

class field_textarea extends field
{
    protected $cols;
    protected $rows;
    protected $disabled;
    protected $readonly;
    protected $wrap;

    //конструктор класса
     function __construct($name,
                         $caption,
                         $is_required = false,
                         $value = "",
                         $cols = 35,
                         $rows = 7,
                         $disabled = false,
                         $readonly = false,
                         $wrap = false,
                         $parameters = "",
                         $help = "",
                         $help_url = "")
     {
         parent::__construct($name,
                         "textarea",
                         $caption,
                         $is_required,
                         $value,
                         $parameters,
                         $help,
                         $help_url);

         $this->cols = $cols;
         $this->rows = $rows;
         $this->disabled = $disabled;
         $this->readonly = $readonly;
         $this->wrap = $wrap;
     }


Но исчез только 2ой вариант, а 1ый остался. Почему?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования