Re: [GENERAL-BG] problem s edna funkcijka

From: Date: Tue, 04 Jan 2005 17:34:40 +0000
Subject: Re: [GENERAL-BG] problem s edna funkcijka
References: 1  Groups: php.general.bg 
Request: Send a blank email to general-bg+get-225@lists.php.net to get a copy of this message
Бележки не по конкретният проблем, а по-скоро по стила и други грешки. Viktor Popov wrote: > az sam novak , zapochnah da se zanimavam s php predi sedmica. V momenta sam > v zastoj i ne moga da si obiasnia kakvo stava pri izpalnenieto na edna > funkcia. Nadiavam se, che shte mojete da mi pomognete.... > > Tova e chast ot stranica register.php , koiato razrabotvam. Izvarshva se > validacia, pri natiskaneto na submit button se izvikva sashtia php fail > register.php. Eto i php scripta v neia: > > <?php > include "script/functions.php"; > require 'script/common.inc'; Винаги използвай .php разширение за скриптовете си. Не залитай по разни .inc .txt или .boza. Сървърът не ги счита за PHP скриптове и ако някой ги поиска, ще му ги изпрати. Едва ли искаш да ти вземат паролата за базата данни по този начин. > $valid = TRUE; По подразбиране е хубаво да е false :) Така ако изпуснеш някоя проверка все пак няма да позволиш неправилна регистрация. > if (isset ($_POST['submit'])) { > foreach($_POST as $key=>$value) { > $$key = $value; > } Регистрираш глобални променливи, което е напълно излишно замърсяване на глобалният namespace, отделно по-късно ще се наложи да пишеш за всяка от тях някакъв код, вместо просто да си направиш итерация върху масивчето. > $valid = $fn = checkLength($fname, 2, 50); > $ln = checkLength($family, 2, 50); > $valid = $valid && $ln; > $cm = checkLength($company,0,50); > $valid = $valid && $cm; > $ml = checkLength($MOL,0,50); > $valid = $valid && $ml; > $dnum = checkLength($dannum,0,12); > $valid = $valid && $dnum; > $bst = checkLength($bulstat,0,12); > $valid = $valid && $bst; > $phn = checkLength($phone,3,20); > $valid = $valid && $phn; > $em = checkEmail($email); > $valid = $valid && $em; > $usr = checkLength($username,4,10); > $valid = $valid && $usr; > $ps = checkLength($password,4,16); > $valid = $valid && $ps; > $ps2 = checkLength($password2,4,16); > $valid = $valid && $ps2; > $ps2 = $password == $password2; > $valid = $valid && $ps2; > $adr = checkLength($Addr,3,70); > $valid = $valid && $adr; > $cty = checkLength($City,2,50); > $valid = $valid && $cty; > $zp = checkLength($zipcode,2,10); > $valid = $valid && $zp; Много лесно може да стане грешка с тези игри, който играеш около $valid. Защо просто не изредиш всички условия в един if (x && y && z) $valid = true; > if ($valid) { > //-----------------------------------------CHECK > THIS------------------------------- > doReg($fname,$family,$company, $MOL, $dannum, $bulstat, > $phone, $email, $username, $password, $payment, $maillist, $Addr, $City, > $zipcode,$Country, $shippingName, $shippingFamily, $shippingphone, > $shippingAddr, > $shippingcity, $shippingzipcode, $shippingCountry); Ето тук масивчето за което говорих в началото би било удобно. > exit; > > } > } else { > $fn = $ln = $cm = $ml = $dnum = $bst = $phn = $em = $usr = $ps = $ps2 = > $adr = $cty = $zp = TRUE; > $fname = $family = $company = $MOL = $dannum = $bulstat = $phone = > $email = $username = $password = $password2 = $Addr = $City = $zipcode = ''; > } > > ?> > > Funkciata doReg se namira v faila functions.php. Tq bi triabvalo da > insert-va v tablica "users", no ne go pravi. i ne moga da razbera zashto. > Kogato opitah na nejno miasto da izpolzvam mysql_pconnect(...) i > mysql_db_query(...) vsichko se poluchi. Eto i deklaraciata na doReg() vav > functions.php: > > function doReg($fname1="",$family1="",$company1="", > $MOL1="", $dannum1="", > $bulstat1="", $phone1="", $email1="", $username1="", > $password1="", > $payment1="", $maillist1="", $Addr1="", $City1="", > $zipcode1="", > $Country1="", $shippingName1="", $shippingFamily1="", > $shippingphone1="", > $shippingAddr1="", $shippingcity1="", $shippingzipcode1="", > $shippingCountry1="") Защо ги инициализираш? Така ги правиш незадъ;жите;ни за подаване към функцията. Като гледам колко са на брой, такова объркване може да стане кой, кой е по ред, че да се блъскаш 2 часа с някоя дребна грешка. > { > > mysql_pconnect ($DB_SERVER, $DB_LOGIN, $DB_PASSWORD); > > > mysql_db_query($DB, "insert into users(name,family,company, MOL, taxnum, > bulstat, phone, email, username, password, payment, maillist, Addr, City, > zipcode, Country, shippingName, shippingFamily, shippingphone, shippingAddr, > shippingcity, shippingzipcode, shippingCountry) > values('$fname1','$family1','$company1', '$MOL1', > '$dannum1', '$bulstat1', > '$phone1', '$email1', '$username1', '$password1', > '$payment1', '$maillist1', > '$Addr1', '$City1', '$zipcode1', > '$Country1','$shippingName1','$shippingFamily1', > '$shippingphone1','$shippingAddr1', '$shippingcity1', > '$shippingzipcode1', > '$shippingCountry1')"); Ух, ох :-( Класически SQL Injection. Не прави така. Всеки параметър, който подаваш към базата данни трябва да бъде проверен и изчистен от "лошите" символи. Виж addslashes() mysql_escape() ??? и като цяло поразгледай разултатите от http://www.google.com/search?hl=bg&q=sql+injection http://www.php.net/manual/en/security.php http://www.securiteam.com/securityreviews/5DP0N1P76E.html Не разчитай magic_quotes_gpc да работят. Те не са начина да си сигурен че в подадените данни няма кофти работи. > } > > Mojete li da mi kajete zashto ne moje da zaraboti? -- Georgi Chorbadzhiyski http://georgi.unixsol.org/

« previous php.general.bg (#225) next »