Kiedys napisałem klasę obsługującą formularze, może nie jest za długa na to forum [;
CODE
<?php
class FormGenerator {
private $fields;
private $action;
private $method;
private $name;
private $error = false;
private $email;
private $vcode;
private $update;
private $userId;
function __construct($name,$action,$method,$update=false,$userId=0) {
$this->name = $name;
$this->action = $action;
$this->method = $method;
$this->update = $update;
$this->userId = $userId;
}
function addField($label, $name, $type, $value, $style, $required ,$separator = "") {
$this->fields[$label][$name]['name'] = $name;
$this->fields[$label][$name]['type'] = $type;
$this->fields[$label][$name]['value'] = $value;
$this->fields[$label][$name]['style'] = $style;
$this->fields[$label][$name]['separator'] = $separator;
$this->fields[$label][$name]['required'] = $required;
}
function getSqlQuery($tableName,$vcode = true) {
$query = "INSERT INTO ".$tableName." SET ";
$password = "";
if (!isset($_POST[$this->name]))
$postData = $_SESSION[$this->name];
else
$postData = $_POST[$this->name];
foreach ($this->fields as $description => $fields) {
foreach ($fields as $fieldName => $value) {
if ($value['type'] == "password") {
if (!empty($password))
continue;
else {
$postData[$value['name']] = md5($postData[$value['name']]);
$password = "set";
}
}
if ($value['name'] == 'email') {
$this->email = $postData[$value['name']];
$this->vcode = md5(time());
if ($vcode == true)
$parameters[] = 'vcode="'.$this->vcode.'"';
}
$parameters[] = $value['name']."=\"".htmlspecialchars(trim($postData[$value['name']]))."\"";
}
}
$query .= implode(", ",$parameters);
return $query;
}
function verifyData() {
$emptyFields = false;
$formData = $_POST[$this->name];
foreach ($formData as $field => $value) {
if (empty($value))
$emptyFields[]=$field;
}
if ($emptyFields != false)
$this->modifyFields($emptyFields);
}
function modifyFields($emptyFields) {
$password = '';
foreach($this->fields as $description => &$row) {
foreach ($row as $field => &$value) {
if (in_array($value['name'],$emptyFields) && $value['required'] == true) {
$value['style'] .= "; border: 1px solid #ff0000;";
if ($this->error == false)
$this->error = "";
$this->error[] = '<b>Błąd:</b> Nie wszystkie wymagane pola zostały wypełnione.<br />';
} else {
if ($value['name'] == 'email') {
$database = new Database(DATABASE_NAME);
$database->executeQuery("select userId from users where email=\"".$_POST[$this->name]['email']."\"");
if ($database->getNumRows() > 0)
$this->error[] = "<b>Błąd:</b> wpisany adres istnieje w naszej bazie danych.<br />";
}
if ($value['type'] != 'password')
$value['value'] = htmlspecialchars(trim($_POST[$this->name][$value['name']]));
else {
if (!empty($password)) {
if ($password != $_POST[$this->name][$value['name']])
$this->error[] = "<b>Błąd:</b> Wpisane hasła się nie zgadzają.<br />";
if (strlen($password) < 5)
$this->error[] = "<b>Błąd:</b> Hasło jest krótsze, niż 5 znaków.<br />";
} else {
$password = $_POST[$this->name][$value['name']];
}
}
}
}
}
if (is_array($this->error))
$this->error = array_unique($this->error);
}
function isError() {
if (!isset($_POST["formSent"]))
return true;
elseif ($this->error == false)
return false;
else
return true;
}
function getError() {
if ($this->error == false)
return false;
else {
$this->error = "<p class='error'>".implode("",$this->error)."</p>";
return $this->error;
}
}
function getName() {
return $this->name;
}
function getEmail() {
return $this->email;
}
function getVcode() {
return $this->vcode;
}
function printForm() {
echo("<form action='".$this->action."' method='".$this->method."'>\n");
echo("<table border='0' cellspacing='2' cellpadding='0' width='500'>\n");
echo("<input type='hidden' name='formSent' value='true'>");
foreach ($this->fields as $key => $value) {
echo("<tr>\n");
echo("<td align='right'>".$key."</td>\n");
echo("<td>\n");
foreach($value as $field => $options) {
echo("<input type='".$options['type']."' name='".$this->name."[".$options['name']."]' value=\"".$options['value']."\" style='".$options['style']."'>".$options['separator']."\n");
}
echo("</td>\n");
echo("</tr>\n");
}
echo("<tr><td></td><td align='left'><input type='submit' value='Wyślij' style='background-color: #000;color: #fff;font-weight: 700;border: 3px solid #000;'></td></tr>\n");
echo("</table>\n");
echo("</form>\n");
}
}
?>
Wykorzystywałem ją tak:
Kod
$form = new FormGenerator("createaccount","create_account.php","POST");
$form->addField("Imię","fname","text","","width: 300px", true);
a później:
Kod
if (isset($_POST['formSent'])) {
$form->verifyData();
}
if ($form->isError() != false) {
echo($form->getError());
$form->printForm();
}
Nie jest to może dzieło, ale powinno zadziałać [;
Jeśli chodzi o JS, to zbyt łatwo go wyłączyć, aby móc na nim polegać, akurat w tym przypadku.