Tema: Re: Gal galit kas padet
Autorius: fliks
Data: 2009-06-17 13:23:54
Šitas checkPostCode() tikrina tik UK post code formatą.
Ar ne geriau padaryti kokį nors generic formato tikrinimą, kad leistų tik raides ir skaičius?
Dar priklauso, kiek kritiška yra turėti tikslų post code. Jei tai yra labai svarbu, teks ieškoti 
visų reikiamų šalių formatus ir pagal juos rašytis tikrinimą. Jei post code surinkimas yra tik kaip 
formalumas, kaip ir minėjau, galima daryti tik generic tikrinimą.

Kas liečia post code saugojimą į db, žemiau pateiktoj INSERT užklausoj trūksta reikšmės post_code 
stulpeliui (tarp '$tw' ir '$a').


Darius wrote:
> Gal galit patarti kaip padaryti. Radau scriptą, kuris tikrina pašto kodą:
> 
> function checkPostcode (&$toCheck) {
> $alpha1 = "[abcdefghijklmnoprstuwyz]";
> $alpha2 = "[abcdefghklmnopqrstuvwxy]";
> $alpha3 = "[abcdefghjkstuw]";
> $alpha4 = "[abehmnprvwxy]";
> $alpha5 = "[abdefghjlnpqrstuwxyz]";
> 
> $pcexp[0] = 
> '^('.$alpha1.'{1}'.$alpha2.'{0,1}[0-9]{1,2})([0-9]{1}'.$alpha5.'{2})$';
> $pcexp[1] = 
> '^('.$alpha1.'{1}[0-9]{1}'.$alpha3.'{1})([0-9]{1}'.$alpha5.'{2})$';
> $pcexp[2] = 
> '^('.$alpha1.'{1}'.$alpha2.'[0-9]{1}'.$alpha4.')([0-9]{1}'.$alpha5.'{2})$';
> $pcexp[3] = '^(gir)(0aa)$';
> $pcexp[4] = '^(bfpo)([0-9]{1,4})$';
> $pcexp[5] = '^(bfpo)(c\/o[0-9]{1,3})$';
> 
> $postcode = strtolower($toCheck);
> $postcode = str_replace (' ', '', $postcode);
> 
> $valid = false;
> foreach ($pcexp as $regexp) {
> if (ereg($regexp,$postcode, $matches)) {
> $toCheck = strtoupper ($matches[1] . ' ' . $matches [2]);
> $toCheck = ereg_replace ('C\/O', 'c/o ', $toCheck);
> $valid = true; break; } }
> 
> $postcode = strtoupper(str_replace(' ','',$postcode));if 
> (!checkPostcode($postcode) ) { $error['postcode'] = "Invalid Post Code, 
> please try again";}
> 
> if ($valid){return true;} else {return false;};}
> 
> Neišeina padaryti, kad įvestą pašto kodą įrašytu į DB. DB yra sukurta 
> lentelė „users“ su laukais „email, pass, first_name, last_name, city, 
> town, post_code, active, registration_date“. Pildant forma kitų formos 
> laukų duomenis įrašo į DB nes pvz. formos lauką „Town“ tikrinu tokiu būdu:
> 
> if (eregi ('[[:alpha:]]{2,30}$', stripslashes(trim($_POST['town'])))) {
>  $tw = escape_data($_POST['town']);
> } else {
>  $tw = FALSE;
>  echo '<p><font color="red" size="+1">Please enter your town!</font></p>';
> }
> Kintamąjį „$tw“ įrašau į užklausą:
> 
> $query = "INSERT INTO users (email, pass, first_name, last_name, city, 
> town, post_code, active, registration_date) VALUES ('$e', SHA('$p'), 
> '$fn', '$ln', '$ct', '$tw', '$a', NOW() )";
> 
> Ir viskas ok. Patarkit, kaip padaryti taip pat, kad įrašytų ir 
> „postcode“ lauko duomenis tokiu pat būdu?
> Dėkoju iš anksto.
> 
> 
> 
> 
> 
> "fliks" <pasto@nera.dd> wrote in message 
> news:h158mr$983$1@trimpas.omnitel.net...
>> Tame kodo gabaliuke tik parašiau, kaip galima būtų daryti formoj 
>> įvestos post code reikšmės pradžios tikrinimą su db esančiomis 
>> leidžiamomis post code pradžiomis, nes, kaip supratau, to ir klausei.
>>
>> Be abejo, dar prieš tikrinant su db, reiktų padaryti formoj įvesto 
>> post code formato tikrinimą, pvz, su regexp paterna, nes gali būti, 
>> kad į formą bus suvesta post code su teisinga pradžia (kuri yra db), o 
>> po jos gali sekti bilekokios raidės ar skaičiai ir pan (pvz, 
>> 'PO123abcs00').
>>
>> O dėl to Array, tai lentoje į tą post_code buvo saugomas masyvas, ne 
>> stringas. Greičiasiai php kode yra klaida.
>>
>>
>> Darius wrote:
>>> fliks: Bandau tavo koda, registracija atlieka, tik DB kur laukas 
>>> "post_code" vietoj pasto kodo iraso "Array". Ir pildant forma gali 
>>> rasyti bet ka, netikrina? Kame gali buti beda?
>>>
>>>
>>>
>>> "fliks" <pasto@nera.dd> wrote in message 
>>> news:h0pad9$hq$1@trimpas.omnitel.net...
>>>> P.S. Čia jei naudojama MySQL. Analogiškai galima tą patį parašyti ir 
>>>> kitokiai dbms.
>>>>
>>>>
>>>> fliks wrote:
>>>>> Kalbant apie DB, jei lenta yra post_code_tbl, o post code pradžios 
>>>>> yra stulpelyje post_code_beg (VARCHAR tipo), galima būtų rašyti taip:
>>>>>
>>>>>
>>>>> $form_post_code = isset($_POST['post_code']) ? 
>>>>> ltrim(rtrim($_POST['post_code'])) : '';
>>>>>
>>>>> if($form_post_code != '') {
>>>>>
>>>>>     $db_query = 'SELECT COUNT(post_code_beg) FROM post_code_tbl 
>>>>> WHERE post_code_beg = SUBSTRING(\'' . 
>>>>> mysql_real_escape_string($form_post_code, $link) . '\', 1, 
>>>>> LENGTH(post_code_beg))';
>>>>>
>>>>>     $result = mysql_query($db_query);
>>>>>
>>>>>     $row = mysql_fetch_row($result);
>>>>>
>>>>>     if($row[0] == 0){
>>>>>         // formoje post code reikšmė neatitiko nė vienos post code 
>>>>> pradžios
>>>>>     }
>>>>>
>>>>> } else {
>>>>>
>>>>>     echo 'Please enter post code!';
>>>>> }
>>>>>
>>>>>
>>>>> Reikia tikrinti, ar mysql_query() kažką (teisingai) grąžino ir pan. 
>>>>> Surašiau tik bendrai, kaip galima būtų daryti tą code tikrinimą.
>>>>>
>>>>>
>>>>> Darius wrote:
>>>>>> Cia idejau kokiu principu tikrinu litus formos laukus. Gal galetum 
>>>>>> konkreciau paaiskint kaip reiketu padaryti, kad tikrintu Post code 
>>>>>> lauka?Sakykim duomenys jau yra suvesti i DB.
>>>>>> Buciau begalo dekingas.
>>>>>>
>>>>>>
>>>>>> "RobeNebijaka" <nebijau@spamo.lt> wrote in message 
>>>>>> news:h0nfec$epq$1@trimpas.omnitel.net...
>>>>>>> Last name galima sutikrinti ir su regexpais, bet jei nori 
>>>>>>> tikrinti su kažkokiais duomenimis tai regexp tau nepadės su 
>>>>>>> regexp gali patikrinti nebent kad butu iš kelių raidžių ir 
>>>>>>> kažkiek skaičių.
>>>>>>>
>>>>>>> "RobeNebijaka" <nebijau@spamo.lt> wrote in message 
>>>>>>> news:h0nf6v$ej6$1@trimpas.omnitel.net...
>>>>>>>> Tai kaip ten yra ką nori tikrinti? Post Code ar Last Name?
>>>>>>>>
>>>>>>>> "Darius" <darzi@takas.lt> wrote in message 
>>>>>>>> news:h0lnkk$9t$1@trimpas.omnitel.net...
>>>>>>>>> Laukui "Last name" naudoju toki tikrinima:
>>>>>>>>>
>>>>>>>>> // Check for a last name.
>>>>>>>>> if (eregi ('^[[:alpha:]\.\' \-]{2,30}$', 
>>>>>>>>> stripslashes(trim($_POST['last_name'])))) {
>>>>>>>>>  $ln = escape_data($_POST['last_name']);
>>>>>>>>> } else {
>>>>>>>>>  $ln = FALSE;
>>>>>>>>>  echo '<p><font color="red" size="+1">Please enter your last 
>>>>>>>>> name!</font></p>';
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>> Sakykim sudejau kodus i DB, kokiu pavidalu reiketu uzduoti salyga?
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> "RobeNebijaka" <nebijau@spamo.lt> wrote in message 
>>>>>>>>> news:h0ln7j$v92$1@trimpas.omnitel.net...
>>>>>>>>>> Nepapraščiau sudėt į db ir paskui vieno select'o klausimas lieka?
>>>>>>>>>>
>>>>>>>>>> "Darius" <darzi@takas.lt> wrote in message 
>>>>>>>>>> news:h0lmqq$ugj$1@trimpas.omnitel.net...
>>>>>>>>>>> Sveiki,
>>>>>>>>>>>
>>>>>>>>>>> Reikia Jusu pagalbos. Padariau registracijos forma, visi 
>>>>>>>>>>> laukai tikrinami, kad butu uzpildyti. Patarkit kaip padaryti, 
>>>>>>>>>>> kad tikrintu "Post code" lauka, kai "Post code" prasideda is 
>>>>>>>>>>> keliu didziuju raidziu ir skaiciu, jie yra pastovus, 
>>>>>>>>>>> nesikeicia. Visi sie kodai yra atskirame faile, txt pavidale. 
>>>>>>>>>>> Kaip reiketu padaryti,kad zmogus iveda pasto coda, o sistema 
>>>>>>>>>>> patikrina ar atitinka kodo pradzia esanti sarase?
>>>>>>>>>>> Dekoju is anksto.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>
>>>
>