| Posledná návšteva Štv 23.05.13 17:54 |
Aktuálny čas je Štv 23.05.13 17:54
|
| Autor |
Správa |
stenley
|
Napísal: Štv 14.08.08 20:49 Predmet príspevku: Užitočné a často používané skripty
|
|
|
|
 |
| Moderátor |
 |
Registrovaný: 27.07.07 Príspevky: 3998 Bydlisko: Bratislava
|
V tejto teme mozte zverejnovat rozne PHP/ASP skripty, ktore su podla vas uzitocne a mozu pomoct ostatnym uzivatelom tohto fora pri tvorbe webovych aplikacii. Skripty by mali byt univerzalne stavane, cize by mali zabezpecovat viacero funkcionalit (ak je to mozne). V najlepsom pripade by mali mat podobu funkcii pripadne tried. Pravidla:1. Kazdy novy prispevok so skriptom MUSI obsahovat nasledujuce polozky: - strucny a VYSTIZNY nazov- autor skriptu pripadne zdroj - poziadavky na beh skriptu (minimalna verzia PHP/ASP, potrebne kniznice a pod.) - ak nie su zname ziadne zvlastne poziadavky, netreba uvadzat - podrobny popis (funkcionalita skriptu) - samotny skript s vysvetlujucim komentarom k jednotlivym castiam - popis, ako dany skript pouzit + konkretne priklady pouzitia2. Pridavajte len funkcne a vami odskusane skripty! 3. Nezabudnite na prehladne formatovanie zdrojoveho kodu 4. Ak sa vyskytnu v teme viacere skripty s podobnym zameranim, ponechaju sa len tie, ktore su prehladnejsie, jednoduchsie, rychlejsie ci univerzalnejsie (ostatne sa vymazu bez upozornenia) 5. Kvoli zachovaniu prehladnosti, neprispievajte otazkami ci poznamkami do tejto temy. V pripade, ze sa chcete ku ktoremukolvek skriptu nieco spytat, kontaktujte autora daneho prispevku alebo napiste do http://www.pcforum.sk/tema-pre-casto-pouzivane-skripty-vt45358.html. Nove verzie skriptov:31.12.2012 - Kontrola minimalneho poctu pismen, cislic a specialnych znakov v retazci (stenley) 20.08.2012 - Predpoved pocasia (Google) (stenley) 05.04.2011 - Kalendar (stenley) 21.02.2010 - PHP Template Class (Tominator) 03.12.2009 - Cenzura (emer) 29.09.2009 - Je subor obrazok? (Snacker) 28.08.2009 - Sprava URL adresy (stenley) Zoznam zverejnenych skriptov:Kontrola minimalneho poctu pismen, cislic a specialnych znakov v retazciVyber prvych x slov z retazcaFunkcia na generovanie pekných urlOdosielanie súborov na serverKonfiguracna trieda (singleton)Vygenerovanie náhodného reťazcaOseknutie reťazca po medzereScript pre upload s funkciou povolenia pripon (whitelist)Export dat z MySQL do .sql súboruSkopirovanie celeho adresara na FTPExport dat z MySQL do XMLKalendarPredpoved pocasia (Google)Zistenie velkosti priecinkaVypis obsahu adresaraJe subor obrazok?Najdenie pozicie vyskytu podretazca v retazciPHP Template ClassVkladanie retazca na urcitu poziciu druheho retazcaZmena velkosti obrazkaSprava URL adresy 2 ("pekne url adresy")StrankovanieJednoduchy nakupny kosik cez SESSIONPocet pracovnych dni medzi 2 datumamiZistenie skutocnej IP adresySprava URL adresyRegistracia s aktivaciou cez e-mailCenzuraKonverzia BBCode na HTML tagyTrieda pre pracu so SESSION bez pouzitia databazyGraficke znazornenie poctu pristupovTrieda pre pracu s MySQL databazou (zakladna)Validacia emailovej adresyHromadne osetrenie vstupov (zakladne)Odstranenie diakritiky z textu
_________________ Desktop: CPU: AMD Athlon64 3000+ | MB: Biostar K8T890-A9 | VGA: NVIDIA GeForce 6200 LE 256MB | RAM: 2x 1GB A-DATA DDR 400 MHz Dual Kit | HDD: WD Caviar Blue 320GB | DVD: LG GSA-H10N | Keyboard: Chicony KU-0420 Silver/Black | Mouse: Logitech RX1000 | Zdroj: Corsair CX400 400W | CASE: DELUX DLC-MD370 Black | LCD: 20" Samsung 206BW | Repro: Teac XL-20 Notebook: ACER Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB / Intel HD Graphics | RAM: 4GB DDR3 1066 MHz | HDD: 640GB
Naposledy upravil stenley dňa Pon 20.08.12 21:59, celkovo upravené 48
|
|
| Hore |
|
 |
stenley
|
Napísal: Pia 15.08.08 11:13 Predmet príspevku: Re: Užitočné a často používané skripty
|
|
|
|
 |
| Moderátor |
 |
Registrovaný: 27.07.07 Príspevky: 3998 Bydlisko: Bratislava
|
Odstranenie diakritiky z textu
Autor: stenley
Popis:
Citácia: string odstranDiakritiku ( string $str )
Tato funkcia odstrani diakritiku zo str.
Premenna $nodia obsahuje pole pismen bez diakritiky, ktorymi sa maju nahradit prislusne pismena v premennej $dia. Cize, ak sa v str nachadza pismeno "á", nahradi sa pismenom "a" a pod. V pripade, ze potrebujete pridat dalsiu konverziu pismen, treba doplnit do $dia pismeno s diakritikou a do $nodia prislusne pismeno bez diakritiky (v rovnakom poradi).
Kód: <?php /** * odstranDiakritiku() * * Odstranenie diakritiky z textu * * @author stenley <stenley@webdev.sk> * @version 1.1 */
function odstranDiakritiku($str) { //pismena s diakritikou $dia = array('á', 'ä', 'č', 'ď', 'é', 'ě', 'í', 'ľ', 'ĺ', 'ň', 'ó', 'ô', 'ŕ', 'ř', 'š', 'ť', 'ú', 'ů', 'ý', 'ž', 'Á', 'Ä', 'Č', 'Ď', 'É', 'Í', 'Ľ', 'Ĺ', 'Ň', 'Ó', 'Ô', 'Ř', 'Š', 'Ť', 'Ú', 'Ý', 'Ž');
//prislusne pismena bez diakritiky $nodia = array('a', 'a', 'c', 'd', 'e', 'e', 'i', 'l', 'l', 'n', 'o', 'o', 'r', 'r', 's', 't', 'u', 'u', 'y', 'z', 'A', 'A', 'C', 'D', 'E', 'I', 'L', 'L', 'N', 'O', 'O', 'R', 'S', 'T', 'U', 'Y', 'Z'); return str_replace($dia, $nodia, $str); } ?> Priklad pouzitia: Kód: $str = "Líščí chvostík"; echo odstranDiakritiku($str); //vypise: Lisci chvostik
_________________ Desktop: CPU: AMD Athlon64 3000+ | MB: Biostar K8T890-A9 | VGA: NVIDIA GeForce 6200 LE 256MB | RAM: 2x 1GB A-DATA DDR 400 MHz Dual Kit | HDD: WD Caviar Blue 320GB | DVD: LG GSA-H10N | Keyboard: Chicony KU-0420 Silver/Black | Mouse: Logitech RX1000 | Zdroj: Corsair CX400 400W | CASE: DELUX DLC-MD370 Black | LCD: 20" Samsung 206BW | Repro: Teac XL-20 Notebook: ACER Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB / Intel HD Graphics | RAM: 4GB DDR3 1066 MHz | HDD: 640GB
Naposledy upravil stenley dňa Str 19.01.11 20:47, celkovo upravené 7
|
|
| Hore |
|
 |
stenley
|
Napísal: Sob 16.08.08 23:27 Predmet príspevku: Re: Užitočné a často používané skripty
|
|
|
|
 |
| Moderátor |
 |
Registrovaný: 27.07.07 Príspevky: 3998 Bydlisko: Bratislava
|
Hromadne osetrenie vstupov (zakladne)
Autor: stenley
Poziadavky: PHP5
Popis:
Citácia: void safety ( mixed &$value )
Funkcia sluzi najma na zakladne osetrenie vsetkych hodnot v $_GET, $_POST a pod.
Argumentom funkcie safety() je retazec alebo pole hodnot, ktore je potrebne osetrit (zabezpecit). Upravu jednotlivych hodnot vykonava funkcia safetyValue(). V tejto verzii sa v hodnotach nahradia vsetky specialne znaky za prislusne HTML entity. Podla potreby je mozne funkciu safetyValue() doplnit o dalsie bezpecnostne upravy, napr. odstranenie niektorych neziadanych znakov alebo HTML tagov.
Kód: <?php /** * safety(), safetyValue() * * Hromadne osetrenie vstupov (zakladne) * * @author stenley <stenley@webdev.sk> * @version 1.3 */
function safety(&$value) { if(is_array($value)) { array_walk_recursive($value,"safetyValue"); } else { safetyValue($value); } }
function safetyValue(&$value) { if(get_magic_quotes_gpc()) { $value = stripslashes($value); }
$value = htmlspecialchars($value); } ?> Priklady pouzitia: Kód: //upravi vsetky hodnoty v $_GET a $_POST safety($_GET); safety($_POST);
//upravi hodnotu premennej $str $str = '<a href="">odkaz</a>'; safety($str); echo $str; //vysledok: <a href="">odkaz</a>
_________________ Desktop: CPU: AMD Athlon64 3000+ | MB: Biostar K8T890-A9 | VGA: NVIDIA GeForce 6200 LE 256MB | RAM: 2x 1GB A-DATA DDR 400 MHz Dual Kit | HDD: WD Caviar Blue 320GB | DVD: LG GSA-H10N | Keyboard: Chicony KU-0420 Silver/Black | Mouse: Logitech RX1000 | Zdroj: Corsair CX400 400W | CASE: DELUX DLC-MD370 Black | LCD: 20" Samsung 206BW | Repro: Teac XL-20 Notebook: ACER Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB / Intel HD Graphics | RAM: 4GB DDR3 1066 MHz | HDD: 640GB
Naposledy upravil stenley dňa Str 19.01.11 20:47, celkovo upravené 4
|
|
| Hore |
|
 |
stenley
|
Napísal: Sob 16.08.08 23:53 Predmet príspevku: Re: Užitočné a často používané skripty
|
|
|
|
 |
| Moderátor |
 |
Registrovaný: 27.07.07 Príspevky: 3998 Bydlisko: Bratislava
|
Validacia emailovej adresy
Autor: Markus Sipilä (regularne vyrazy), stenley (zvysok  )
Popis:
Citácia: bool isValidEmail ( string $email )
Zisti, ci ma zadany email spravny tvar.
Ak ma email spravny format, funkcia vracia TRUE, v opacnom pripade FALSE.
Kód: <?php /** * isValidEmail() * * Validacia emailovej adresy * * @author stenley <stenley@webdev.sk> * @version 1.1 */
function isValidEmail($email) { $regexp1 = "^[a-z0-9_\+-]+(\.[a-z0-9_\+-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*\.([a-z]{2,4})$"; $regexp2 = "^[a-z0-9,!#\$%&'\*\+/=\?\^_`\{\|}~-]+(\.[a-z0-9,!#\$%&'\*\+/=\?\^_`\{\|}~-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*\.([a-z]{2,})$";
//skontroluje dovolenu dlzku jednotlivych casti emailovej adresy if(!ereg("^[^@]{1,64}@[^@]{1,255}$",$email)) { return false; } return (eregi($regexp1,$email) || eregi($regexp2,$email)) ? true : false; } ?> Priklad pouzitia: Kód: $email = "stenley@pcforum.sk"; if(isValidEmail($email)) { echo "Emailova adresa ma spravny tvar."; } else { echo "Chybna emailova adresa!"; }
_________________ Desktop: CPU: AMD Athlon64 3000+ | MB: Biostar K8T890-A9 | VGA: NVIDIA GeForce 6200 LE 256MB | RAM: 2x 1GB A-DATA DDR 400 MHz Dual Kit | HDD: WD Caviar Blue 320GB | DVD: LG GSA-H10N | Keyboard: Chicony KU-0420 Silver/Black | Mouse: Logitech RX1000 | Zdroj: Corsair CX400 400W | CASE: DELUX DLC-MD370 Black | LCD: 20" Samsung 206BW | Repro: Teac XL-20 Notebook: ACER Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB / Intel HD Graphics | RAM: 4GB DDR3 1066 MHz | HDD: 640GB
Naposledy upravil stenley dňa Str 19.01.11 20:48, celkovo upravené 2
|
|
| Hore |
|
 |
stenley
|
Napísal: Uto 19.08.08 7:23 Predmet príspevku: Re: Užitočné a často používané skripty
|
|
|
|
 |
| Moderátor |
 |
Registrovaný: 27.07.07 Príspevky: 3998 Bydlisko: Bratislava
|
Trieda pre pracu s MySQL databazou (zakladna)
Autor: stenley
Popis:
Nasledujuci skript sluzi na plnohodnotnu pracu s mysql databazou. Umoznuje jednoduchsie pouzivat vsetky najcastejsie pouzivane vstavane php funkcie pre pracu s mysql, s ktorymi ste sa pri praci urcite uz stretli. Narozdiel od mysqli je mozne tento kod pouzivat aj s PHP4. Skript pozostava z 2 tried - DB a DB_Statement. Trieda DB sluzi hlavne na pripojenie k db serveru, nastavenie kodovania (atd) a DB_Statement na pracu s touto databazou, tzn. vykonavanie roznych dopytov, nasledne ziskavanie vysledku v pouzitelnom tvare pre dalsie spracovanie a pod. Nasledujuci skript je vhodne ulozit do zvlast suboru a potom includovat na potrebne miesto:
Kód: <?php /** * DB * * Trieda pre pracu s MySQL databazou (zakladna) * * @author stenley <stenley@webdev.sk> * @version 1.2 */
class DB { private $DB_HOST; //host private $DB_USER; //prihlasovacie meno private $DB_PASS; //heslo private $DB_NAME; //meno databazy private $DB_SOCKET; //soket aj s dvojbodkou na zaciatku private $conn; public function DB($dbhost, $dbuser, $dbpass, $dbname, $dbsocket='') { $this->DB_HOST = $dbhost; $this->DB_USER = $dbuser; $this->DB_PASS = $dbpass; $this->DB_NAME = $dbname; $this->DB_SOCKET = $dbsocket; $this->connect(); } //pripojenie k MySQL a databaze protected function connect() { $this->conn = @mysql_connect($this->DB_HOST.$this->DB_SOCKET, $this->DB_USER, $this->DB_PASS); if(!is_resource($this->conn)) { DB::error("Nepodarilo sa pripojiť k databázovému serveru MySQL!"); } if(!@mysql_select_db($this->DB_NAME, $this->conn)) { DB::error("Nepodarilo sa pripojiť k databáze ".$this->DB_NAME."!"); } } public function prepare($sql) { if(!$this->conn) { $this->connect(); } return new DB_Statement($sql, $this->conn); } //uzavretie spojenia so serverom public function close() { return @mysql_close($this->conn); } //nastavenie kodovania public function set_charset($charset='utf8') { @mysql_query("SET character set ".$charset); @mysql_query("SET character_set_results=".$charset); @mysql_query("SET character_set_connection=".$charset); } //uvolnenie dat z pamati public function free_result($result) { return @mysql_free_result($result); } //detekcia chyby public static function error($errMsg='') { if(empty($errMsg) && !is_null($this->conn)) { die(mysql_errno($this->conn).": ".mysql_error($this->conn)); } die($errMsg); } }
class DB_Statement { private $conn; private $result; private $sql; private $sql_executed; public $counter = 0; //"cislovanie" vysledkov public function DB_Statement($sql, $conn) { $this->sql = $sql; $this->conn = $conn; if(!is_resource($this->conn)) { DB::error("CHYBA!"); } } //vykonanie sql poziadavky public function execute() { $binds = array(); $arrBinds = func_get_args(); foreach($arrBinds as $index => $name) { $binds[$index+1] = $name; } $this->sql_executed = $this->sql; foreach($binds as $ph => $pv) { $this->sql_executed = str_replace(":$ph", "'".mysql_escape_string($pv)."'", $this->sql_executed); $this->sql_executed = str_replace("?$ph", mysql_escape_string($pv), $this->sql_executed); } $this->result = @mysql_query($this->sql_executed, $this->conn); if(!$this->result) { DB::error("Nastala chyba pri vykonávaní sql požiadavky!"); } return $this->result; } //vrati vykonanu sql poziadavku public function getQuery() { return $this->sql_executed; } //vysledok v asociativnom poli public function fetch_assoc() { $this->counter++; return @mysql_fetch_assoc($this->result); } //vysledok v klasickom poli public function fetch_row() { $this->counter++; return @mysql_fetch_row($this->result); } //pocet vratenych zaznamov public function num_rows() { return @mysql_num_rows($this->result); } //pocet ovplyvnenych zaznamov poslednym SQL prikazom public function affected_rows() { return @mysql_affected_rows($this->conn); } //zabezpecenie pre pouzitie v SQL prikaze public function safety($string) { $string = htmlentities($string); if(get_magic_quotes_gpc()) { $string = stripslashes($value); } if(function_exists('mysql_real_escape_string')) { return mysql_real_escape_string($string); } return mysql_escape_string($string); } } ?> Priklad pouzitia: Majme tabulku uzivatelov, kde su o nich ulozene rozne informacie - mena, kontakty, vek, oblubena farba a pod. Chceme ziskat zoznam uzivatelov, ktory maju uvedenu nejaku emailovu adresu: Kód: require_once("mysql.class.php");
//pripojenie k mysql a konkretnej databaze $db = new DB("localhost","username","password","dbname");
//nastavuje character set, character_set_results a character_set_connection na utf8 $db->set_charset();
//priprava dotazu $res = $db->prepare("SELECT * FROM `users_info` WHERE NOT ISNULL(`email`) ORDER BY `id`");
//vykonanie dotazu $res->execute();
//spracovavanie vysledkov while($user_info = $res->fetch_assoc()) { echo $res->counter.'. '.$user_info['name'].' - '.$user_info['email'].'<br>'; }
//uzatvorenie spojenia s mysql $db->close();
Vysledok: ========= 1. Peter Beladicky - beladicky.p[kapor]gmail.com 2. Lubos Zeleny - zelenac[kapor]yahoo.com 3. Frantisek Sedivy - fero.sedivy[kapor]centrum.sk 4. Ladislav Velky - master[kapor]gmail.com
Ked uzpozname uzivatelov a ich emailove adresy, chceme zistit hodnotu id uzivatelov Lubos Zeleny (zelenac[kapor]yahoo.com) a Ladislav Velky (master[kapor]gmail.com). Bude to podobny skript, len s mensimi obmenami: Kód: require_once("mysql.class.php");
$db = new DB("localhost","username","password","dbname"); $db->set_charset();
//namiesto :1 a :2 sa doplnia konkretne hodnoty parametrov z $res->execute() $res = $db->prepare("SELECT id, name FROM `users_info` WHERE `name`=:1 AND `email`=:2 ORDER BY `id`");
//vykonanie sql prikazu s konkretnymi hodnotami $res->execute("Lubos Zeleny","zelenac[kapor]yahoo.com"); while($user_info = $res->fetch_assoc()) { echo $user_info['name'].', id je '.$user_info['id'].'<br>'; }
//vykonanie sql prikazu s inymi konkretnymi hodnotami $res->execute("Ladislav Velky","master[kapor]gmail.com"); while($user_info = $res->fetch_assoc()) { echo $user_info['name'].', id je '.$user_info['id'].'<br>'; }
$db->close();
Vysledok: ========= Lubos Zeleny, id je 2 Ladislav Velky, id je 4
V zasade, ak sa ma hodnota obklopit jednoduchymi uvodzovkami, pouzite v prepare() :1, :2 ..., ak je hodnota cislo alebo len chcete vlozit do sql nejaku hodnotu bez jednoduchych uvodzoviek (napr. pri LIKE), tak pouzite ?1, ?2 ...
_________________ Desktop: CPU: AMD Athlon64 3000+ | MB: Biostar K8T890-A9 | VGA: NVIDIA GeForce 6200 LE 256MB | RAM: 2x 1GB A-DATA DDR 400 MHz Dual Kit | HDD: WD Caviar Blue 320GB | DVD: LG GSA-H10N | Keyboard: Chicony KU-0420 Silver/Black | Mouse: Logitech RX1000 | Zdroj: Corsair CX400 400W | CASE: DELUX DLC-MD370 Black | LCD: 20" Samsung 206BW | Repro: Teac XL-20 Notebook: ACER Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB / Intel HD Graphics | RAM: 4GB DDR3 1066 MHz | HDD: 640GB
Naposledy upravil stenley dňa Str 19.01.11 20:48, celkovo upravené 2
|
|
| Hore |
|
 |
stenley
|
Napísal: Str 20.08.08 16:27 Predmet príspevku: Re: Užitočné a často používané skripty
|
|
|
|
 |
| Moderátor |
 |
Registrovaný: 27.07.07 Príspevky: 3998 Bydlisko: Bratislava
|
Graficke znazornenie poctu pristupov
Autor: stenley
Poziadavky: GD kniznica
Popis:
Zaznamenavate si pocet pristupov na vasu stranku a chcete zobrazit toto cislo na webe vo forme obrazka? Nie je nic jednoduchsie, ako pouzit nasledujuci skript  Umoznuje nastavit farbu pozadia obrazka, pisma, "oddelovaca" cislis, velkost pisma, minimalny pocet zobrazovanych cislis a format vysledneho obrazku - gif (default), jpeg, png.
Kód: <?php /** * GZPP * * Graficke znazornenie poctu pristupov * * @author stenley <stenley@webdev.sk> * @version 1.0 */
class GZPP { //pocet pristupov public $pristupy;
//farba podkladu public $bgColor; //farba textu public $fontColor = "#FFFFFF"; //farba oddelovaca cislic public $delColor;
//veldkost pisma public $fontSize = 5; //minimalny pocet cislis na obrazku public $minDigits = 5; //vystupny format obrazku public $output_format; public function GZPP($pristupy) { $this->pristupy = $pristupy;
if(strlen($pristupy)>$this->minDigits) { $this->minDigits = strlen($pristupy); } } //vygeneruje obrazok public function generate() { $this->setColors(); $this->setFormat(); header("Expires: ".GMDate("D, d M Y H:i:s")." GMT"); header("Content-type: image/".$this->output_format);
$decPosWidth = imagefontwidth($this->fontSize)+6; $decPosHeight = imagefontheight($this->fontSize)+4; $img = imagecreate($decPosWidth*$this->minDigits, $decPosHeight); $bgColor = imagecolorallocate($img, $this->bgColor['r'], $this->bgColor['g'], $this->bgColor['b']); $fontColor = imagecolorallocate($img, $this->fontColor['r'], $this->fontColor['g'], $this->fontColor['b']); $delColor = imagecolorallocate($img, $this->delColor['r'], $this->delColor['g'], $this->delColor['b']);
for($i=$this->minDigits,$z=1; $i>=1; $i--) { $valueDecPos = 0;
if($i<=strlen($this->pristupy)) { $valueDecPos = substr($this->pristupy, -$i, 1); }
imagestring($img, $this->fontSize, $decPosWidth*$z-2-imagefontwidth($this->fontSize), 2, (int)$valueDecPos, $fontColor);
if($i!=1) { imageline($img, $decPosWidth*$z, 0, $decPosWidth*$z, $decPosHeight, $delColor); }
$z++; } eval("image".$this->output_format."(\$img);"); imagedestroy($img); } //nastavi a vypocita potrebne zlozky farieb private function setColors() { if(empty($this->delColor)) { $this->delColor = $this->bgColor; } $this->bgColor = $this->hex2rgb($this->bgColor); $this->fontColor = $this->hex2rgb($this->fontColor); $this->delColor = $this->hex2rgb($this->delColor); } //nastavi spravny format vystupneho obrazku private function setFormat() { $this->output_format = eregi("gif|jpeg|png",$this->output_format) ? $this->output_format : "gif"; } //vypocita RGB z HEX private function hex2rgb($hex) { $int = hexdec($hex); return array("r" => 0xFF&($int>>0x10), "g" => 0xFF&($int>>0x8), "b" => 0xFF&$int); } } ?> Priklady pouzitia: Kód: $pocet_pritupov = 12345;
$counter = new GZPP($pocet_pritupov); $counter->generate(); Vysledok:  Kód: $pocet_pristupov = 12345;
$counter = new GZPP($pocet_pristupov); $counter->bgColor = "#5c81b1"; $counter->fontColor = "#ecf0f6"; $counter->minDigits = 7; $counter->generate(); Vysledok:  Ako dat vysledny obrazok na stranku: Kód: <img src="gzpp.php" alt="Pocet pristupov" title="Pocet pristupov">
Tento priklad predpoklada, ze v subore gzpp.php je ulozena trieda aj s jej pouzitim v zmysle predchadzajucich ukazok.
_________________ Desktop: CPU: AMD Athlon64 3000+ | MB: Biostar K8T890-A9 | VGA: NVIDIA GeForce 6200 LE 256MB | RAM: 2x 1GB A-DATA DDR 400 MHz Dual Kit | HDD: WD Caviar Blue 320GB | DVD: LG GSA-H10N | Keyboard: Chicony KU-0420 Silver/Black | Mouse: Logitech RX1000 | Zdroj: Corsair CX400 400W | CASE: DELUX DLC-MD370 Black | LCD: 20" Samsung 206BW | Repro: Teac XL-20 Notebook: ACER Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB / Intel HD Graphics | RAM: 4GB DDR3 1066 MHz | HDD: 640GB
Naposledy upravil stenley dňa Str 19.01.11 20:48, celkovo upravené 2
|
|
| Hore |
|
 |
stenley
|
Napísal: Štv 21.08.08 6:47 Predmet príspevku: Re: Užitočné a často používané skripty
|
|
|
|
 |
| Moderátor |
 |
Registrovaný: 27.07.07 Príspevky: 3998 Bydlisko: Bratislava
|
Trieda pre pracu so SESSION bez pouzitia databazy
Autor: stenley
Poziadavky: PHP5
Popis:
Nasledujuca trieda sluzi na jednoduchsiu a plnohodnotnu pracu so SESSION. Umoznuje pracovat s hodnotami session premennych (pridavanie, editovanie, mazanie), zistit, ci nejaka session premenna existuje, vratit cele pole session ci session id...
Kód: <?php /** * Session * * Trieda pre pracu so SESSION bez pouzitia databazy * * @author stenley <stenley@webdev.sk> * @version 1.0 */
class Session { private $session; public function __construct() { $this->startSession(); } //Nastavi session premennu private function __set($name,$value) { if(array_key_exists($name,$this->session)) { $this->session[$name] = $value; } else { $this->addSessionVar($name,$value); } } //Vrati hodnotu session premennej private function __get($name) { if(array_key_exists($name,$this->session)) { return $this->session[$name]; } else { return false; } } //Inicializuje session private function startSession() { session_start(); $this->session = &$_SESSION; } //Prida novu session premennu a nastavi jej hodnotu private function addSessionVar($name,$value) { $this->session[$name] = $value; } //Vrati pole session public function getSession() { return $this->session; } //Vrati session id public function getSessionID() { return session_id(); } //Vymaze session premennu public function unsetSessionVar($name) { if(isset($this->session[$name])) { unset($this->session[$name]); } } //Zisti, ci uz dana session premenna existuje public function issetSession($name) { return isset($this->session[$name]); } //Odstrani session public function destroySession() { foreach($this->session as $item) { $this->unsetSessionVar($item); } session_destroy(); } } ?> Priklad pouzitia: Kód: //subor s triedou Session require_once("session.class.php");
$sess = new Session();
//nastavenie hodnoty premennej (znamena $_SESSION['premenna'] = "hodnota") $sess->premenna = "hodnota";
if($sess->issetSession("premenna")) { echo 'premenna existuje a obsahuje: '.$sess->premenna; } else { echo 'premenna neexistuje'; }
Vysledok: ========= premenna existuje a obsahuje: hodnota
_________________ Desktop: CPU: AMD Athlon64 3000+ | MB: Biostar K8T890-A9 | VGA: NVIDIA GeForce 6200 LE 256MB | RAM: 2x 1GB A-DATA DDR 400 MHz Dual Kit | HDD: WD Caviar Blue 320GB | DVD: LG GSA-H10N | Keyboard: Chicony KU-0420 Silver/Black | Mouse: Logitech RX1000 | Zdroj: Corsair CX400 400W | CASE: DELUX DLC-MD370 Black | LCD: 20" Samsung 206BW | Repro: Teac XL-20 Notebook: ACER Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB / Intel HD Graphics | RAM: 4GB DDR3 1066 MHz | HDD: 640GB
Naposledy upravil stenley dňa Str 19.01.11 20:48, celkovo upravené 2
|
|
| Hore |
|
 |
Triminka
|
Napísal: Pia 22.08.08 8:55 Predmet príspevku: Re: Užitočné a často používané skripty
|
|
|
|
 |
| Užívateľ |
 |
Registrovaný: 06.03.08 Príspevky: 1735 Bydlisko: triminka@spambot
|
Konverzia BBCode na HTML tagy
Autor: Triminka
Popis:
Citácia: string bbcode ( string $str )
Tato funkcia odstrani nadefinovane BBCode znacky a nasledne ich zameni za normalne HTML tagy v retazci str.
Premenna $BBCode obsahuje definovane regexpy obsahujuce BBCode tagy a nimi obkolesene retazce, pricom premenna $HTMLTag obsahuje znacky HTML ktorymi sa prepisu BB tagy. Novy BBCode je mozne jednoducho pridat tak, ze pridame regularny vyraz do pola $BBCode a pridame taktiez to, za co sa ma zamenit do $HTMLTag.
Kód: function bbcode($str) { $BBCode = array("/\[b\](.*)\[\/b\]/isU", "/\[u\](.*)\[\/u\]/isU", "/\[i\](.*)\[\/i\]/isU", "/\[url\=(.*)\](.*)\[\/url\]/isU"); $BBTag = array("<strong>$1</strong>", "<u>$1</u>", "<i>$1</i>", "<a href=\"$1\" target=\"_blank\" rel=\"nofollow\">$2</a>");
$str = preg_replace($BBCode, $BBTag, $str); return $str; }
Priklad pouzitia: Kód: $str = "[b]Macko[/b][i]pes[/i] [u]ma[/u] [url=www.dvenohy.com]dve nohy[/url]"; echo bbcode($str);
Vypise to Mackopes ma dve nohy.
//Na formatovanie zabudnite ked to pisem v okne noveho prispevku kde sa prekvapivo tabulator neda moc pouzivat
Tento skript plne spada pod licenciu BSD systemov.
//upravene formatovanie a nazov skriptu (stenley)
// Pre nechapavejsich: v regexpoch (.*?) nepouzivam preto, lebo nevidim dovod volat regexp engine zakazdym, ked niekto napise [b ][/b] milion krat za sebou, zato pri odkaze sa to moze hodit =p
Ďuri 27.2.2010: Pridany U modifikator, nech to funguje.
_________________ Redeem the game of law! Despair the Billy, here are the morals! Come, relentless eraser rain, relentless eraser rain...
|
|
| Hore |
|
 |
toma-mato
|
Napísal: Sob 30.08.08 20:02 Predmet príspevku:
|
|
|
|
 |
| Užívateľ |
Registrovaný: 23.12.07 Príspevky: 98 Bydlisko: Svidnik
|
Cenzura
Autor: emer
Popis: Cenzura vybranych slov v texte
Kód: function cenzuruj($text, $cenzura, $rozsirzleslova = 0, $rozdelovac = ','){ $zleslova = array('zleslovo1', 'zleslovo2'); if($rozsirzleslova !== 0){ if(is_array($rozsirzleslova)){ $zleslova = array_merge($zleslova, $rozsirzleslova); }else{ $zleslova = array_merge($zleslova, (array)explode($rozdelovac, $rozsirzleslova)); } } return str_replace(array_values($zleslova), $cenzura, $text); } Priklady pouzitia: Kód: $text = 'Toto je zleslovo1, ktore zacenzurujeme. A toto je zleslovo2, ktore tiez zacenzurujeme. Cenzure neunikne ani rozsirenezleslovo.'; echo cenzuruj($text, '/cenzura/', 'rozsirenezleslovo'); Kód: $text = 'Toto je zleslovo1, ktore zacenzurujeme. A toto je zleslovo2, ktore tiez zacenzurujeme. Cenzure neunikne ani rozsirenezleslovo.'; echo cenzuruj($text, '/cenzura/', array('rozsirenezleslovo'));
//zmeneny povodny skript za univerzalnejsi (stenley)
_________________ ... nebite ma ja sa to raz naucim....
|
|
| Hore |
|
 |
Blackshadow
|
Napísal: Uto 09.09.08 13:46 Predmet príspevku:
|
|
|
|
 |
| Užívateľ |
 |
Registrovaný: 09.09.07 Príspevky: 3156 Bydlisko: Nové Zámky
|
Registracia s aktivaciou cez e-mail
Autor: Blackshadow
Popis:
Citácia: Registracny formular, ktory posiela e-mail o uspesnej registracii s aktivacnym linkom, ktory ucet aktivuje.. Pouzitie: Citácia: Cez formular sa uzivatel zaregistruje. Potom si ucet aktivuje. Pri prihlaseni kontrolujte, ci v DB ma v stlpci "aktiv" hodnotu "ano" - vtedy je aktivovany ucet. Poznamka autora: Citácia: Samozrejme to nie je perfektny a najlepsi sposob, ale funguje celkom spolahlivo. Ak najdete chyby, napiste SS alebo do urcenej temy. Ak ho pouzijete, prosim, kontaktujte ma, kde ste ho pouzili a ako ste s nim spokojny. Dakujem
registracia.php
Kód: <?php if (isset($_POST['zaregistrovat'])) { // k databazi sme sa pripojili uz.. // osetrime vstupy, dal som len zaklady, kludne osetrite ako chcete. $nick = htmlspecialchars(addslashes($_POST['nick'])); $heslo = htmlspecialchars(addslashes($_POST['heslo'])); $hesloKontrola = htmlspecialchars(addslashes($_POST['hesloKontrola'])); $mail = htmlspecialchars(addslashes($_POST['mail'])); $meno = htmlspecialchars(addslashes($_POST['meno'])); // mozete pouzit aj timestamp $datum = Date("j.m.Y H:i:s", Time()); // generujeme kod pre aktivaciu $aktiv = md5(md5($datum).md5(rand(1,1000))); // nastavime premennu chyby na prazdnu $chyby = ""; // upravime nick o nepovolene znaky $uprNick = preg_replace("~[^-a-zA-Z0-9_.]+~", "", $nick); // nemusite vyplnit, ak netriedite userov na ranky $rank = "user"; $origoHeslo = $heslo; // overime spravnost nicku if (!$nick){ $chyby.="Nevyplnili ste prihlasovacie meno<br>"; } elseif (strlen($nick) < 4) { $chyby.="Prihlasovacie meno má menej ako 4 znaky<br>"; } elseif (strlen($nick) > 18) { $chyby.="Prihlasovacie meno má viac ako 18 znakov<br>"; } elseif ($nick != $uprNick) { $chyby.="Prihlasovacie meno má nepovolené znaky. Povolené sú: _,.<br>";} elseif ($nick == "admin" || $nick == "administrator" || $nick == "Admin" || $nick == "Administrator") { $chyby.="Chceš sa hrať na administrátora?<br>";} // overime spravnost hesla if (!$heslo){ $chyby.="Nevyplnili ste heslo<br>"; } elseif (strlen($heslo) < 4) { $chyby.="Heslo má menej ako 4 znaky<br>"; } elseif ($heslo != $hesloKontrola) { $chyby.="Zadané heslá niesú rovnaké<br>"; } // overime spravnost mailu if (!$mail){ $chyby.="Nevyplnili ste e-mail<br>"; } elseif (!eregi('^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$',$mail)) { $chyby.="Zlý formát emailu<br>"; } //overenie jedinecnosti nicku a mailu $query2 = " SELECT * FROM clenovia WHERE nick='$nick' "; $result2 = mysql_query($query2); $pocetRiadkov = mysql_num_rows($result2); if($pocetRiadkov == 1) { $chyby.="Toto prihlasovacie meno už je použité.<br>"; } $query2 = " SELECT * FROM clenovia WHERE mail='$mail' "; $result2 = mysql_query($query2); $pocetRiadkov = mysql_num_rows($result2); if($pocetRiadkov == 1) { $chyby.="Tento e-mail už je použitý.<br>"; } // ak sa zatial chyba nevyskytla, pokracujeme... if ($chyby == "") { // heslo si zabezpecte.. ja pouzivam md5 + moju funkciu $heslo = md5($heslo); $heslo = heslo($heslo);
// ulozime do DB // musite mat v tabulke clenovia patricne stlpce $vlozit = "INSERT INTO clenovia ( nick, heslo, mail, meno, datum, aktiv, rank ) VALUES ( '$nick', '$heslo', '$mail', '$meno', '$datum', '$aktiv', '$rank' )"; $vysledok = mysql_query( $vlozit ); if ($vysledok) { $idUzivatela = mysql_insert_id(); // odosielanie mailu $komu = $mail; $predmet = "Aktivačný e-mail"; $headers = "Content-Type: text/html; charset=utf-8\n"; $headers .= "From: vas@mail.sk\r\n"; $telospravy = " Dobrý deň,<br> ďakujeme vám za registráciu na stránke WEB4MEN. Pre dokončenie registrácie navštívte nasledujúci link:<br> <a href=\"http://www.vasa-stranka.sk/aktivacia.php?kluc=$aktiv&id=$idUzivatela\">http://www.vasa-stranka.sk/aktivacia.php?kluc=$aktiv&id=$idUzivatela</a><br> Vaše prihlasovacie meno je: $nick<br> Vaše prihlasovacie heslo je: $origoHeslo<br> Ďakujeme<br> <br> (ak ste sa na tejto stránke neregistrovali, kontaktujte administrátora na maili: vas@mail.sk) ";
if (mail($komu, $predmet, $telospravy, $headers )) { // presmerovanie, ak je mail odoslany echo " Zaregistrovali ste sa. <script> window.location.replace(\"/index.php\"); </script>"; exit(); } else { $chyby.="Vyskytol sa problém s odosielaním mailu. Skúste znova, alebo kontaktujte administrátora"; } } else { echo mysql_error(); $chyby.= "Vyskytla sa chyba s databázou. Skúste znova, neskôr, alebo kontaktujte administrátora<br>"; } } }
?>
<h1>Registrácia</h1> <p>Vypľň registračné údaje. Povinné položky sú označené hviezdičkou. </p> <br> <?php // ak sa vyskytla chyba, vypise ju if ($chyby != "") { echo "<p style=\"color: red\"><b>Vyskytli sa nasledujúce chyby:</b><br> $chyby </p><br>\n"; }
?> <!-- Toto si mozete spravit ako potrebujete vo value to zobrazuje zadane udaje, ak to hodi chybu, aby sa nemuseli este raz vyplnat --> <form name="form" method="post"> <table > <tr> <td><b>Prihlasovacie meno*:</b></td> <td><input type="text" size="18" maxlength="18" name="nick" class="tmave" <?php if(isset($_POST['zaregistrovat'])) {echo "value=\"$nick\"";} ?>> maximálne 18 znakov, minimálne 4 znaky, bez diakritiky, medzier a špeciálnych znakov</td> </tr> <tr> <td><b>Heslo*:</b></td> <td><input type="password" size="10" name="heslo" class="tmave"> minimálne 4 znaky</td> </tr> <tr> <td><b>Heslo ešte raz pre kontrolu*:</b></td> <td><input type="password" size="10" name="hesloKontrola" class="tmave"></td> </tr> <tr> <td><b>Váš platný e-mail*:</b></td> <td><input type="text" size="18" name="mail" class="tmave" <?php if(isset($_POST['zaregistrovat'])) {echo "value=\"$mail\"";} ?>> na tento e-mail Vám bude zaslaný aktivačný link</td> </tr> <tr> <td><b>Vaše meno:</b></td> <td><input type="text" size="18" name="meno" class="tmave" <?php if(isset($_POST['zaregistrovat'])) {echo "value=\"$meno\"";} ?>></td> </tr> <tr> <td colspan="2"><input type="submit" name="zaregistrovat" class="tmave" value="Zaregistrovať"> <input type="reset" name="reset" class="tmave" value="Zmaž údaje"> </td> </tr> </table> </form> aktivacia.php Kód: <h1>Aktivácia účtu</h1> <?php // overime, ci je zadany kluc a ID uzivatela, a ci je ID cislo if (isset($_GET['kluc']) && isset($_GET['id']) && is_numeric($_GET['id'])) {
// osetrime, ak chcete, mozte aj inak $kluc = addslashes($_GET['kluc']); // odstranujem z klucu pomlcky // v md5 hashi sa nemozu nachadzat a v DB narobia problemy // pre istotu ! $kluc = str_replace("-","",$kluc); $idUzivatela = $_GET['id'];
// najdeme v DB uzivatela, co ma v stlpci aktiv dany kluc $query2 = " SELECT * FROM clenovia WHERE id='$idUzivatela' && aktiv='$kluc' ";
$result2 = mysql_query($query2); $pocetRiadkov = mysql_num_rows($result2); if($pocetRiadkov == 1) { // nasli sme usera, tak mu aktiv nastavime na "ano" $query = " UPDATE clenovia SET aktiv='ano' WHERE id='$idUzivatela' "; $update = mysql_query($query); // vypiseme chybu, alebo uspech if ($update == false ) { echo " <p style=\"color:red;\">Niekde sa vyskytla chyba. Skúste znova, alebo kontaktujte administrátora.</p> "; } else { echo "<p>Aktivácia prebehla úspešne. Môžete sa prihlásiť vpravo hore.</p>"; }
} else { // ak sa zadany kluc nezhoduje echo "<p>Tento aktivačný klúč nezodpovedá k užívateľovi. Skúste znova alebo kontaktujte administrátora.</p>"; } // ak nezadali kluc alebo ID } else { echo "<p>Nieje zadaný aktivačný klúč alebo ID užívatela.</p>"; } ?>
_________________ "It took a lot of work, but this latest Linux patch enables support for machines with 4096 CPUs, up from the old limit of 1024." "Do you have support for smooth full-screen flash video yet?" "No, but who uses that?"
- ak dlho neodpisujem do témy, zabudol som na ňu, takže ma upozornite SS, ak chcete moju odpoveď
|
|
| Hore |
|
 |
stenley
|
Napísal: Štv 18.09.08 20:06 Predmet príspevku:
|
|
|
|
 |
| Moderátor |
 |
Registrovaný: 27.07.07 Príspevky: 3998 Bydlisko: Bratislava
|
Sprava URL adresy
Autor: stenley
Popis:
Citácia: string generateURL ( [mixed $param1, mixed $value1, ...] )
Nasledujuca funkcia sluzi na zmenu, pridanie ci vymazanie parametrov a ich hodnot nachadzajucih sa v aktualnej URL adrese. Umoznuje zmenit viacero parov (parameter-hodnota) naraz. Ak sa funkcii nepreda ziadny parameter, vracia sa vsetko od nazvu aktualne spracovavaneho skriptu vratane.
Kód: <?php /** * generateURL() * * Sprava URL adresy * * @author stenley <stenley@webdev.sk> * @version 1.4 */
function generateURL() { $GET = $_GET; $QUERY_STRING = ''; $SCRIPT_NAME = substr(strrchr($_SERVER["SCRIPT_NAME"],"/"),1); $num_args = func_num_args(); if($num_args>0 && $num_args%2==0) { $args = func_get_args(); foreach($args as $index => $paramName) { $paramName = trim($paramName); if($index%2==0 && !empty($paramName)) { $paramValue = trim($args[$index+1]); if(array_key_exists($paramName, $GET) && empty($paramValue)) { unset($GET[$paramName]); } elseif(!empty($paramValue)) { $GET[$paramName] = $paramValue; } } } } foreach($GET as $param => $value) { $QUERY_STRING .= $param."=".$value."&"; } return $SCRIPT_NAME.((empty($QUERY_STRING)) ? '' : "?".substr($QUERY_STRING,0,-5)); } ?> Verzia funkcie podporujuca polia v url Kód: <?php /** * generateURL() * * Sprava URL adresy * * @author stenley <stenley@webdev.sk> * @version 1.5 * @license http://opensource.org/licenses/gpl-license.php GNU Public License */
function generateURL() { $GET = $_GET; $QUERY_STRING = ''; $SCRIPT_NAME = substr(strrchr($_SERVER["SCRIPT_NAME"],"/"),1); function parseGET($varName, $arr, $indent=0) { static $str; static $path = array(); foreach($arr as $key => $value) { if(is_array($value)) { $path[$indent] = $key; parseGET($varName, $value, $indent+1); } else { if(!empty($value)) { $str .= $varName; if($path) { for($i=0; $i<$indent; $i++) { $str .= '['.$path[$i].']'; } } $str .= '['.$key.']='.$value.'&'; } } } return $str; }
$num_args = func_num_args(); if($num_args>0 && $num_args%2==0) { $args = func_get_args(); foreach($args as $index => $paramName) { $paramName = trim($paramName); if($index%2==0 && !empty($paramName)) { $paramValue = trim($args[$index+1]); preg_match("/^([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)((\[[^\[\]]+\])+)$/", $paramName, $matches);
if($matches) { $var = 'GET[\''.$matches[1].'\']'.$matches[2]; @eval("\$varExists = isset(\$$var);"); if($varExists && empty($paramValue)) { @eval("unset(\$$var);"); } elseif(!empty($paramValue)) { @eval("\$$var = \$paramValue;"); } } else { if(array_key_exists($paramName, $GET) && empty($paramValue)) { unset($GET[$paramName]); } elseif(!empty($paramValue)) { $GET[$paramName] = $paramValue; } } } } }
foreach($GET as $param => $value) { if(is_array($value)) { $QUERY_STRING .= parseGET($param, $value); } else { $QUERY_STRING .= $param."=".$value."&"; } } return $SCRIPT_NAME.((empty($QUERY_STRING)) ? '' : "?".substr($QUERY_STRING,0,-5)); } ?>
Priklady pouzitia:
1. Zistenie aktualnej adresy:
Aktualna adresa: index.php?x=1&y=2
Pouzitie: generateURL()
Vysledok: index.php?x=1&y=2
2. Pridanie noveho parametra "z" s hodnotou "3":
Aktualna adresa: index.php?x=1&y=2
Pouzitie: generateURL("z",3)
Vysledok: index.php?x=1&y=2&z=3
3. Zmena hodnoty parametra "x" na "2":
Aktualna adresa: index.php?x=1&y=2
Pouzitie: generateURL("x",2)
Vysledok: index.php?x=2&y=2
4. Vymazanie parametra "y":
Aktualna adresa: index.php?x=1&y=2
Pouzitie: generateURL("y","")
Vysledok: index.php?x=1
5. Pridanie viacerych parametrov a hodnot:
Aktualna adresa: index.php?x=1&y=2
Pouzitie: generateURL("z",3,"a",4,"b",5)
Vysledok: index.php?x=1&y=2&z=3&a=4&b=5
6. Zistenie aktualnej adresy:
Aktualna adresa: index.php?x=1¶m[key]=value
Pouzitie: generateURL()
Vysledok: index.php?x=1¶m[key]=value
Aktualna adresa: index.php?param[]=value1¶m[]=value2
Pouzitie: generateURL()
Vysledok: index.php?param[ 0]=value1¶m[ 1]=value2
7. Pridanie noveho parametra "param[key2]" s hodnotou "value2":
Aktualna adresa: index.php?x=1¶m[key]=value
Pouzitie: generateURL("param[key2]","value2")
Vysledok: index.php?x=1¶m[key]=value¶m[key2]=value2
_________________ Desktop: CPU: AMD Athlon64 3000+ | MB: Biostar K8T890-A9 | VGA: NVIDIA GeForce 6200 LE 256MB | RAM: 2x 1GB A-DATA DDR 400 MHz Dual Kit | HDD: WD Caviar Blue 320GB | DVD: LG GSA-H10N | Keyboard: Chicony KU-0420 Silver/Black | Mouse: Logitech RX1000 | Zdroj: Corsair CX400 400W | CASE: DELUX DLC-MD370 Black | LCD: 20" Samsung 206BW | Repro: Teac XL-20 Notebook: ACER Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB / Intel HD Graphics | RAM: 4GB DDR3 1066 MHz | HDD: 640GB
Naposledy upravil stenley dňa Str 19.01.11 20:49, celkovo upravené 3
|
|
| Hore |
|
 |
stenley
|
Napísal: Pon 29.09.08 22:22 Predmet príspevku:
|
|
|
|
 |
| Moderátor |
 |
Registrovaný: 27.07.07 Príspevky: 3998 Bydlisko: Bratislava
|
Zistenie skutocnej IP adresy
Autor: stenley
Popis:
Citácia: string getIpAddress ( void )
Ip adresa klienta (navstevnika) je bezne dostupna v php premennych REMOTE_ADDR. Ak sa vsak klient "skryva" za nejakym proxy serverom, na zistenie jeho skutocnej IP adresy nam tato premenna velmi neposluzi. Vacsinou je v nej ulozena prave ip adresa proxy serveru. Nasledujuci kod umoznuje zistit skutocnu ip adresu klienta, ak sa nachadza za transparentnym alebo anonymnym proxy serverom, v pripade elite proxy serverov sa vracia ip adresa proxy.
Kód: <?php /** * getIpAddress() * * Zistenie skutocnej IP adresy * * @author stenley <stenley@webdev.sk> * @version 1.0 */
function getIpAddress() { $basicIP = getenv("REMOTE_ADDR"); $realIP = getenv("HTTP_X_FORWARDED_FOR"); if(empty($realIP)) { $realIP = getenv("HTTP_X_FORWARDED"); } if(empty($realIP)) { $realIP = getenv("HTTP_FORWARDED_FOR"); } if(empty($realIP)) { $realIP = getenv("HTTP_FORWARDED"); } $proxyFlag = empty($realIP) ? 0 : 1; if(!$proxyFlag) { $realIP = getenv("HTTP_VIA"); if(empty($realIP)) { $realIP = getenv("HTTP_X_COMING_FROM"); } if(empty($realIP)) { $realIP = getenv("HTTP_COMING_FROM"); } if(!empty($realIP)) { $proxyFlag = 2; } } if($realIP==$basicIP) { $proxyFlag = 0; } switch($proxyFlag) { case '0': $ipadr = $basicIP; break; case '1': $tmp = ereg("^([0-9]{1,3}\.){3,3}[0-9]{1,3}", $realIP, $zhoda); if($tmp && (count($zhoda)>0)) { $ipadr = $zhoda[0]; } else { $ipadr = $basicIP; } break; case '2': $ipadr = $basicIP; } return $ipadr; } ?> Priklady pouzitia: Ip adresa klienta: 123.123.123.123 Pouzity anonymous proxy: 222.222.222.222 Kód: echo getIpAddress();
Vypise: 123.123.123.123 (cize sa zisti ipcka klienta a nie proxy serveru)
Premenna $_SERVER['REMOTE_ADDR'] by obsahovala adresu proxy servera 222.222.222.222
Poznamka: Spominane ip adresy su vymyslene.
_________________ Desktop: CPU: AMD Athlon64 3000+ | MB: Biostar K8T890-A9 | VGA: NVIDIA GeForce 6200 LE 256MB | RAM: 2x 1GB A-DATA DDR 400 MHz Dual Kit | HDD: WD Caviar Blue 320GB | DVD: LG GSA-H10N | Keyboard: Chicony KU-0420 Silver/Black | Mouse: Logitech RX1000 | Zdroj: Corsair CX400 400W | CASE: DELUX DLC-MD370 Black | LCD: 20" Samsung 206BW | Repro: Teac XL-20 Notebook: ACER Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB / Intel HD Graphics | RAM: 4GB DDR3 1066 MHz | HDD: 640GB
Naposledy upravil stenley dňa Str 19.01.11 20:49, celkovo upravené 2
|
|
| Hore |
|
 |
stenley
|
Napísal: Štv 09.10.08 20:59 Predmet príspevku:
|
|
|
|
 |
| Moderátor |
 |
Registrovaný: 27.07.07 Príspevky: 3998 Bydlisko: Bratislava
|
Pocet pracovnych dni medzi 2 datumami
Autor: stenley
Popis:
Citácia: int getWorkDays ( string $date1, string $date2 )
Nasledujuca funkcia sluzi na zistenie poctu pracovnych dni medzi datumami $date1 a $date2 vratane, tzn. po-pia predstavuje 5 pracovnych dni. Oba datumy musia mat format YYYY-MM-DD. V pripade, ze nie je splnena tato podmienka, funkcia vracia FALSE.
Kód: <?php /** * getWorkDays() * * Pocet pracovnych dni medzi 2 datumami * * @author stenley <stenley@webdev.sk> * @version 1.1 */
function getWorkDays($date1,$date2) { $regexp = "^[0-9]{4}-[0-9]{2}-[0-9]{2}$"; //pozadovany format datumu if(ereg($regexp,$date1) && ereg($regexp,$date2)) { list($year,$month,$day) = explode("-",$date1); $date1 = mktime(0,0,0,$month,$day,$year); list($year,$month,$day) = explode("-",$date2); $date2 = mktime(0,0,0,$month,$day,$year); if($date1 > $date2) { $tmp = $date1; $date1 = $date2; $date2 = $tmp; } $date1_weekday = date("N",$date1); //cislo dna v tyzdni $date2_weekday = date("N",$date2); //cislo dna v tyzdni $diff = ceil(($date2-$date1)/86400); //rozdiel dni medzi datumami $diff -= 7 - $date1_weekday; //odpocitany 1.tyzden $diff -= $date2_weekday; //odpocitany posledny tyzden $work_days = 0; //pracovne dni v tyzdni s datumom date1 $work_days += ($date1_weekday <= 5) ? 5 - $date1_weekday + 1 : 0; //pracovne dni v tyzdni s datumom date2 $work_days += ($date2_weekday <= 5) ? $date2_weekday : 5; //pracovne dni medzi $work_days += ($diff / 7) * 5; return $work_days; } return false; } ?> Priklady pouzitia: Ako zistit pocet pracovnych dni medzi datumami 1.10.2008 (streda) a 9.10.2008 (stvrtok): Kód: echo getWorkDays("2008-10-01","2008-10-09"); Vypise: 7
_________________ Desktop: CPU: AMD Athlon64 3000+ | MB: Biostar K8T890-A9 | VGA: NVIDIA GeForce 6200 LE 256MB | RAM: 2x 1GB A-DATA DDR 400 MHz Dual Kit | HDD: WD Caviar Blue 320GB | DVD: LG GSA-H10N | Keyboard: Chicony KU-0420 Silver/Black | Mouse: Logitech RX1000 | Zdroj: Corsair CX400 400W | CASE: DELUX DLC-MD370 Black | LCD: 20" Samsung 206BW | Repro: Teac XL-20 Notebook: ACER Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB / Intel HD Graphics | RAM: 4GB DDR3 1066 MHz | HDD: 640GB
Naposledy upravil stenley dňa Str 19.01.11 20:49, celkovo upravené 3
|
|
| Hore |
|
 |
stenley
|
Napísal: Uto 14.10.08 22:01 Predmet príspevku:
|
|
|
|
 |
| Moderátor |
 |
Registrovaný: 27.07.07 Príspevky: 3998 Bydlisko: Bratislava
|
Jednoduchy nakupny kosik cez SESSION
Autor: stenley
Poziadavky: PHP5
Popis:
Prirodzenou sucastou kazdeho eshopu je nakupny kosik, do ktoreho si ulozite produkty, ktore si planujte objednat/kupit. Tento skript ilustruje prave takyto kosik, teda pridavanie (odstranovanie) produktov - manipulaciu s kosikom, nezahrna objednanie produktov pridanych do kosiku. Obsah kosika, ako aj celkova cena produktov v nom, su ukladane do session premennych. Pomocou triedy Basket su vykonavane vsetky akcie, potrebne pre pridavanie/odstranovanie/ziskanie produktov, ako aj vymazanie obsahu kosiku.
Kód: <?php /** * Basket * * Jednoduchy nakupny kosik cez SESSION * * @author stenley <stenley@webdev.sk> * @version 1.1 */
class Basket { private $BASKET; //obsah kosiku private $PRICE; //cena produktov v kosiku function __construct() { if(!isset($_SESSION['basket'])) { $_SESSION['basket'] = array(); $_SESSION['price'] = 0; } $this->BASKET = &$_SESSION['basket']; $this->PRICE = &$_SESSION['price']; }
//prida novu polozku do kosika public function AddItem($itemData,$itemDataKey='') { if(empty($itemDataKey)) { $this->BASKET[] = $itemData; } else { if(array_key_exists($itemDataKey,$this->BASKET)) { $this->BASKET[$itemDataKey]['quantity'] += $itemData['quantity']; } else { $this->BASKET[$itemDataKey] = $itemData; } } }
//ziska data z kosika public function GetData() { return $this->BASKET; }
//ziska celkovu sumu kosika public function GetPrice() { $tmp_price = 0;
$arrData = $this->GetData();
foreach($arrData as $item) { $tmp_price += $this->SumPrice($item); }
$this->PRICE = $tmp_price;
return $this->PRICE; }
//vymaze polozku z kosika public function DeleteItem($itemDataKey) { unset($this->BASKET[$itemDataKey]); }
//spocita celkovu sumu v kosiku private function SumPrice($item) { $tmp_price = 0;
if(array_key_exists("price",$item)) { $tmp_price += $item['price']*$item['quantity']; }
return $tmp_price; }
//vyprazdni kosik public function DeleteBasket() { $this->BASKET = array(); $this->PRICE = 0; } } ?> Priklad pouzitia: Pre zjednodusenie budu jednotlive produkty ulozene v poli: Kód: $produkty[1] = array( 'nazov' => 'Produkt 1', 'popis' => 'popis k 1.produktu', 'cena' => 30 ); $produkty[2] = array( 'nazov' => 'Produkt 2', 'popis' => 'popis k 2.produktu', 'cena' => 50 ); Nasledujuci kod (ulozeny v subore index.php) spolu s polom produktov vypisuje aktualny obsah kosika, celkovu sumu produktov v kosiku, obsahuje moznost pridat jednotlive produkty do kosiku a vymazat obsah kosika: Kód: session_start();
$kosik = new Basket;
if(isset($_GET['empty'])) { //vymazanie obsahu kosiku $kosik->DeleteBasket(); header("Location: ./"); }
if(!empty($_GET['id'])) { $id = $_GET['id']; if(array_key_exists($id,$produkty)) { //pridanie produktu (1ks) do kosiku $kosik->AddItem(array('title'=>$produkty[$id]['nazov'], 'price'=>$produkty[$id]['cena'],'quantity'=>1),$id); header("Location: ./"); } } ?> <h1>Obsah kosika</h1> <?php foreach($kosik->GetData() as $item) { echo $item['title'].' (cena: '.$item['price']*$item['quantity'].',-Sk/'.$item['quantity'].'ks)<br>'; }
echo 'Celkova cena: '.$kosik->GetPrice(); ?> <p> <?php foreach($produkty as $id => $produkt) { echo '<a href="?id='.$id.'">Pridat do kosika '.$produkt['nazov'].'</a><br>'; } ?> </p> <p><a href="?empty">Vymazat obsah kosika</a></p>
_________________ Desktop: CPU: AMD Athlon64 3000+ | MB: Biostar K8T890-A9 | VGA: NVIDIA GeForce 6200 LE 256MB | RAM: 2x 1GB A-DATA DDR 400 MHz Dual Kit | HDD: WD Caviar Blue 320GB | DVD: LG GSA-H10N | Keyboard: Chicony KU-0420 Silver/Black | Mouse: Logitech RX1000 | Zdroj: Corsair CX400 400W | CASE: DELUX DLC-MD370 Black | LCD: 20" Samsung 206BW | Repro: Teac XL-20 Notebook: ACER Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB / Intel HD Graphics | RAM: 4GB DDR3 1066 MHz | HDD: 640GB
Naposledy upravil stenley dňa Str 19.01.11 20:49, celkovo upravené 4
|
|
| Hore |
|
 |
stenley
|
Napísal: Pia 24.10.08 13:02 Predmet príspevku:
|
|
|
|
 |
| Moderátor |
 |
Registrovaný: 27.07.07 Príspevky: 3998 Bydlisko: Bratislava
|
Strankovanie
Autor: stenley
Poziadavky: funkcia generateURL() z tejto temy
Popis:
Citácia: string pagination ( int $numRows, int $rowsPerPage [, int $maxPages ] )
Strankovanie je vhodne, ked chcete rozdelit vacsie mnozstvo dat na mensie kusky. Opodstatnene vyuzitie ma napr. pri zobrazovani vysledkov vyhladavania, ked chcete na stranu zobrazit len obmedzeny pocet zaznamov kvoli prehladnosti. Nasledujuca funkcia vytvara odkazy na jednotlive stranky s tym, ze je mozne obmedzit, kolko cisiel stranok sa zobrazi. Tato hodnota sa uvadza ako nepovinny 3. parameter funkcie, pricom default hodnota je 15. Tzn. ak bude stranok 40, vzdy sa zobrazi len 15 cisiel, ktore sa budu postupne menit posuvanim sa v zozname stranok.
$numRows urcuje celkovy pocet zaznamov (clankov, vysledkov vyhladavania, ...) a $rowsPerPage predstavuje pocet zaznamov zobrazenych na jednej stranke.
Kód: <?php /** * pagination() * * Strankovanie * * @author stenley <stenley@webdev.sk> * @version 1.2 */
function pagination($numRows, $rowsPerPage, $maxPages=15) { global $page, $numPages;
$ret = "";
if($numPages>0) { if(!isset($page)) { $page = 1; //cislo aktivnej stranky (default=1) } $from = 1; //cislo stranky, od ktoreho sa zacina strankovanie $to = $numPages; //cislo stranky, kde strankovanie konci $padd_a = ceil($maxPages/2); //pre pozicovanie cisla aktivnej stranky v strankovani $padd_b = floor($maxPages/2); //pre pozicovanie cisla aktivnej stranky v strankovani //vypocitanie prveho a posledneho cisla stranky v strankovani (pre potreby for cyklu) if($page >= $maxPages) { $from = $page - $maxPages + $padd_a; $to = $from + $maxPages - 1; if($page == $numPages || $page + $padd_b >= $numPages) { $to = $numPages; $from = $to - $maxPages + 1; } } //odkaz na prvu stranku $ret .= (($page > 1) ? '<a href="'.generateURL(PAGEVAR,1).'"><<</a>' : '<<').' '; //odkaz na predoslu stranku $ret .= (($page > 1) ? '<a href="'.generateURL(PAGEVAR,$page-1).'"><</a>' : '<').' '; //strankovanie for($i = $from; $i <= $to; $i++) { if(--$maxPages >= 0) { if($page == $i) { $ret .= $i; //aktivna stranka } else { $ret .= '<a href="'.generateURL(PAGEVAR,$i).'">'.$i.'</a>'; //ostatne stranky } $ret .= DELIMITER; } else { break; } } //odstranenie oddelovaca za poslednou strankou $ret = substr($ret,0,-strlen(DELIMITER)).' '; //odkaz na nasledujucu stranku $ret .= (($page < $numPages) ? '<a href="'.generateURL(PAGEVAR,$page+1).'">></a>' : '>').' '; //odkaz na poslednu stranku $ret .= (($page < $numPages) ? '<a href="'.generateURL(PAGEVAR,$numPages).'">>></a>' : '>>'); return $ret; } return false; } ?> Priklad pouzitia: Majme v db ulozene nazvy pesniciek zaradene do roznych zanrov (pop, rock, ...). Pre zjednodusenie predpokladame, ze v kategorii pop je 631 pesniciek. Chceme vypisat nazvy tychto piesni tak, aby sa na jednej stranke zobrazilo max. 8 skladieb, pricom design webu umoznuje zobrazit max 9 cisiel stranok. Poznamka: cislo aktivnej stranky je v adrese ulozene v parametri page. $page a $numPages su globalne premenne funkcie pagination Kód: define("PAGEVAR", "page"); //nazov parametra v GET, kde sa uchovava cislo stranky define("DELIMITER", " | "); //oddelovac cisiel stranok $page = 1; //cislo aktivnej stranky (default=1)
$numRows = 631; $rowsPerPage = 8; $maxPages = 9;
$numPages = ceil($numRows/$rowsPerPage); //pocet stranok v strankovani
if(!empty($_GET[PAGEVAR]) && $_GET[PAGEVAR]>0 && intval($_GET[PAGEVAR])<=$numPages) { $page = $_GET[PAGEVAR]; }
$offset = ($page - 1) * $rowsPerPage;
$sql = "SELECT id, nazov FROM mp3 WHERE zaner='pop' LIMIT $offset,$rowsPerPage"; $res = mysql_query($sql); if($res!==false) { while(list($id,$nazov) = mysql_fetch_row($res)) { echo '<p>'.$id.' - '.$nazov.'</p>'; } }
echo pagination($numRows, $rowsPerPage, $maxPages);
Vysledok (zoznam stranok):
URL: index.php?page=1 (aktivna stranka 1)
<< < 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 > >>
URL: index.php?page=20 (aktivna stranka 20)
<< < 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 > >>
_________________ Desktop: CPU: AMD Athlon64 3000+ | MB: Biostar K8T890-A9 | VGA: NVIDIA GeForce 6200 LE 256MB | RAM: 2x 1GB A-DATA DDR 400 MHz Dual Kit | HDD: WD Caviar Blue 320GB | DVD: LG GSA-H10N | Keyboard: Chicony KU-0420 Silver/Black | Mouse: Logitech RX1000 | Zdroj: Corsair CX400 400W | CASE: DELUX DLC-MD370 Black | LCD: 20" Samsung 206BW | Repro: Teac XL-20 Notebook: ACER Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB / Intel HD Graphics | RAM: 4GB DDR3 1066 MHz | HDD: 640GB
Naposledy upravil stenley dňa Str 19.01.11 20:50, celkovo upravené 7
|
|
| Hore |
|
 |
Kto je on-line |
Užívatelia prezerajúci fórum: Žiadny registrovaný užívateľ nie je prítomný a 0 hostia |
|
Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|