PDA

Zobacz pełną wersję : komponent i problem z walidacją formularza



Pawelo31
16-11-2012, 21:27
witam




mam problem z moim komponentem


spójrz na kod który umieściłem w kontrolerze


if (JRequest::getVar('task') == 'save')
{
$tytul_aukcji = strip_tags(JRequest::getVar( 'tytul_aukcji'));
$czas_trwania_aukcji = JRequest::getVar( 'czas_trwania_aukcji');
$opis = strip_tags(JRequest::getVar( 'edytor_opis'));
$opis=str_replace("\r\n","",$opis);

global $mainframe;
$mainframe = JFactory::getApplication();
if(!$tytul_aukcji || !$czas_trwania_aukcji || !$opis){

$mainframe->redirect('index.php?option=com_aukcje&view=dodajaukcje', JText::_('Podaj wszystkie dane!'));
}
elseif(!ereg("[\\x500.a-zA-ZąćęłńóśźżĄĘŁŃÓŚŹŻ]{7,}", $tytul_aukcji))
{
$mainframe->redirect('index.php?option=com_aukcje&view=dodajaukcje', JText::_('Podaj tytuł! Od 7 do 50 znaków. Bez formatowania.'));
}
elseif(!ereg("^-?[0-9][0-9]*$",$czas_trwania_aukcji))
{
$mainframe->redirect('index.php?option=com_aukcje&view=dodajaukcje', JText::_('Podaj czas trwania aukcji! Od 1 do 99 dni.'));

}
elseif(!ereg("[\\x500.a-zA-ZąćęłńóśźżĄĘŁŃÓŚŹŻ]{20,}",$opis))
{
$mainframe->redirect('index.php?option=com_aukcje&view=dodajaukcje', JText::_('Podaj opis! Od 20 do 2500 znaków. Bez formatowania.'));
}else{

$zapis = $model->zapis_aukcji();
$this->assignRef('zapis', $zapis);
}
}


jest to walidacja formularza
po pomyślnym sprawdzeniu następuje zapis do bazy w funkcji zapis_aukcji()
zastosowałem wyrarzenia regularne i funkcję ereg jednak to nie działa
spójrz na stronę http://regexp.pl/ można tam sprawdzać własne wyrarzenia
wyrarzenie [\\x500.a-zA-ZąćęłńóśźżĄĘŁŃÓŚŹŻ]{7,} na tej stronie daje true jeśli wpiszę jakiś tytuł od 7 znaków
nie wiem czemu u mnie to nie działa




kawełek \\x500. oznacza że można używać spacje i kropki

Dziudek
16-11-2012, 23:17
Witam,

Moja pierwsza sugestia - zamiast ereg (warto zobaczyć komunikat na stronie: http://php.net/manual/en/function.ereg.php ) poleciłbym użyć funkcji preg_match: http://php.net/manual/en/function.preg-match.php

pawelSafiStudio
17-11-2012, 08:40
@Dziudek dobrze mówi. Szczerze mówiąc ja nigdy nie korzystałem z ereg :) Zawsze preg_match lub preg_match_all. Spróbuj tego. Ew. sprawdzałeś czy masz wartości w pobieranych zmiennych POST? Może jakaś literówka w nazwach zmiennych?

Pawelo31
17-11-2012, 12:29
sprawdziłem funkcje preg_math z takim wyrażeniem

$string="jakiś nowy tytuł 123";if(preg_match("/^[ 0-9a-zA-Zążśźęćń󳥯ŚŹĘĆŃÓŁ]{1,}$/u",$string)){echo 'true';}else{echo 'false';}
koniecznie zliterką u na końcu
zwraca true czyli to o co mi chodziło

- - - Updated - - -

zmieniłem także wyrażenie z czasem trwania aukcji na
$string="123";if(preg_match("/^[0-9]{1,}$/D",$string)){echo 'true';}else{echo 'false';}
zwraca true