|
|
|
| Доброго всем времени суток!
Сейчас изучаю очень познавательную книгу "РНР практика создания 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 то все работает. Почему так? | |
|
|
|
|
|
|
|
для: 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");
?>
|
| |
|
|
|
|
|
|
|
для: Ирбис
(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 и все заработало...
У кого нибудь еще встречались ошибки? | |
|
|
|
|
|
|
|
для: muravey
(24.12.2010 в 17:13)
| | Еще какие-то встречались, но сейчас точно вспомнить не могу где и что.
ИМХО: вообще SoftTime FrameWork является весьма удобным средством для разработки web-приложений, но чтобы он заработал как надо, требуется допиливание | |
|
|
|
|
|
|
|
для: Ирбис
(24.12.2010 в 17:17)
| | Ладно, будут вопросы по книге буду писать! | |
|
|
|
|
|
|
|
для: 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 в 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ый остался. Почему? | |
|
|
|
|