Ahojte.
Potreboval by som radu. Zrejme ma čaká zostavenie obrovského formuláru (desiatky položiek, inputov, selectov a pod.) a keby som to mal všetko rućne kontrolovať a spracovávať premennú po premennej, asi by ma šľak trafil. Nepoznáte niečo efektívnejšie a rýchlejšie?
Inak aké máte skúsenosti so šablónovým systémom Smarty? Len zisťujem skúsenosti a názory.
Ďakujem.
Fórum › PHP
Spracovanie a kontrola rozsiahlejších formulárov
Doporucuji cast z vlastniho frameworku Háefko - http://haefko.programujte.com
- rozpracovaný manuál k formulářům - http://haefko.programujte.com/manual/form
v distribuci jsou i dva priklady...
To survik1 : http://www.prenocuj.sk/index.php?s=add_object Mám spraviť niečo v tomto zmysle. Takmer to isté... Sú dve možnosti:
1. ja sa asi zabijem :smile10:
2. na základe Hrachovho HáEfka sa skúsim problémom prekúsať.
Budem najskôr upravovať Drupal vlastným potrebám. Má to byť kompletne databázová aplikácia o ubytovaní s interakciou užívateľov. Viac si myslím nie je potrebné dodávať.
to je fakt brutal :-D
to si robil ty?
Nemas prijimat zakazky na ktere nemas ;)
Ja si kdysi v jednom projektu kde jsem musel take kontrolovat hodne udaju udelal takovou funkci:
function check ($type,$string,$param1=false,$param2=false){
if($type=="strlen")
{
if(strlen($string)<$param1)return false;
else if (strlen($string)>$param2)return false;
return true
}
if($type=="mail")
{
if(!ereg("^([_a-z0-9-]+)(\.[_a-z0-9-]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,4})$",$string))return false;
return true;
}
if($type=="alnum")
{
if(!ereg("^[[:alnum:]]*$",$string))return false;
return true;
}
}
da se to pouzivat hromadne metodou ctrl c ctrl v. Pak uz jen udelas neco takoveho (pseudokod)
chyba="";
if(!isset(policko1) || !check(policko1,4,10)) chyba.="Chybna delka policka 1\n"'
if(!isset(policko2) || !check(policko2,4,10)) chyba.="Chybna delka policka 2\n"'
if(chyba) echo "GAME OVER ".nl2br(chyba);
dal zpracovat, ulozit atd.
Da se to rozsirit na jakykoliv druh kontroly dat a je to jen jeden jednoduchy radek na jednu kontrolu. Na ty hrozne tabulky stejne ale budes muset pres cykly.
Ja jsem kdysi udelal neco takovehoto:
/**
* Check input element according regular expressions
*
* Function for checking user input according regular expressions
*
* @param string e id of XHTML element with user input
* @param string type type of regular expression (mail, name, phone or text)
* @return bool
*/
function checkInput(e, type) {
var input = document.getElementById(e);
var pattern;
var advArr;
var subPattern;
var advCount = 0;
var result;
switch(type) {
case 'mail' :
pattern = /\w+@\w{1,}\u002e\w{2,}/;
subPattern = /@/g;
break;
case 'name' :
pattern = /[^ ]+\s.*/;
break;
case 'phone' :
pattern = /\+\d{12}$/;
break;
case 'text' :
break;
default :
return false;
break;
}
switch(type) {
case 'mail' :
while((advArr = subPattern.exec(input.value)) != null) advCount++;
if(advCount == 1) result = pattern.test(input.value);
else result = false;
break;
case 'text' :
if(input.value.length > 0) result = true;
else result = false;
break;
default :
result = pattern.test(input.value);
break;
}
return result;
}
/**
* Change element style
*
* Function for changing element style in case of bad value
*
* @param string e id of XHTML element with user input
* @return null
*/
function badField(e) {
var input = document.getElementById(e);
input.style.borderColor = '#FF0000';
input.onfocus = function() {this.style.borderColor = '#000000';}
}
/**
* Check form
*
* Function for checking whole form before sending to server
*
* @return null
*/
function checkForm() {
var result = true;
if(!checkCaptcha('captcha', 'hash')) {
badField('captcha');
result = false;
}
if(!checkInput('mail', 'mail')) {
badField('mail');
result = false;
}
if(!checkInput('name', 'name')) {
badField('name');
result = false;
}
/*
if(!checkInput('phone', 'phone')) {
badField('phone');
result = false;
}
*/
if(!checkInput('body', 'text')) {
badField('body');
result = false;
}
if(!result) {
document.getElementById('error').style.display = 'block';
}
return result;
}
A pak vlastne das na submit button toto:
onclick="if(checkForm()) return true; return false;"
To je ale jenom JS, to ti moc nepomuze, tomu PHP se stejne nevyhnes
Tak např. pro ty checkboxy
$pole = $_POST['pole'];
foreach ($pole as $p => $key) {
if ($key == true) {
$p1 = mysql_escape_string($p);
$db_query .= "$p1 = 'Y' ";
}
}
$db_result = mysql_query("insert into xxx values ($db_query)");
if (!$db_result) {
//napr. pozadovany sloupec neexistuje; nemusi te to moc trapit kvuli escapovani znaku...
echo "chyba";
}
hm, tak samozrejme vsechny tyto validace a mnohem vice ma to haefko... :smile1:
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Seriovy port z viacerych formularov — založil miso
Spracovanie DB — založil Anonymní uživatel
Spracovanie suboru — založil rAdo
Skvelé spracovanie hry — založil 1.maros2805
Tvorba mapy a jej spracovanie — založil Eversmann
Moderátoři diskuze