Problem przy weryfikacji formularza.
Napisane: 16 listopada 2007, o 04:49
Witam
Mam mały problem. Pisze program z sesjami opartymi na bazie danych.
A więc mój problem jest taki, że stosuje sprawdzanie wpisania prawidłowych danych do formularza. I JavaScript mi ładnie je obsługuje tylko jeśli klikam na przycisk Rejestruj użytkownika to jeśli są nieprawidłowe informacje powinien mi wyświetlić informacje, które pola są złe i zostawić dobrze wpisane dane. Niestety w sesjach na bazie danych nie wiem jak to zrobić :( działa mi skrypt tylko do polowy. Czyli tylko weryfikacja JavaScript w php cos mi się psuje chyba źle coś w pętli foreach pisze ale nie jestem pewnie. Siedzę już nad tym sporo czasu i by mile była widziana wszelka pomoc :).
Osobiście uważam ze coś spaprałem w funkcji ValidatePHP ale już całkiem nie wiem co jest nie tak próbowałem na wszelkie sposoby i głowa mi nie pracuje :(
szablon smarty form_adduser.tpl
<fieldset>
<legend class="txtFormLegend">Rejestracja nowego użytkownika.</legend>
<br />
<form name="frmRegistration" action="validate.php?validationType=php" method="post">
<!-- Imię -->
<label for="txtName">Imię:</label>
<input id="txtName" name="txtName" type="text"
onblur="validate(this.value, this.id)"
value="{$vtxtName}" />
<span id="txtNameFailed" class="{$etxtName}">
Podaj swoje imię.
</span>
<br />
<!-- Nazwisko -->
<label for="txtSurname">Nazwisko:</label>
<input id="txtSurname" name="txtSurname" type="text"
onblur="validate(this.value, this.id)"
value="{$vtxtSurname}" />
<span id="txtSurnameFailed" class="{$etxtSurname}">
Podaj swoje nazwisko.
</span>
<br />
<hr />
<span class="txtSmall">Uwaga: Wszystkie pola są obowiązkowe.</span>
<br />
<br />
<input type="submit" name="submitbutton" value="Rejestruj" class="left button" />
</form>
</fieldset>
class.validate.php
class Validate
{
// wspiera weryfikację AJAX, sprawdza pojedynczą wartość
public function ValidateAJAX($inputValue, $fieldID)
{
// sprawdza, które pole jest weryfikowanej wykonuje sprawdzenie wartości
switch($fieldID)
{
*/// Sprawdza poprawność imienia
case 'txtName':
return $this->validateName($inputValue);
break;
case 'txtSurname':
return $this->validateSurname($inputValue);
break;
}
}
// sprawdza, czy wypełnione są wszystkie pola
public function ValidatePHP($sesja, $sesja_values)
{
// Jeśli wystąpi bład ustawia flage na 1
$errorsExist = 0;
// czyści flagi błędów w sesji
if (isset($sesja))
unset($sesja);
// domyślnie wartości pól są uznane za poprawne
$etxtName = 'hidden';
$etxtSurname = 'hidden';
// Weryfikuje imię użytkownika
if (!$this->validateName($_POST['txtName'])) {
$etxtName = 'error';
$errorsExist = 1;
}
// Weryfikuje nazwisko
if (!$this->validateSurname($_POST['txtSurname'])) {
$etxtSurname = 'error';
$errorsExist = 1;
}
// jeśli nie znaleziono błędów, to ustawia wartość pomyślnej weryfikacji
if ($errorsExist == 0)
{
return 'udalosie.php';
}
else
{
// jeśli są błędy, zapisuje wprowadzone dane
foreach ($_POST as $key => $value)
{
$sesja_values[$key] = $_POST[$key];
}
return 'registration.php';
}
}
// Weryfikuje imię użytkownika, pole nie może być puste.
private function validateName($value) {
$value = trim($value);
if ($value)
return 1; // Poprawne
else
return 0; // Niepoprawne
}
// Weryfikuje Nazwisko
private function validateSurname($value)
{
$value = trim($value);
// Puste pole nie jest poprawne
if ($value)
return 1; // Poprawne
else
return 0; // Niepoprawne
}
}
registration.php
<?php
include('libs/Smarty.class.php');
require_once('class/class.usersession.php');
require_once('class/class.danedoform.php');
$objDane = new DaneDoForm();
$objSession = new UserSession();
$objSession->Impress();
$objSmarty = new Smarty();
if (!$objSession->IsLoggedIn()) {
$objSmarty->display('naglowek_user.tpl');
$objSmarty->display('lewa_user.tpl');
$objSmarty->display('prawa_user.tpl');
include_once('script/session.php');
$vtxtName = $objSession->values = 'txtName';
$vtxtSurname = $objSession->values = 'txtSurname';
$etxtName = $objSession->errors = 'txtName';
$etxtSurname = $objSession->errors = 'txtSurname';
if(!isset($objSession->values)) {
$vtxtName = '';
$vtxtSurname = '';
}
if(!isset($objSession->errors)) {
$etxtName = 'hidden';
$etxtSurname = 'hidden';
}
$objSmarty->assign("vtxtName", $vtxtName);
$objSmarty->assign("etxtName", $etxtName);
$objSmarty->assign('vtxtSurname', $vtxtSurname);
$objSmarty->assign('etxtSurname', $etxtSurname);
$objSmarty->display('form_adduser.tpl');
$objSmarty->display('stopka_user.tpl');
} else {
// Jeśli jesteś zalogowany przekierowanie na główną stronę.
header("Location: index.php");
}
?>
A jeszcze jedno sesje się przekazuje
$objSession->errors i $objSession->values i cały skrypt mi działa tak jak trzeba czyli zapisuje sesje do bazy danych. Z sesjami na bazach danych dopiero zaczynam więc by się cokolwiek przydało. Skorzystałem z kilku książek, pewnie dobrze widać. To chyba wszystko co może pomóc.
Z góry dzięki za pomoc :)
Mam mały problem. Pisze program z sesjami opartymi na bazie danych.
A więc mój problem jest taki, że stosuje sprawdzanie wpisania prawidłowych danych do formularza. I JavaScript mi ładnie je obsługuje tylko jeśli klikam na przycisk Rejestruj użytkownika to jeśli są nieprawidłowe informacje powinien mi wyświetlić informacje, które pola są złe i zostawić dobrze wpisane dane. Niestety w sesjach na bazie danych nie wiem jak to zrobić :( działa mi skrypt tylko do polowy. Czyli tylko weryfikacja JavaScript w php cos mi się psuje chyba źle coś w pętli foreach pisze ale nie jestem pewnie. Siedzę już nad tym sporo czasu i by mile była widziana wszelka pomoc :).
Osobiście uważam ze coś spaprałem w funkcji ValidatePHP ale już całkiem nie wiem co jest nie tak próbowałem na wszelkie sposoby i głowa mi nie pracuje :(
szablon smarty form_adduser.tpl
<fieldset>
<legend class="txtFormLegend">Rejestracja nowego użytkownika.</legend>
<br />
<form name="frmRegistration" action="validate.php?validationType=php" method="post">
<!-- Imię -->
<label for="txtName">Imię:</label>
<input id="txtName" name="txtName" type="text"
onblur="validate(this.value, this.id)"
value="{$vtxtName}" />
<span id="txtNameFailed" class="{$etxtName}">
Podaj swoje imię.
</span>
<br />
<!-- Nazwisko -->
<label for="txtSurname">Nazwisko:</label>
<input id="txtSurname" name="txtSurname" type="text"
onblur="validate(this.value, this.id)"
value="{$vtxtSurname}" />
<span id="txtSurnameFailed" class="{$etxtSurname}">
Podaj swoje nazwisko.
</span>
<br />
<hr />
<span class="txtSmall">Uwaga: Wszystkie pola są obowiązkowe.</span>
<br />
<br />
<input type="submit" name="submitbutton" value="Rejestruj" class="left button" />
</form>
</fieldset>
class.validate.php
class Validate
{
// wspiera weryfikację AJAX, sprawdza pojedynczą wartość
public function ValidateAJAX($inputValue, $fieldID)
{
// sprawdza, które pole jest weryfikowanej wykonuje sprawdzenie wartości
switch($fieldID)
{
*/// Sprawdza poprawność imienia
case 'txtName':
return $this->validateName($inputValue);
break;
case 'txtSurname':
return $this->validateSurname($inputValue);
break;
}
}
// sprawdza, czy wypełnione są wszystkie pola
public function ValidatePHP($sesja, $sesja_values)
{
// Jeśli wystąpi bład ustawia flage na 1
$errorsExist = 0;
// czyści flagi błędów w sesji
if (isset($sesja))
unset($sesja);
// domyślnie wartości pól są uznane za poprawne
$etxtName = 'hidden';
$etxtSurname = 'hidden';
// Weryfikuje imię użytkownika
if (!$this->validateName($_POST['txtName'])) {
$etxtName = 'error';
$errorsExist = 1;
}
// Weryfikuje nazwisko
if (!$this->validateSurname($_POST['txtSurname'])) {
$etxtSurname = 'error';
$errorsExist = 1;
}
// jeśli nie znaleziono błędów, to ustawia wartość pomyślnej weryfikacji
if ($errorsExist == 0)
{
return 'udalosie.php';
}
else
{
// jeśli są błędy, zapisuje wprowadzone dane
foreach ($_POST as $key => $value)
{
$sesja_values[$key] = $_POST[$key];
}
return 'registration.php';
}
}
// Weryfikuje imię użytkownika, pole nie może być puste.
private function validateName($value) {
$value = trim($value);
if ($value)
return 1; // Poprawne
else
return 0; // Niepoprawne
}
// Weryfikuje Nazwisko
private function validateSurname($value)
{
$value = trim($value);
// Puste pole nie jest poprawne
if ($value)
return 1; // Poprawne
else
return 0; // Niepoprawne
}
}
registration.php
<?php
include('libs/Smarty.class.php');
require_once('class/class.usersession.php');
require_once('class/class.danedoform.php');
$objDane = new DaneDoForm();
$objSession = new UserSession();
$objSession->Impress();
$objSmarty = new Smarty();
if (!$objSession->IsLoggedIn()) {
$objSmarty->display('naglowek_user.tpl');
$objSmarty->display('lewa_user.tpl');
$objSmarty->display('prawa_user.tpl');
include_once('script/session.php');
$vtxtName = $objSession->values = 'txtName';
$vtxtSurname = $objSession->values = 'txtSurname';
$etxtName = $objSession->errors = 'txtName';
$etxtSurname = $objSession->errors = 'txtSurname';
if(!isset($objSession->values)) {
$vtxtName = '';
$vtxtSurname = '';
}
if(!isset($objSession->errors)) {
$etxtName = 'hidden';
$etxtSurname = 'hidden';
}
$objSmarty->assign("vtxtName", $vtxtName);
$objSmarty->assign("etxtName", $etxtName);
$objSmarty->assign('vtxtSurname', $vtxtSurname);
$objSmarty->assign('etxtSurname', $etxtSurname);
$objSmarty->display('form_adduser.tpl');
$objSmarty->display('stopka_user.tpl');
} else {
// Jeśli jesteś zalogowany przekierowanie na główną stronę.
header("Location: index.php");
}
?>
A jeszcze jedno sesje się przekazuje
$objSession->errors i $objSession->values i cały skrypt mi działa tak jak trzeba czyli zapisuje sesje do bazy danych. Z sesjami na bazach danych dopiero zaczynam więc by się cokolwiek przydało. Skorzystałem z kilku książek, pewnie dobrze widać. To chyba wszystko co może pomóc.
Z góry dzięki za pomoc :)