Strona 1 z 1

Problem przy weryfikacji formularza.

PostNapisane: 16 listopada 2007, o 04:49
przez zolty
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 :)

Problem przy weryfikacji formularza.

PostNapisane: 16 listopada 2007, o 04:55
przez zolty
Oj zapomniałem dodać pliku
validate.php
sorry :)
<?php

// Uruchamia obsługę błędów i klasę weryfikującą
require_once('script/error_handler.php');
require_once('class/class.validate.php');
require_once('class/class.usersession.php');


$objSession = new UserSession();
$validator = new Validate();

$objSession->Impress();

// Tworzy nowy obiekt Validator
//$validator = new Validate();

// Czyta typ weryfikacji (PHP czy AJAX?)
$validationType = '';
if (isset($_GET['validationType'])) {
$validationType = $_GET['validationType'];
}
// Weryfikacja AJAX czy PHP?
if ($validationType == 'php') {

header("Location:" . $validator->ValidatePHP($objSession->errors, $objSession->values));

} else {
// Weryfikacja AJAX korzysta z metody ValidateAJAX. Rezultat jej działania zapisany jest
// w dokumencie XML, wysyłanym do klienta
$response = '<?xml version="1.0" encoding="utf-8" standalone="yes" ?>' .
'<response>' . '<result>' . $validator->ValidateAJAX($_POST['inputValue'],
$_POST['fieldID']) . '</result>' . '<fieldid>' . $_POST['fieldID'] .
'</fieldid>' . '</response>';
// Generuje odpowiedź
if (ob_get_length()) ob_clean();
header('Content-Type: text/xml');
echo $response;
}
?>
Ten plik jest uruchamiany przez JavaScript i to on za wsystko odpowiada :)