Глядя на ваш полный код из http://pastebin.com/40TQFEd5,, становится ясно, что вы не понимаете, как работает поток процессов PHP. Короче говоря, каждый раз, когда страница загружается (GET или POST), создается впечатление, что ваша программа запускается с нуля. Единственный способ сохранения данных между отдельными загрузками страниц - это если вы явно сохраняете их где-то для сохранения - например, в переменной SESSION на стороне сервера или на стороне клиента:
* вывести его в виде ссылки, чтобы его можно было найти в переменной GET
* вывести поле формы (например, скрытое поле), чтобы его можно было найти в переменной GET или POST (в зависимости от метода отправки формы)
* вызвать SetCookie () или вывести javascript, который устанавливает cookie, чтобы его можно было найти в переменной COOKIE
Соответствующий бит кода:
if ($_POST['new_page']) {
print "<h2>Create new page</h2>\n";
$this->EditForm(true);
} else if($_POST['edit']){
print "<h2>Edit page</h2>\n";
$this->EditForm(false);
} else if($_POST['save']){
$this->SaveChanges($_POST['author'], $_POST['org_id'], $_POST['title'], $_POST['content'],$this->isNew);
$this->DefaultForm();
Помимо проблем, с которыми вы даже не устанавливаете переменную $ isNew в своем примере кода, реальная проблема заключается в том, что поток работает следующим образом:
- Страница загружена со значением POST 'edit' или 'new_page'. Создается новый экземпляр класса
HTMLEditor
, и (хотя ваш код фактически не делает этого сейчас) $ isNew устанавливается соответствующим образом на основе значения POST. Форма выводится на страницу и отправляется клиенту
- Пользователь заполняет форму в браузере и нажимает кнопку "Отправить"
- Страница загружена со значением POST 'save'. Создан новый экземпляр класса
HTMLEditor
. isSet неизвестен, так как он не был сохранен и снова отправлен на сервер.
Очень простое решение: в вашем методе EditForm()
выведите скрытое поле, содержащее значение isSet или, что еще лучше, значение идентификатора записи.
Кроме того, ваш код может использовать некоторую работу. Существует по крайней мере одна уязвимость в SQL-инъекции:
$sql.=" AND pages.ID = '".$_POST['pageID']."'";
Отступы ваших операторов печати на основе HTML затрудняют чтение кода:
print "<table width=\"100%\"summary=\"New Page\"\n>";
print "<tr>\n";
print "<th>Author: </th>\n";
print "<td><input type=\"text\" name=\"author\"";
if(isset($row['Name'])){
print "value=\"".$row['Name']."\"";
}
print "/></td>\n";
и, действительно, вывод такого большого количества форм, отображаемых как операторы печати, трудно читать и поддерживать. Я бы посоветовал вам взглянуть на шаблонизатор: см. https://stackoverflow.com/questions/62617/whats-the-best-way-to-separate-php-code-and-html или https://stackoverflow.com/questions/62605/php-as-a-template-language-or-some-other-php-templating-script