Tema: Re: Gal galit kas padet
Autorius: Darius
Data: 2009-06-17 12:14:31
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.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>
>>