Я вызываю эти функции из контроллера, чтобы получить форму и значения из формы. Мой вопрос в том, как я могу сохранить значения в форме после того, как сбой подачи? Я пробовал что-то вроде этого:
<input type="text" name="myField1" value="<?php echo isset($_POST['myField1']) ? $_POST['myField1'] : '' ?>" />
но не может заставить его работать.
private $m_username = 'username'; private $m_password = 'password'; private $m_registerButton = 'registerButton'; public function RegisterUserBox(){ return '<form method="post"> <fieldset> Username: <input type="text" name="'.$this->m_username.'" /> Password: <input type="password" name="'.$this->m_password.'" /> <input type="submit" value="Register" name="'.$this->m_registerButton.'"/> </fieldset> </form>'; } public function GetUsername(){ if(isset($_POST[$this->m_username])){ return $_POST[$this->m_username]; } } public function GetPassword(){ if (isset($_POST[$this->m_password])){ return $_POST[$this->m_password]; } } public function TriedToRegister(){ if (isset($_POST[$this->m_registerButton])){ return true; } return false; }
[edit: run this on localhost]
autocomplete
не работает во всех браузерах; кроме того, это всего лишь подсказка, поэтому файлы cookie остаются единственной опцией. Решение ниже прекрасно работает, однако будет здорово, если другие пользователи вносят альтернативные способы для этого популярного запроса: Keep value in form after submitting
.
<html> <head> <script> function setCookie(c_name, value, exdays) { var exdate = new Date(); exdate.setDate(exdate.getDate() + exdays); var c_value = escape(value) + ((exdays == null) ? "" : "; expires=" + exdate.toUTCString()); document.cookie = c_name + "=" + c_value; } function getCookie(c_name) { var i, x, y, ARRcookies = document.cookie.split(";"); for (i = 0; i < ARRcookies.length; i++) { x = ARRcookies[i].substr(0, ARRcookies[i].indexOf("=")); y = ARRcookies[i].substr(ARRcookies[i].indexOf("=") + 1); x = x.replace(/^\s+|\s+$/g, ""); if (x == c_name) { return unescape(y); } } } function store() { var inputs, index; inputs = document.getElementsByTagName('input'); for (index = 0; index < inputs.length - 1; ++index) { setCookie(inputs[index].name,inputs[index].value,1); } return false; } </script> </head> <body> <form method="post" action="back.php" onsubmit="store()" > firstname<input type="text" name="firstname"> lastname<input type="text" name="lastname"> emailid<input type="text" name="emailid"> <input type="submit" > </form> <script> (function load(){ var inputs, index; inputs = document.getElementsByTagName('input'); for (index = 0; index < inputs.length - 1; ++index) { inputs[index].value = getCookie(inputs[index].name); } return false; })(); </script> </body> </html>
<html> <body> <form method="post" action="back.php" autocomplete="on" > <input type="text" autocomplete="on" > <input type="submit" > </form> </body> </html>
Перед вашей формой создайте экземпляр объекта, который получит данные $_POST
$userbox = new Userbox;
Затем обрабатывайте данные $_POST
, если они есть:
if(isset($_POST['submit']) && $_POST['submit'] === 'userboxsubmit'){ $userbox->process_post(); }
Затем выведите форму:
<input type="text" name="myField1" value="<?php echo $userbox->myField1; ?>" />