[ Príspevkov: 37 ] Choď na stránku: 1, 2 ďalšia
AutorSpráva
Offline

Správca fóra
Správca fóra
Užitočné a často používané skripty

Registrovaný: 27.07.07
Príspevky: 3955
Témy: 51 | 51
Bydlisko: Bratislava
Vek: 30
NapísalOffline : Štv 14.08.08 21:49 |

Užitočné a často používané skripty


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 pouzitia

2. 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:

Zistenie velkosti priecinka
Kontrola minimalneho poctu pismen, cislic a specialnych znakov v retazci
Vyber prvych x slov z retazca
Funkcia na generovanie pekných url
Odosielanie súborov na server
Konfiguracna trieda (singleton)
Vygenerovanie náhodného reťazca
Oseknutie reťazca po medzere
Script pre upload s funkciou povolenia pripon (whitelist)
Export dat z MySQL do .sql súboru
Skopirovanie celeho adresara na FTP
Export dat z MySQL do XML
Kalendar
Predpoved pocasia (Google)
Zistenie velkosti priecinka
Vypis obsahu adresara
Je subor obrazok?
Najdenie pozicie vyskytu podretazca v retazci
PHP Template Class
Vkladanie retazca na urcitu poziciu druheho retazca
Zmena velkosti obrazka
Sprava URL adresy 2 ("pekne url adresy")
Strankovanie
Jednoduchy nakupny kosik cez SESSION
Pocet pracovnych dni medzi 2 datumami
Zistenie skutocnej IP adresy
Sprava URL adresy
Registracia s aktivaciou cez e-mail
Cenzura
Konverzia BBCode na HTML tagy
Trieda pre pracu so SESSION bez pouzitia databazy
Graficke znazornenie poctu pristupov
Trieda pre pracu s MySQL databazou (zakladna)
Validacia emailovej adresy
Hromadne osetrenie vstupov (zakladne)
Odstranenie diakritiky z textu


Naposledy upravil stenley dňa Pon 20.08.12 22:59, celkovo upravené 48

_________________
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
Offline

Správca fóra
Správca fóra
Užitočné a často používané skripty

Registrovaný: 27.07.07
Príspevky: 3955
Témy: 51 | 51
Bydlisko: Bratislava
Vek: 30
Napísal autor témyOffline : Pia 15.08.08 12:13 |

Užitočné a často používané skripty


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


Naposledy upravil stenley dňa Str 19.01.11 20:47, celkovo upravené 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
Offline

Správca fóra
Správca fóra
Užitočné a často používané skripty

Registrovaný: 27.07.07
Príspevky: 3955
Témy: 51 | 51
Bydlisko: Bratislava
Vek: 30
Napísal autor témyOffline : Ned 17.08.08 0:27 |

Užitočné a často používané skripty


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: &lt;a href=&quot;&quot;&gt;odkaz&lt;/a&gt;


Naposledy upravil stenley dňa Str 19.01.11 20:47, celkovo upravené 4

_________________
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
Offline

Správca fóra
Správca fóra
Užitočné a často používané skripty

Registrovaný: 27.07.07
Príspevky: 3955
Témy: 51 | 51
Bydlisko: Bratislava
Vek: 30
Napísal autor témyOffline : Ned 17.08.08 0:53 |

Užitočné a často používané skripty


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!";
}


Naposledy upravil stenley dňa Str 19.01.11 20:48, celkovo upravené 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
Offline

Správca fóra
Správca fóra
Užitočné a často používané skripty

Registrovaný: 27.07.07
Príspevky: 3955
Témy: 51 | 51
Bydlisko: Bratislava
Vek: 30
Napísal autor témyOffline : Uto 19.08.08 8:23 |

Užitočné a často používané skripty


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 ...


Naposledy upravil stenley dňa Str 19.01.11 20:48, celkovo upravené 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
Offline

Správca fóra
Správca fóra
Užitočné a často používané skripty

Registrovaný: 27.07.07
Príspevky: 3955
Témy: 51 | 51
Bydlisko: Bratislava
Vek: 30
Napísal autor témyOffline : Str 20.08.08 17:27 |

Užitočné a často používané skripty


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:
Užitočné a často používané skriptyUžitočné a často používané skripty

Kód:
$pocet_pristupov = 12345;

$counter = new GZPP($pocet_pristupov);
$counter->bgColor = "#5c81b1";
$counter->fontColor = "#ecf0f6";
$counter->minDigits = 7;
$counter->generate();

Vysledok:
Užitočné a často používané skriptyUžitočné a často používané skripty

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.


Naposledy upravil stenley dňa Str 19.01.11 20:48, celkovo upravené 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
Offline

Správca fóra
Správca fóra
Užitočné a často používané skripty

Registrovaný: 27.07.07
Príspevky: 3955
Témy: 51 | 51
Bydlisko: Bratislava
Vek: 30
Napísal autor témyOffline : Štv 21.08.08 7:47 |

Užitočné a často používané skripty


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


Naposledy upravil stenley dňa Str 19.01.11 20:48, celkovo upravené 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
Offline

Užívateľ
Užívateľ
Užitočné a často používané skripty

Registrovaný: 06.03.08
Prihlásený: 01.10.12
Príspevky: 1735
Témy: 15 | 15
Bydlisko: triminka@sp...

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 :P

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...
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 23.12.07
Prihlásený: 07.09.13
Príspevky: 98
Témy: 16 | 16
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....
Offline

Užívateľ
Užívateľ
Užitočné a často používané skripty

Registrovaný: 09.09.07
Prihlásený: 01.06.14
Príspevky: 3129
Témy: 233 | 233
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ď
Offline

Správca fóra
Správca fóra
Užitočné a často používané skripty

Registrovaný: 27.07.07
Príspevky: 3955
Témy: 51 | 51
Bydlisko: Bratislava
Vek: 30
Napísal autor témyOffline : Štv 18.09.08 21:06 |

Užitočné a často používané skripty


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."&amp;";
   }
   
   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.'&amp;';
            }
         }
      }
      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."&amp;";
      }
   }
   
   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&param[key]=value
Pouzitie: generateURL()
Vysledok: index.php?x=1&param[key]=value

Aktualna adresa: index.php?param[]=value1&param[]=value2
Pouzitie: generateURL()
Vysledok: index.php?param[0]=value1&param[1]=value2

7. Pridanie noveho parametra "param[key2]" s hodnotou "value2":
Aktualna adresa: index.php?x=1&param[key]=value
Pouzitie: generateURL("param[key2]","value2")
Vysledok: index.php?x=1&param[key]=value&param[key2]=value2


Naposledy upravil stenley dňa Str 19.01.11 20:49, celkovo upravené 3

_________________
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
Offline

Správca fóra
Správca fóra
Užitočné a často používané skripty

Registrovaný: 27.07.07
Príspevky: 3955
Témy: 51 | 51
Bydlisko: Bratislava
Vek: 30
Napísal autor témyOffline : Pon 29.09.08 23:22 |

Užitočné a často používané skripty


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.


Naposledy upravil stenley dňa Str 19.01.11 20:49, celkovo upravené 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
Offline

Správca fóra
Správca fóra
Užitočné a často používané skripty

Registrovaný: 27.07.07
Príspevky: 3955
Témy: 51 | 51
Bydlisko: Bratislava
Vek: 30
Napísal autor témyOffline : Štv 09.10.08 21:59 |

Užitočné a často používané skripty


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


Naposledy upravil stenley dňa Str 19.01.11 20:49, celkovo upravené 3

_________________
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
Offline

Správca fóra
Správca fóra
Užitočné a často používané skripty

Registrovaný: 27.07.07
Príspevky: 3955
Témy: 51 | 51
Bydlisko: Bratislava
Vek: 30
Napísal autor témyOffline : Uto 14.10.08 23:01 |

Užitočné a často používané skripty


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>


Naposledy upravil stenley dňa Str 19.01.11 20:49, celkovo upravené 4

_________________
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
Offline

Správca fóra
Správca fóra
Užitočné a často používané skripty

Registrovaný: 27.07.07
Príspevky: 3955
Témy: 51 | 51
Bydlisko: Bratislava
Vek: 30
Napísal autor témyOffline : Pia 24.10.08 14:02 |

Užitočné a často používané skripty


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).'">&lt;&lt;</a>' : '&lt;&lt;').'&nbsp;';
      
      //odkaz na predoslu stranku
      $ret .= (($page > 1) ? '<a href="'.generateURL(PAGEVAR,$page-1).'">&lt;</a>' : '&lt;').'&nbsp;';
      
      //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)).'&nbsp;';
      
      //odkaz na nasledujucu stranku
      $ret .= (($page < $numPages) ? '<a href="'.generateURL(PAGEVAR,$page+1).'">&gt;</a>' : '&gt;').'&nbsp;';
      
      //odkaz na poslednu stranku
      $ret .= (($page < $numPages) ? '<a href="'.generateURL(PAGEVAR,$numPages).'">&gt;&gt;</a>' : '&gt;&gt;');
      
      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 > >>


Naposledy upravil stenley dňa Str 19.01.11 20:50, celkovo upravené 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
Offline

Správca fóra
Správca fóra
Užitočné a často používané skripty

Registrovaný: 27.07.07
Príspevky: 3955
Témy: 51 | 51
Bydlisko: Bratislava
Vek: 30
Napísal autor témyOffline : Str 26.11.08 15:48 |

Užitočné a často používané skripty


Sprava URL adresy 2 ("pekne url adresy")

Autor: stenley
Popis:
Citácia:
string MRWgenerateURL ( [mixed $param1, mixed $value1, ...] )

Ako som nedavno avizoval, nasledujuca funkcia sluzi na spravu "peknych url adries", tzn. na jednoduche pridavanie, mazanie a zmenu jednotlivych casti adresy, pricom je mozne funkcii predat viacero "operacii" naraz. K spravnej funkcnosti musia byt funkcii MRWgenerateURL dostupne pravidla, ktorymi sa riadi prepisovanie adries (.htaccess). V prikladoch pouzitia najdete popisany format tychto pravidiel - premenna $arrRules. Dalej je potrebne uviest adresar, z ktoreho sa skript spusta - premenna $pageDir. Obe tieto premenne su globalnymi premennymi funkcie.

Kód:
<?php
/**
 * MRWgenerateURL()
 *
 * Sprava URL adresy 2 ("pekne url adresy")
 *
 * @author   stenley <stenley@webdev.sk>
 * @version   1.0
 */

function MRWgenerateURL()
{
   global $pageDir,$arrRules;
   
   $GET = $_GET;

   $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)) {
               if(!empty($paramValue)) {
                  $GET[$paramName] = $paramValue;
               } else {
                  unset($GET[$paramName]);
               }
            } else {
               $GET[$paramName] = $paramValue;
            }
         }
      }

      if(count($GET)>0) {
         foreach($arrRules as $eregRule => $arrUrlRule) {
            list($urlRule,$urlMRWRule) = $arrUrlRule;

            parse_str($urlRule,$arrUrlRule);

            if(count($GET)==count($arrUrlRule)) {
               foreach($GET as $key => $value) {
                    if(array_key_exists($key,$arrUrlRule)) {
                     $urlMRWRule = str_replace($arrUrlRule[$key],$value,$urlMRWRule);
                  }
               }

               if(eregi("^".$eregRule."$",$urlMRWRule) && strpos($urlMRWRule,'$')===false) {
                  return $pageDir.$urlMRWRule;
               }
            }
         }
      } else {
         return $pageDir;
      }
   }
   
   return $_SERVER['REQUEST_URI'];
}
?>


Priklady pouzitia:

Na fiktivnom webe pouzivame adresy typu:
1. www.nieco.sk/kategoria (klasicka adresa: www.nieco.sk/?a=kategoria)
2. www.nieco.sk/kategoria/subkategoria (klasicka adresa: www.nieco.sk/?a=kategoria&b=subkategoria)

kde kategoria predstavuje hodnotu parametra a a subkategoria hodnotu parametra b.

Kedze pouzivame 2 formaty adries, pole pravidiel bude obsahovat 2 polozky (pravidla); stranka sa spusta z korenoveho adresara:

Kód:
$pageDir = "/";

$arrRules = array(
   '([^/]+)/([^/]+)' => array('a=$1&b=$2','$1/$2'),
   '([^/]+)' => array('a=$1','$1')
);

Pravidla su ulozene vo viacrozmernom poli $arrRules. Format pravidiel je podobny formatu pouzivanemu v .htaccess. Kazde pravidlo pozostava z regularneho vyrazu pravidla (index pola) a 2 hodnot: format klasickej adresy a format vyslednej "peknej adresy". Jednotlive casti, ktore vyhovuju regularnemu vyrazu, sa oznacuju $1, $2, ... Prepisovanie sa teda riadi len tymito pravidlami, ak tam zabudnete niektore uviest, funkcia vam vrati aktualnu adresu. Mozno som to trosku zlozito popisal, ale priklad bude hadam nazornejsi:

1. Zistenie aktualnej adresy:
Aktualna adresa: /
Pouzitie: MRWgenerateURL()
Vysledok: /

2. Pridanie novej casti adresy (parameter b):
Aktualna adresa: /auto
Pouzitie: MRWgenerateURL("b","bmw")
Vysledok: /auto/bmw

3. Zmena druhej casti adresy (parameter b):
Aktualna adresa: /auto/bmw
Pouzitie: MRWgenerateURL("b","skoda")
Vysledok: /auto/skoda

4. Pokus o pridanie tretej casti adresy:
Aktualna adresa: /auto/skoda
Pouzitie: MRWgenerateURL("c","octavia")
Vysledok: /auto/skoda
Vysvetlenie: Nakolko sa v pravidlach nenachadza tvar pravidla s 3 castami, prepis nebol uspesny

5. Zmena viacerych casti naraz:
Aktualna adresa: /auto/skoda
Pouzitie: MRWgenerateURL("a","motorka","b","honda")
Vysledok: /motorka/honda


Naposledy upravil stenley dňa Str 19.01.11 20:50, celkovo upravené 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
Offline

Užívateľ
Užívateľ
Užitočné a často používané skripty

Registrovaný: 26.11.06
Prihlásený: 04.05.15
Príspevky: 4123
Témy: 316 | 316
Bydlisko: HE/BA
NapísalOffline : Štv 27.11.08 16:50 |

Užitočné a často používané skripty


Zmena veľkosti obrázka

Autor: neznámy(niekde na nete nájdené :D)
Úpravy: Jakub Sakáč(jsakac) a Márius Rak(akože ja :D)
Popis: Pomocou tejto funkcie vygenerujete jednoduchú (väčšinou) zmenšeninu obrázka. Dá sa použiť aj na zväčšenie ale myslím, že je to zbytočnosť.

Kód:
<?php
function get_file_type($subor)
{
        $pripona = substr($subor, -4, 4);
        $pripona = strtolower($pripona);
        switch($pripona)
        {
                case '.jpg':
                        return 'jpg';
                break;
                case '.jpe':
                        return 'jpg';
                break;
                case '.gif':
                        return 'gif';
                break;
                case '.png':
                        return 'png';
                break;
                case '.bmp':
                        return 'bmp';
                break;
        }
}
function onlineresize($subor, $NovaSirka, $NovaVyska)
{
        switch(get_file_type($subor))
        {
                case 'jpg':
                        $image = imagecreatefromjpeg($subor);
                break;
                case 'gif':
                        $image = imagecreatefromgif($subor);
                break;
                case 'png':
                        $image = imagecreatefrompng($subor);
                break;
                case 'bmp':
                        $image = imagecreatefrombmp($subor);
                break;
        }
        $sirka = imagesx($image);
        $vyska = imagesy($image);       
        if($NovaVyska == 0)
        {
                $pomer = $sirka / $vyska;
                $NovaVyska = $NovaSirka / $pomer;
        }
        else
        {
                $NovaSirka = $NovaSirka;
                $NovaVyska = $NovaVyska;
        }       
        if ($NovaSirka == 0)
        {
                $pomer = $vyska / $sirka;
                $NovaSirka = $NovaVyska / $pomer;
        }
        else
        {
                $NovaSirka = $NovaSirka;
                $NovaVyska = $NovaVyska;
        }       
        $image_zmenseny = imagecreatetruecolor($NovaSirka, $NovaVyska);
        imagecopyresampled($image_zmenseny, $image, 0, 0, 0, 0, $NovaSirka, $NovaVyska, $sirka, $vyska);
       
        // Zobrazíme zmenšeninu
        switch(get_file_type($subor))
        {
                case 'jpg':
                        header('Content-type: image / jpeg');
                        imagejpeg($image_zmenseny);
                break;
                case 'gif':
                        header('Content-type: image / gif');
                        imagegif($image_zmenseny);
                break;
                case 'png':
                        header('Content-type: image / png');
                        imagepng($image_zmenseny);
                break;
                case 'bmp':
                        header('Content-type: image / bmp');
                        imagebmp($image_zmenseny);
                break;
        }
}
//zavolame funkciu a zobrazime obrazok
onlineresize($_GET['img'], $_GET['sirka'], $_GET['vyska']);
?>


Použitie: Najlepšie je to uložiť do samostatného súboru napríklad ako obrazok.php potom to používame spôsobom: <img src="obrazok.php?img=cesta/ku/obrazku/obrazok.jpg&sirka=250" alt="">
kde samozrejme do img definujete relatívnu cestu vzhľadom na súbor alebo absolútnu cestu a do premennej sirka samozrejme šírku alebo ju môžeme nahradiť aj premennou vyska.
Je to použiteľné na všetky typy obrázkov okrem bmp, aj keď tam je zahrnutá podpora nefunguje ako by mala.


Offline

Správca fóra
Správca fóra
Užitočné a často používané skripty

Registrovaný: 27.07.07
Príspevky: 3955
Témy: 51 | 51
Bydlisko: Bratislava
Vek: 30
Napísal autor témyOffline : Ned 22.02.09 14:18 |

Užitočné a často používané skripty


Vkladanie retazca na urcitu poziciu druheho retazca

Autor: stenley (inspirovane funkciou strwpos (Thomas Oldbury))
Popis:
Citácia:
string strwpos ( string $str, string $ins, mixed $pos [, bool $rewrite=false ] )

Funkcia strwpos() sluzi na vlozenie urciteho retazca $ins na definovanu poziciu $pos v retazci $str. Pozicia je vyjadrena ako (kladne/zaporne) cislo pripadne pole takychto cisiel, pricom 0 predstavuje zaciatok retazca, -1 predposledny znak retazca, ... podobne ako vo funkcii substr(). Nepovinny parameter $rewrite urcuje, ci sa retazec $ins len cisto vlozi na zvolenu poziciu (default nastavenie), alebo sa povodne znaky v $str (na dotknutych poziciach) prepisu hodnotou v $ins ($rewrite=true).

Kód:
<?php
/**
 * strwpos()
 *
 * Vkladanie retazca na urcitu poziciu druheho retazca
 *
 * @author   stenley <stenley@webdev.sk>
 * @version   1.1
 */

function strwpos($str, $ins, $pos, $rewrite=false) {
   $pos = is_array($pos) ? $pos : array($pos);
   
   //dlzka vkladaneho retazca
   $insLen = strlen($ins);
   
   foreach($pos as $i) {
      //dlzka generovaneho retazca
      $strLen = strlen($str);
      
      //vlozenie retazca na zaciatok
      if($i==0 || $i<=-$strLen) {
         $str = $rewrite ? $ins.substr($str,$insLen) : $ins.$str;
      //vlozenie retazca niekam do stredu
      } elseif(abs($i)<$strLen) {
         //pozicia pocitana od zaciatku generovaneho retazca
         if($i>0) {
            $str = substr($str,0,$i).$ins.($rewrite ? substr($str,$i+$insLen) : substr($str,$i));
         //pozicia pocitana od konca generovaneho retazca
         } else {
            $striLen = $strLen+$i;
            $str = substr($str,0,$striLen).$ins.($rewrite ? substr($str,$striLen+$insLen): substr($str,$i));
         }
      //vlozenie retazca na koniec
      } else {
         $str = $str.$ins;
      }
   }
   
   return $str;
}
?>

Priklad pouzitia:

Kód:
$str = "123456789";
$ins = "abc";

$pos = 0;

echo strwpos($str, $ins, $pos); //vypise abc123456789
echo strwpos($str, $ins, $pos, true); //vypise abc456789

$pos = array(1,-4);

echo strwpos($str, $ins, $pos); //vypise 1abc2345abc6789
echo strwpos($str, $ins, $pos, true); //vypise 1abc5abc9


Naposledy upravil stenley dňa Str 19.01.11 20:50, celkovo upravené 1

_________________
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
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.02.07
Prihlásený: 21.02.10
Príspevky: 4000
Témy: 96 | 96

PHP Template Class

Autor: Tomáš Bončo
Popis: Trieda slúži na parsovanie template súborov, pričom výstupom je hotové HTML. Trieda obsahuje aj podtriedu (nadstavbu), ktorá urýchľuje zápis. Parser umoznuje vkladanie hodnot, cykly, podmienky, include
Blizsie info: www.comper.sk/Template (dokumentácia, príklady, changelog, download)
Posledná zmena na PCF: 25.06.09 12:25
Pozn.: V príklade je uvedená iba časť celej funkcionality triedy

Kód:
<?php

/**
 * @author Tomáš Bončo
 * @copyright 2010
 *
 * TENTO TEXT NESMIETE ZMAZAŤ
 *
 * Pre používanie tejto triedy musíte dodržať licenciu vo všetkých jej bodoch.
 *
 * Licencia: http://parser.comper.sk/Licencia
 * Homepage: http://parser.comper.sk
 *
 * Verzia 1.3 RC
 */

class Parser {
   
   var $File;
   var $Values = array();
   var $Blocks = array();
   var $Conditions = array();
   var $Content;
   var $Clean;
   var $Show;
   
   function Parse() {
         
      if(file_exists($this -> File)){
           
                /** BEGIN **/
         $File = fopen($this -> File,"r");
         $this -> Content = fread($File, filesize($this -> File));
       
         $this -> Content = str_replace("\n","°°°°°°",$this -> Content);
         $this -> Content = str_replace("\r","ˇˇˇˇˇˇ",$this -> Content);
         $this -> Content = str_replace("\t","´´´´´´",$this -> Content);   
         
         $this -> Includes();
         $this -> Blocks();
         $this -> Conditions();
         $this -> Values();
         
               /** END **/   
         $this -> Content = str_replace("°°°°°°","\n",$this -> Content);
         $this -> Content = str_replace("ˇˇˇˇˇˇ","\r",$this -> Content);
         $this -> Content = str_replace("´´´´´´","\t",$this -> Content);   
           
               /** SHOW **/   
         $this -> Show();
         } else die("PARSER: Súbor nenájdený!");
       
      }
       
      /**
       * @Includes
       * */
       
      function Includes() {   
         $a_Include = preg_split("#<!-- INCLUDE (.*?) -->#",$this -> Content,"-1", PREG_SPLIT_DELIM_CAPTURE );

         if(Count($a_Include) > 0){
            $r_Path = explode("/", $this -> File); $r_Path[Count($r_Path)-1] = null; $r_Path = implode("/", $r_Path);
            for($i = 0; $i < Count($a_Include); $i++){
               if($i % 2 !== 0){
                  $p_include = new QuickParse($r_Path.$a_Include[$i],$this -> Values, false, $this -> Blocks, $this -> Conditions, $this -> Clean);
                  $a_Include[$i] = null; $a_Include[$i] = $p_include -> Content;
               }
            }
         }
         
         $this -> Content = implode("",$a_Include);
         
         if(preg_match("#<!-- INCLUDE (.*?) -->#", $this -> Content) > 0) $this -> Includes();
      }
       
      /**
       * @Blocks
       * */

      function Blocks() {
            $a_Blocks = preg_split("#<!-- BEGIN (.*?) -->(.+?)<!-- END \\1 -->#", $this -> Content, "-1", PREG_SPLIT_DELIM_CAPTURE ); // Rozdeluje stránku do poľa           

                if(is_array($a_Blocks) && Count($a_Blocks) > 0){
             
                    $a_Page = $this -> SplitPage($a_Blocks);
                   
                    $a_Identifikator_Cyklu = $a_Page[0];    // Obsahuje identifikátor (názov) cyklu a jeho pozíciu v poli $a_Blocks
                    $a_Content = $a_Page[1];                // Obsahuje pozíciu v poli a obsah cyklu
               
                if(is_array($a_Identifikator_Cyklu) && Count($a_Identifikator_Cyklu) > 0){
                   
                foreach ($a_Identifikator_Cyklu as $r_Identifikator_Cyklu => $r_Pozicia){
                   
                   $r_ReplaceText = null;
                   $r_Identifikator_Cyklu = reset(explode("|´#´|",$r_Identifikator_Cyklu));
                   
                   if(!Empty($this -> Blocks[$r_Identifikator_Cyklu])){
                       
                      foreach($this -> Blocks[$r_Identifikator_Cyklu] as $r_Nazov_Premennej => $a_Hodnota_Premennej){
                       
                         $r_ReplaceText .= $a_Content[$r_Pozicia+1];
                               
                            foreach($this -> Blocks[$r_Identifikator_Cyklu][$r_Nazov_Premennej] as $r_Nazov => $r_Hodnota){
                               
                               $r_ReplaceText = str_replace("{". $r_Nazov ."}", $r_Hodnota, $r_ReplaceText);
                                       
                                        /* RESET */
                                        $r_Nazov = null;
                                        $r_Hodnota = null;
                                       
                            }
                      }
                           
                      $a_Blocks[$r_Pozicia] = null; //zmažeme identifikátor
                      $a_Blocks[$r_Pozicia+1] = $r_ReplaceText; // starý obsah nahradíme novým obsahom
                      $r_ReplaceText = null; // reset kvôli ďalšiemu cyklu
                           
                   } else { /* Pokial je cyklus definovaný v tpl ale nie v php */
                       
                      $a_Blocks[$r_Pozicia] = null; // zmažeme identifikátor
                      $a_Blocks[$r_Pozicia+1] = null; // zmažeme obsah
                        }
                             
                 }
                   
                 $this -> Content = implode("", $a_Blocks);
                 
                    if(preg_match("#<!-- BEGIN (.*?) -->(.+?)<!-- END \\1 -->#", $this -> Content) > 0) $this -> Blocks();
                }
            }
      }
       
      /**
       * @Conditions
       * */
       
      function Conditions() {   

                $a_Conditions = preg_split("#<!-- IF (.*?) -->(.+?)<!-- END \\1 -->#",$this -> Content,"-1", PREG_SPLIT_DELIM_CAPTURE );

                if(is_array($a_Conditions) && Count($a_Conditions) > 0){
                       
                $a_Page = $this -> SplitPage($a_Conditions);
                           
                    $a_Identifikator_Cyklu = $a_Page[0];    // Obsahuje identifikátor (názov) cyklu a jeho pozíciu v poli $a_Permisions
                    $a_Content = $a_Page[1];                // Obsahuje pozíciu v poli a obsah cyklu
       
               
                if(is_array($a_Identifikator_Cyklu) && Count($a_Identifikator_Cyklu) > 0){   
                   
                 foreach ($a_Identifikator_Cyklu as $r_Identifikator_Cyklu => $r_Pozicia){
                 
                    $r_Identifikator_Cyklu = reset( explode("|´#´|", $r_Identifikator_Cyklu) );
       
                    $a_ElseIf_in_Content = preg_split("#<!-- ELSEIF $r_Identifikator_Cyklu -> (.*?) -->#", $a_Content[$r_Pozicia+1], "-1", PREG_SPLIT_DELIM_CAPTURE ); // PRE IF - ELSEIF
                    $a_Else_in_Content = preg_split("#<!-- ELSE $r_Identifikator_Cyklu -->#",$a_Content[$r_Pozicia+1]); // PRE IF - ELSE
                    $a_Else_in_ElseIf = preg_split("#<!-- ELSE $r_Identifikator_Cyklu -->#",$a_ElseIf_in_Content[Count($a_ElseIf_in_Content)-1]); // PRE IF - ELSEIF - ELSE(!)
                    $a_ElseIf_in_Else = preg_split("#<!-- ELSEIF $r_Identifikator_Cyklu -> (.*?) -->#", $a_Else_in_Content[0], "-1", PREG_SPLIT_DELIM_CAPTURE ); // PRE IF - ELSEIF(!) - ELSE
       
                    if(!Empty($this -> Conditions[$r_Identifikator_Cyklu]) && $this -> Conditions[$r_Identifikator_Cyklu]){ /* Splnena IF podmienka */
                       
                       $a_Conditions[$r_Pozicia] = null;
                       $a_Conditions[$r_Pozicia+1] = $a_ElseIf_in_Else[0];
                           
                     
                    } else {  /* Nie je splnena IF podmienka */
                       
                            if(Count($a_ElseIf_in_Content) > 1 || Count($a_Else_in_ElseIf) > 1 || Count($a_Else_in_Content) > 0){ /* Existuje ELSEIF alebo ELSE */
                           
                                for($c_Current = 0; $c_Current < Count($a_ElseIf_in_Content); $c_Current = $c_Current + 2){ /* Posuvame sa v strome */   
                                 
                                    if($c_Current == ( Count($a_ElseIf_in_Content) - 1 ) && Count($a_Else_in_ElseIf) > 0){ /* Pokial je aktuálna vetva posledná v strome */
                                     
                                        if(!Empty($a_ElseIf_in_Content[$c_Current-1]) && !Empty($this -> Conditions[$a_ElseIf_in_Content[$c_Current-1]]) && $this -> Conditions[$a_ElseIf_in_Content[$c_Current-1]]){ /* Pokial je to  ELSEIF */
                                       
                                            $a_Conditions[$r_Pozicia] = null;
                                    $a_Conditions[$r_Pozicia+1] = $a_Else_in_ElseIf[0];
                                               
                                               
                                 } else { /* Pokial je to ELSE */
                                       
                                    $a_Conditions[$r_Pozicia] = null;
                                    $a_Conditions[$r_Pozicia+1] = (!Empty($a_Else_in_ElseIf[1]))? $a_Else_in_ElseIf[1] : null;
                                               
                                 } break;
                                       
                              } else { /* Pokial nie je posledna v strome */
                                 
                                        if($this -> Conditions[$a_ElseIf_in_Content[$c_Current-1]]){
                                           
                                            $a_Conditions[$r_Pozicia] = null;
                                            $a_Conditions[$r_Pozicia+1] = $a_ElseIf_in_Content[$c_Current];
                                           
                                            break;
                                               
                                 }
                              }
                           }
                        }
                        }
                    }
                         
                    $this -> Content = implode("",$a_Conditions);
                   
                }
            }
       
            if(preg_match("#<!-- IF (.*?) -->(.+?)<!-- END \\1 -->#", $this -> Content) > 0) $this -> Conditions();

      }
       
      /**
       * @Values
       * */
       
      function Values() {
          if(is_array($this -> Values) AND Count($this->Values) > 0){
         foreach($this -> Values as $r_Key => $r_Value)   {
             
            $r_Value = str_replace("{","&&#123&&;",$r_Value);
            $r_Value = str_replace("}","&&#125&&;",$r_Value);
             
            $this -> Content = str_replace("{". $r_Key ."}", $r_Value, $this -> Content);
         }}
         
         if(!is_bool($this -> Clean)) $this -> Clean = true;
            if($this -> Clean) $this -> Content = preg_replace("#{([^[:space:]\:\{\}\=\+\;]+)}#", "", $this -> Content);
         
         $this -> Content = str_replace("&&#123&&;","{",$this -> Content);
         $this -> Content = str_replace("&&#125&&;","}",$this -> Content);
      }
       
      /**
       * @Show
       * */
       
       function Show() {
          if(!is_bool($this -> Show)) $this -> Show = true;
          if($this -> Show) echo $this -> Content;       
           
            }
           
        /**
         * @Others
         * */
         
         function SplitPage($array){
           
            $a_Identifikator_Cyklu = array();
            $a_Content = array();
            $i = 0;
           
             foreach($array as $r_ArrayName => $r_ArrayValue) {
     
              $r_LocalInfo = round(($r_ArrayName/3)*10);
              $r_LocalInfo = substr($r_LocalInfo, -1); /* získame buď 1, 3 alebo 7 */
                           
                if($r_LocalInfo == 3) $a_Identifikator_Cyklu[$r_ArrayValue. "|´#´|". $i] = $r_ArrayName;
              elseif($r_LocalInfo == 7) $a_Content[$r_ArrayName] = $r_ArrayValue;
                       
              $i++;
                           
                /*
                  Celé je to cyklus 3 prvkov, pričom sú číslované:
                   0 - to čo je pred cyklom
                   1 - identifikátor cyklu
                   2 - obsah cyklu
                               
                   Pre nás sú podstatné iba posledné 2
                */
           }
           
            return array($a_Identifikator_Cyklu,$a_Content);
         }
}

/** Zrychlena funkcia **/

class QuickParse extends Parser {
   function QuickParse($sb,$ar,$vp = true,$bl = null,$pm = null, $cl = true){
      $this -> File = $sb;
      $this -> Values = $ar;
      $this -> Show = $vp;
      $this -> Blocks = $bl;
      $this -> Conditions = $pm;
      $this -> Clean = $cl;
      $this -> Parse();
   }
}
?>


Príklad s cyklami:
Kód:
####### PHP:
<?php

include "config.php";
include_once "parser.php";

$SQL = mysql_query("SELECT * FROM user");
$i = 0;

while ($FETCH = mysql_fetch_array($SQL)) {
    $Blocks["Content"][$i]["Nick"] = $FETCH["Nick"];
    $Blocks["Content"][$i]["ID"] = $FETCH["ID"];
    $i++;
}

$test = new parser;
$test -> File = "parser.tpl";
$test -> Values = array("Nadpis" => "Príklad 2. - Bloky", "Obsah" => "Toto je príklad na bloky");
$test -> Blocks = $Blocks;
$test -> Show = true;
$test -> Parse();
?>

####### TPL:

<h3>{Nadpis}</h3>
{Obsah}
<br>
<!-- BEGIN Content -->
{ID}:{Nick}<br>
<!-- END Content -->


Výsledok:
Kód:
Príklad 2. - Bloky
Toto je príklad na bloky
1:User1
2:User2
3:User5
5:User8
6:Tester
11:Comper


Offline

Správca fóra
Správca fóra
Užitočné a často používané skripty

Registrovaný: 27.07.07
Príspevky: 3955
Témy: 51 | 51
Bydlisko: Bratislava
Vek: 30
Napísal autor témyOffline : Str 25.02.09 23:30 |

Užitočné a často používané skripty


Najdenie pozicie vyskytu podretazca v retazci

Autor: stenley
Popis:
Citácia:
string strpos2 ( string $haystack, string $needle [, number $n=1 ] )

V php existuju vstavane funkcie na zistenie pozicie urciteho podretazca v zadanom retazci (texte). Vsetky umoznuju najst bud prvy alebo posledny vyskyt. Funkcia strpos2() predstavuje vylepsenu verziu standardnej funkcie strpos() v tom, ze mozete najst poziciu n-teho vyskytu v retazci, pricom je mozne vyhladavat zlava alebo zprava. Vratene cislo je pozicia podretazca od zaciatku textu. V pripade chyby vracia funkcia FALSE.

$n=-2 => najst predpredposledny vyskyt
$n=-1 => najst predposledny vyskyt
$n=0 => najst posledny vyskyt
$n=1 => najst prvy vyskyt
$n=2 => najst druhy vyskyt

Kód:
<?php
/**
 * strpos2()
 *
 * Najdenie pozicie vyskytu podretazca v retazci
 *
 * @author   stenley <stenley@webdev.sk>
 * @version   1.0
 */

function strpos2($haystack, $needle, $n=1) {
   if(strpos($haystack,$needle)===false) {
      return false;
   }

   if($n<=0) {
      $haystack = strrev($haystack);
      $needle = strrev($needle);
      $init = true;
   }
   
   $offset = 0;

   for($i=(int)!isset($init); $i<=abs($n); $i++,$offset++) {
      if(($offset = strpos($haystack,$needle,$offset))===false) {
         return false;
      }
   }   
   
   return $n>0 ? $offset-1 : strlen($haystack)-$offset+1-strlen($needle);
}
?>

Priklad pouzitia:

Kód:
$haystack = "abcabcabcabc";
$needle = "bc";

echo strpos2($haystack,$needle);   //vypise 1
echo strpos2($haystack,$needle,2);   //vypise 4
echo strpos2($haystack,$needle,0);   //vypise 10
echo strpos2($haystack,$needle,-3);   //vypise 1


Naposledy upravil stenley dňa Str 19.01.11 20:50, celkovo upravené 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
Offline

Užívateľ
Užívateľ
Užitočné a často používané skripty

Registrovaný: 26.11.06
Prihlásený: 04.05.15
Príspevky: 4123
Témy: 316 | 316
Bydlisko: HE/BA
NapísalOffline : Štv 26.02.09 18:42 |

Užitočné a často používané skripty


Je súbor obrázok?
Autor: p360t, stenley, Snacker (korekcie)
Popis: Zistenie, či je súbor, resp. názov súboru, obrázok.

Kód:
function isImage($file) {
   $suff = substr(strrchr($file, '.'), 1);
   if(!preg_match('/^(jpe?g|gif|bmp|png)$/', $suff)) { //v pripade potreby treba doplnit dalsie formaty obrazkov
      return false;
   }

   if(!function_exists('exif_imagetype')) {
      $imgInfo = @getimagesize($file);
      if(strstr($imgInfo['mime'],"image")!==false) {
         return true;
      }
   } else {
      if(@exif_imagetype($file)!==false) {
         return true;
      }
   }
   
   return false;
}
Použitie:
Kód:
if(isImage($nazov_suboru)) echo 'Je to obrázok';


//zmeneny povodny zdrojak za efektivnejsi (stenley)


_________________
Desktop: CASE: Cooler Master Centurion 532 MB: ASUS P5Q PRO Turbo CPU: Intel Core 2 Quad Q6600@2,4GHz FSB 1066MHz RAM: A-Data Vitesta 2×2GB 800MHz Cl 4-4-4-12 2T GPU: PowerColor PCS+ HD6950 HDD: Seagate Barracuda 500GB 7200rpm ODD1: LG DVD+/-RW + LS(PATA) ODD2:LG DVD+/-RW(SATA) PSU: LCD: DELL U2414M 24" 1920x1200
Offline

Užívateľ
Užívateľ
Užitočné a často používané skripty

Registrovaný: 26.11.06
Prihlásený: 04.05.15
Príspevky: 4123
Témy: 316 | 316
Bydlisko: HE/BA
NapísalOffline : Štv 26.02.09 18:59 |

Užitočné a často používané skripty


Výpis obsahu adresara
Autor: pravdepodobne Márius Rak(Flety) :)
Popis: Vypísanie všetkých súborov a priečinkov zo zadaného priečinka
Kód:
$path = 'priečinok/';
$dir_handle = @opendir($path) or die("Unable to open $path");
while ($file = readdir($dir_handle))
{
        if($file != '.' && $file != '..')
        {
                echo $file;
        }
}
closedir($dir_handle);

Prípadne ak chcete len súbory:
Kód:
$path = 'priečinok/';
$dir_handle = @opendir($path) or die("Unable to open $path");
while ($file = readdir($dir_handle))
{
        if($file != '.' && $file != '..')
        {
                if(is_file($file)echo $file);
        }
}
closedir($dir_handle);

Alebo len priečinky:
Kód:
$path = 'priečinok/';
$dir_handle = @opendir($path) or die("Unable to open $path");
while ($file = readdir($dir_handle))
{
        if($file != '.' && $file != '..')
        {
                if(is_dir($file)echo $file);
        }
}
closedir($dir_handle);

Použitie: Do premennej $path sa zadá priečinok. Ostatné sa už urobí samo. Tvar výpisu je možne upravovať, snaď všetci viete ako :)


_________________
Desktop: CASE: Cooler Master Centurion 532 MB: ASUS P5Q PRO Turbo CPU: Intel Core 2 Quad Q6600@2,4GHz FSB 1066MHz RAM: A-Data Vitesta 2×2GB 800MHz Cl 4-4-4-12 2T GPU: PowerColor PCS+ HD6950 HDD: Seagate Barracuda 500GB 7200rpm ODD1: LG DVD+/-RW + LS(PATA) ODD2:LG DVD+/-RW(SATA) PSU: LCD: DELL U2414M 24" 1920x1200
Offline

Užívateľ
Užívateľ
Užitočné a často používané skripty

Registrovaný: 16.07.07
Prihlásený: 01.07.15
Príspevky: 1078
Témy: 81 | 81
Bydlisko: pp/za

Zistenie veľkosti priečinka

Autor: neznámy (nájdené na nete)
Popis Pomocou tejto funkcie zistíte veľkosť daného priečinka

Kód:
function directory_size($directory) {
      $directorySize=0;     
      if ($dh = @opendir($directory)) {
         while (($filename = readdir ($dh))) {
           if ($filename != "." && $filename != "..") {
             if (is_file($directory."/".$filename)){
                $directorySize += filesize($directory."/".$filename);
             }   
             if (is_dir($directory."/".$filename)){
                $directorySize += directory_size($directory."/".$filename);
             }
           }
        }
      }
      @closedir($dh);
      return $directorySize;
  }


Konkrétny príklad vypíše veľkosť adresára foto v megabajtoch. :
Kód:
   
   $bajt = 1;
   $kilobajt = 1024;   
   $megabajt = 1048576;
   $directory = "foto/";
   $totalSize = round((directory_size($directory) / $megabajt), 2);
   echo "Veľkosť dát spolu: <br><b>".$totalSize. "</b>";


_________________
NB: MacBook Pro 13 Retina
Mobil: BlackBerry Classic
Offline

Správca fóra
Správca fóra
Užitočné a často používané skripty

Registrovaný: 27.07.07
Príspevky: 3955
Témy: 51 | 51
Bydlisko: Bratislava
Vek: 30
Napísal autor témyOffline : Uto 24.03.09 11:02 |

Užitočné a často používané skripty


Predpoved pocasia (Google)

Autor: stenley
Popis:
Nasledujuca trieda sluzi na ziskanie údajov o pocasi z Google API pre zadane mesto na niekolko dni. Informacie sa ukladaju do pola, ktoreho struktura je popisana v prikladoch pouzitia. Je to len ukazka, v reali by bolo vhodnejsie a rychlejsie xml-ko najskor stiahnut, ulozit na disk (napr. cez cron kazdu hodinu) a nasledne s nim pracovat. Takisto, pouzit vlastne obrazky, tj. neziskavat ich z google.com. V pripade, ze je zadane mesto, ktore Google nepozna, vracia sa prazdne pole.
Kód:
<?php
/**
 * GoogleWeather
 *
 * Predpoved pocasia (google)
 *
 * @author   stenley <stenley@webdev.sk>
 * @version   1.2
 */

class GoogleWeather {
   var $lang = "sk";
   var $country = "Slovakia";
   var $charset = "utf-8";
   
   function getWeatherObj($city) {
      libxml_use_internal_errors(true);
      $city = urlencode($city);
      $data = @file_get_contents("http://www.google.com/ig/api?weather=".$city.",".$this->country."&hl=".$this->lang);
      $data = iconv("ISO-8859-2",$this->charset,$data);
      $xmlobj = simplexml_load_string($data);
      $errors = libxml_get_errors();
       
      return (empty($errors)) ? $xmlobj : FALSE;
   }
   
   function getWeatherInfo($city) {
      $weather = array();
      $obj = $this->getWeatherObj($city);
      
      if(is_object($obj)) {
         $data = $obj->xpath("/xml_api_reply/weather/current_conditions");
         if(!empty($data)) {
            $weather[] = array(
               "condition"      => $this->getAttr($data[0]->xpath("condition")),
               "temp_f"         => $this->getAttr($data[0]->xpath("temp_f")),
               "temp_c"         => $this->getAttr($data[0]->xpath("temp_c")),
               "humidity"      => $this->getAttr($data[0]->xpath("humidity")),
               "icon"         => $this->getAttr($data[0]->xpath("icon")),
               "wind_condition"   => $this->getAttr($data[0]->xpath("wind_condition"))
            );
         }
                  
         $data = $obj->xpath("/xml_api_reply/weather/forecast_conditions");
         if(!empty($data)) {
            foreach($data as $value) {
               $weather[] = array(
                  "day_of_week"   => $this->getAttr($value->xpath("day_of_week")),
                  "low"      => $this->getAttr($value->xpath("low")),
                  "high"      => $this->getAttr($value->xpath("high")),
                  "icon"      => $this->getAttr($value->xpath("icon")),
                  "condition"   => $this->getAttr($value->xpath("condition"))
               );
            }
         }
      }
      
      return $weather;
   }
   
   function getAttr($obj) {
      if(is_object($obj[0])) {
         $attr = $obj[0]->attributes();
      }
      return (isset($attr['data'])) ? (string)$attr['data'] : '';
   }
}
?>

Priklad pouzitia:
Kód:
$gw = new GoogleWeather();
$weather = $gw->getWeatherInfo("Bratislava");   //pocasie pre Bratislavu
print_r($weather);
//$weather = $gw->getWeatherInfo("Kosice");   //pocasie pre Kosice
//print_r($weather);


Vysledok:
Kód:
Array
(
    [0] => Array
        (
            [condition] => Prevažne oblačno
            [temp_f] => 45
            [temp_c] => 7
            [humidity] => Vlhkosť: 61%
            [icon] => /images/weather/mostly_cloudy.gif
            [wind_condition] => Vietor: J s rýchlosťou 0 km/h
        )

    [1] => Array
        (
            [day_of_week] => Ut
            [low] => -2
            [high] => 8
            [icon] => /images/weather/chance_of_rain.gif
            [condition] => Občasný dážď
        )

    [2] => Array
        (
            [day_of_week] => St
            [low] => 2
            [high] => 5
            [icon] => /images/weather/chance_of_snow.gif
            [condition] => Občasné sneženie
        )

    [3] => Array
        (
            [day_of_week] => Št
            [low] => 1
            [high] => 8
            [icon] => /images/weather/chance_of_rain.gif
            [condition] => Občasný dážď
        )

    [4] => Array
        (
            [day_of_week] => Pi
            [low] => 0
            [high] => 10
            [icon] => /images/weather/chance_of_rain.gif
            [condition] => Občasný dážď
        )

)

Vysvetlivky:
Kód:
[0] - pole s aktualnym pocasim
[1] - pole s pocasim na dnes
[2] - pole s pocasim na zajtra
[3] - pole s pocasim na pozajtra
[4] - pole s pocasim na popozajtra
[condition] - slovny popis pocasia
[temp_f] - teplota vo F
[temp_c] - teplota v C
[humidity] - vlhkost vzduchu
[icon] - obrazok (slnko, dazd, ...)
[wind_condition] - veterne podmienky
[day_of_week] - skratka nazvu dna
[low] - najnizsia teplota
[high] - najvyssia teplota

Prakticky priklad:
Kód:
$gw = new GoogleWeather();

$arrCity = array("Bratislava","Kosice","Poprad","Zilina","Nitra","Trnava","Trencin");
$content = '<table>';
foreach($arrCity as $city) {
   $weather = $gw->getWeatherInfo($city);
   
   if(!empty($weather)) {
      $content .= '<tr>';
      $content .= '<td rowspan="2"><img src="'.$weather[1]['icon'].'"></td>';
      $content .= '<td width="120"><strong>'.$city.'</strong></td>';
      $content .= '<td>'.$weather[1]['high'].'&deg;C / '.$weather[1]['low'].'&deg;C</td>';
      $content .= '</tr><tr>';
      $content .= '<td colspan="2">'.$weather[1]['condition'].'</td>';
      $content .= '</tr>';
   }
}
$content .= '</table>';
echo $content;


Priblizne takto by mohol vyzerat skript na pravidelne stahovanie aktualneho pocasia pre zvolene mesta a nasledne ulozenie do suboru pre neskorsie pouzitie:
Kód:
<?php
$config['cities'] = array('Bratislava', 'Kosice', 'Poprad', 'Zilina', 'Nitra', 'Trnava', 'Trencin');
$config['fields'] = array('condition', 'temp_f', 'temp_c', 'humidity', 'icon', 'wind_condition');
$config['country'] = 'Slovakia';
$config['lang'] = 'sk';
$config['maxloops'] = 5;

$weather = array();
foreach($config['cities'] as $key => $city)
{
    $weather[$key] = array();
   $i = 0;
   
   do {
       $url = 'http://www.google.com/ig/api?weather='.$city.','.$config['country'].'&hl='.$config['lang'];

       if(function_exists('curl_init'))
       {
         $ch = curl_init();
         curl_setopt($ch, CURLOPT_URL, $url);
         curl_setopt($ch, CURLOPT_HEADER, 0);
         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
         curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1);
         curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0');

         $data = curl_exec($ch);
         curl_close($ch);
      }
      elseif(ini_get('allow_url_fopen'))
      {
          $data = file_get_contents($url);
        }
        else
        {
         exit();
      }
      
      $i++;

   } while($data == 'Unsupported API' && $i <= $config['maxloops']);

   if($i <= $config['maxloops'])
   {
      $xml = simplexml_load_string($data);
      $res = $xml->xpath('weather/current_conditions');

      if(!empty($res))
      {
         foreach($config['fields'] as $field)
         {
             $weather[$key][$field] = '';
            
            if(isset($res[0]->$field))
            {
               $attrs = $res[0]->$field->attributes();
                $weather[$key][$field] = (string)$attrs['data'];
             }
         }
      }
   }
}

$dom = new DOMDocument('1.0', 'utf-8');
$dom->formatOutput = true;
$root = $dom->createElement('weather');
$dom->appendChild($root);
$date = $dom->createElement('date', date('Y-m-d H:i:s'));
$root->appendChild($date);

foreach($config['cities'] as $key => $city)
{
    $item = $dom->createElement('item');
   $root->appendChild($item);
   
   $elm = $dom->createElement('city', $city);
   $item->appendChild($elm);

   foreach($config['fields'] as $field)
   {
      $elm = $dom->createElement($field, $weather[$key][$field]);
      $item->appendChild($elm);
   }
}

$dom->save('weather.xml');
?>


Naposledy upravil stenley dňa Uto 21.08.12 18:36, celkovo upravené 10

_________________
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
Offline

Užívateľ
Užívateľ
Užitočné a často používané skripty

Registrovaný: 11.02.09
Prihlásený: 01.07.15
Príspevky: 2038
Témy: 137 | 137
Bydlisko: Liptovský M...

Kalendar

Autor: Ja
Funkcia: Zobrazi stlpcovi kalendar (aktualny mesiac) a farebne vyznaci aktualny den
Verzia PHP: funguje pod PHP 5.1.0 a vyssie, nizsie verzie netestovane

Kód:
<?php
  $mesiac=date("m");$rok=date("Y");                   //zistenie mesiaca a roka
  $prvyDen=date("w",mktime(0,0,0,$mesiac,1,$rok));    //ktorym dnom zacina mesiac, marec 2009 zacina nedelou cize 7. dnom
     if ($prvyDen==0) $prvyDen=7;                     //nedela je 0. den, cize podmienka zabezpeci aby bol 7.
  $pocetDni=date("t",mktime(0,0,0,$mesiac,1,$rok));   //pocet dni v mesiaci
  $pocetStlpcov=ceil(($pocetDni+$prvyDen-1)/7);       //kolko stlpcov bude kalendar potrebovat, bud 4,5 alebo 6
  $cislo=0;                                           //pomocou inkremetacie tohto cisla sa vyplna pole kalendara
  $pole[$pocetStlpcov-1][7-1];                        //pole kalendara
  $month=Array(1=>"Januar","Februar","Marec","April","Maj","Jun","Jul","August","September","Oktober","November","December");
 
 for ($st=0; $st<$pocetStlpcov; $st++)  //cyklus pre vyplnenie formulara
  for ($ri=0; $ri<7; $ri++)             /*dni prveho tyzdna v kalendary ktore patria do minuleho mesiaca,takisto aj dni
                                          posledneho tyzdna patriace do dalsieho mesiaca sa vyplnia nulov */
      if ((($ri<$prvyDen-1)&&($st==0)) ||($cislo>=$pocetDni)) {$pole[$st][$ri]=0;}
        else {$cislo++; $pole[$st][$ri]=$cislo;}   //vyplnenie pola inkrementujucou prem. $cislo (od 1 do $pocetDni)

//hlavicka kalendara
echo "<TABLE border=\"1\" style=\"border-collapse:collapse\"><th height=\"30\" bgcolor=\"gray\" colspan=\"8\">".$month[(int)$mesiac]." ".date("Y")."</th> ";

//cyklus pre vypisanie tabulky, pole sa vypisuje opacne (po riadkoch, naplnane bolo po stlpcoch)
for ($ri=0;$ri<7; $ri++){ echo "<tr><td bgcolor=\"lightblue\">";  //riadky, farba prveho stlpca s dnami

                      //vyplnenie prveho stlpca tabulky nazvami dnov podla toho na ktorom riadku cyklus je           
                          if ($ri==0) echo "Pondelok";if ($ri==1) echo "Utorok";if ($ri==2) echo "Streda";
                          if ($ri==3) echo "Stvrtok";if ($ri==4) echo "Piatok";if ($ri==5) echo "Sobota";
                          if ($ri==6) echo "Nedela";echo "</td>";
    for ($st=0; $st<$pocetStlpcov; $st++) {           //vypise jednotlive bunky riadku
        echo "<td ";
        if ($pole[$st][$ri]==date("d")) echo "bgcolor=\"lightgray\" ";  //farba bunky s aktualnym datumom
        echo "style=\"text-align:center;width:22;height:25;\">";        //format buniek
        if ($pole[$st][$ri]==0) echo "&nbsp";        //vypise medzeru ak ma pole hodnotu 0
            else echo $pole[$st][$ri];               //inak vypise hodnotu pola (cislo dna - prem $cislo)
        echo"</td>";       }
  echo "</tr>";      }
echo "</table>"   

?>


Alternatívny kód kalendára

Kód:
<?php
/**
 * @author   stenley <stenley@webdev.sk>
 * @version   1.0
 */

$month          = date('n');    //cislo mesiaca
$year           = date('Y');     //rok

$weekday_abbr   = array(1 => 'Po', 'Ut', 'St', 'St', 'Pi', 'So', 'Ne');

$mktime         = mktime(0, 0, 0, $month, 1, $year);      //mktime pre 1.den daneho mesiaca a roku
$month_days     = date('t', $mktime);                        //pocet dni v mesiaci
$weekday_first  = date('N', $mktime);                        //den v tyzdni, kedy je prveho

$days           = range(1, $month_days);
$days           = array_pad($days, -($weekday_first + $month_days - 1), '&nbsp;');
$days           = array_pad($days, ceil(count($days) / 7) * 7, '&nbsp;');
$days           = array_chunk($days, 7);

echo '<table><tr><th>'.implode('</th><th>', $weekday_abbr).'</th></tr>';

foreach($days as $week)
{
    echo '<tr>';
   
    foreach($week as $day)
    {
       echo '<td>'.$day.'</td>';
    }
   
    echo '</tr>';
}

echo '</table>';
?>


Offline

Správca fóra
Správca fóra
Užitočné a často používané skripty

Registrovaný: 27.07.07
Príspevky: 3955
Témy: 51 | 51
Bydlisko: Bratislava
Vek: 30
Napísal autor témyOffline : Uto 23.06.09 23:01 |

Užitočné a často používané skripty


Export dat z MySQL do XML

Autor: stenley
Poziadavky: PHP5
Popis:
Trieda MySQL2XML sluzi na export dát z MySQL do XML. Umoznuje ulozit vysledok lubovolneho sql prikazu, exportovat data z urcitych tabuliek alebo celej databazy. Trieda neriesi pripojenie k databaze.

Kód:
<?php
/**
 * MySQL2XML
 *
 * Export dat z MySQL do XML
 *
 * @author   stenley <stenley@webdev.sk>
 * @version   1.0
 */

class MySQL2XML
{
   private $dom;
   
   public $database      = '';
   public $tables         = array();
   public $formatOutput   = TRUE;
   public $encoding      = 'utf-8';
   public $rootElement      = 'export';
   public $rowElement      = 'row';
   
   public function generate($query = NULL) {
      $this->dom = new DOMDocument('1.0', $this->encoding);
      $this->dom->formatOutput = $this->formatOutput;
      
      $rootElm = $this->addElement($this->dom, $this->rootElement);
      
      if(!is_null($query)) {
         $res = @mysql_query($query);
         if($res !== FALSE) {
            if(@mysql_num_rows($res) > 0) {
               $arrCols = $this->getCols($res);
               
               while($row = @mysql_fetch_assoc($res)) {
                  $rowElm = $this->addElement($rootElm, $this->rowElement);
                  foreach($arrCols as $colname) {
                     $colElm = $this->addElement($rowElm, $colname, $row[$colname]);
                  }
               }
               
               return TRUE;
            }
         }
      } else {
         if(empty($this->tables)) {
            $this->getTables();
         }
         
         foreach($this->tables as $table) {
            $res = @mysql_query('SELECT * FROM '.$table);
            if($res !== FALSE) {
               if(@mysql_num_rows($res) > 0) {
                  $arrCols = $this->getCols($res);
                  $tableElm = $this->addElement($rootElm, $table);
                  
                  while($row = @mysql_fetch_assoc($res)) {
                     $rowElm = $this->addElement($tableElm, $this->rowElement);
                     foreach($arrCols as $colname) {
                        $colElm = $this->addElement($rowElm, $colname, $row[$colname]);
                     }
                  }
               }
            }
         }
         
         return TRUE;
      }
      
      return FALSE;
   }
   
   public function save($file) {
      if(!empty($file)) {
         $fp = @fopen($file, 'w');
         if($fp !== FALSE) {
            @fwrite($fp, $this->getXML());
         }
      }
   }
   
   public function getXML() {
      return $this->dom->saveXML();
   }
   
   private function addElement(&$root, $name, $value = null, $attributes = array()) {
      if(is_null($value)) {
         $elm = $this->dom->createElement($name);
      } else {
         $elm = $this->dom->createElement($name, $value);
      }
      
      foreach($attributes as $attrName => $attrValue) {
         $attr = $this->dom->createAttribute($attrName);
         $elm->appendChild($attr);
         $value = $this->dom->createTextNode($attrValue);
         $attr->appendChild($value);
      }
      
      $root->appendChild($elm);
      
      return $elm;
   }
   
   private function getCols($res) {
      $arrCols = array();
      
      $numCols = @mysql_num_fields($res);
      for($i = 0; $i < $numCols; $i++) {
         $arrCols[] = @mysql_field_name($res, $i);            
      }
      return $arrCols;
   }
   
   private function getTables() {
      if($this->database == '') {
         return FALSE;
      }
      
      $res = @mysql_query('SHOW TABLES FROM '.$this->database);
      if($res !== FALSE) {
         $this->tables = array();
         while($row = @mysql_fetch_assoc($res)) {
            $this->tables[] = array_shift($row);
         }
      }
   }
}
?>

Priklady pouzitia:

1. Konkretny sql prikaz (vypis vysledneho xml retazca):
Kód:
$export = new MySQL2XML();
$export->generate("SELECT * FROM tblname");
echo $export->getXML();

2. Vybrane tabulky (vypis vysledneho xml retazca):
Kód:
$export = new MySQL2XML();
$export->tables = array('tblname1', 'tblname2');
$export->generate();
echo $export->getXML();

3. Cela databaza (vypis vysledneho xml retazca):
Kód:
$export = new MySQL2XML();
$export->database = 'dbname';
$export->generate();
echo $export->getXML();

4. Ak chcete namiesto vypisania ulozit vysledny xml retazec do suboru napr. mysql.xml:
Kód:
$export->save('mysql.xml');


Naposledy upravil stenley dňa Str 19.01.11 20:51, celkovo upravené 1

_________________
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
Offline

Užívateľ
Užívateľ
Užitočné a často používané skripty

Registrovaný: 26.11.06
Prihlásený: 04.05.15
Príspevky: 4123
Témy: 316 | 316
Bydlisko: HE/BA
NapísalOffline : Str 08.07.09 14:21 |

Užitočné a často používané skripty


Skopírovanie všetkých súborov zo zadaného priečinka na FTP

Autor:Márius Rak(Flety)
Popis: Skopíruje všetky súbory z priečinku na FTP do priečinku na vašom serveri
Kód:
function ftp_full_copy($connect, $source, $target, $lenght)
{
        foreach(ftp_nlist($connect, $source) as $file)
        {
                if(substr($file, -1) == '.' || substr($file, -2) == '..')
                {
                        continue;
                }
                if(ftp_size($connect, $file) == -1)
                {
                        @mkdir('../'.substr($file, 15 + $lenght));
                        ftp_full_copy($connect, $file, $target, $lenght);
                }
                else
                {
                        ftp_get($connect, '..'.substr($file, 15 + $lenght), $file, FTP_BINARY);
                }
        }
}
Použitie:
Kód:
//Pripojenie k FTP
$connect = ftp_connect('ftp.server');
$login_result = ftp_login($connect, 'meno', 'heslo');
//Použitie funkcie
ftp_full_copy($connect, 'zdroj/na/FTP', 'ciel/na/vasom/serveri', strlen('zdroj/na/FTP'));


_________________
Desktop: CASE: Cooler Master Centurion 532 MB: ASUS P5Q PRO Turbo CPU: Intel Core 2 Quad Q6600@2,4GHz FSB 1066MHz RAM: A-Data Vitesta 2×2GB 800MHz Cl 4-4-4-12 2T GPU: PowerColor PCS+ HD6950 HDD: Seagate Barracuda 500GB 7200rpm ODD1: LG DVD+/-RW + LS(PATA) ODD2:LG DVD+/-RW(SATA) PSU: LCD: DELL U2414M 24" 1920x1200
Offline

Užívateľ
Užívateľ
Užitočné a často používané skripty

Registrovaný: 26.12.06
Prihlásený: 17.05.15
Príspevky: 4021
Témy: 180 | 180
Bydlisko: Nitra / Bra...
Vek: 22
NapísalOffline : Štv 09.07.09 23:05 |

Užitočné a často používané skripty


Export dat z MySQL do .sql súboru

Autor: emer (http://emer.grafika4u.sk/clanky/php-mysql/export-dat-z-mysql-do-sql-suboru)
Požiadavky: PHP5, MySQL
Popis: Potrebujete exportovať svoju databázu ako SQL príkaz/y za pomoci PHP ? Táto trieda Vám to umožňuje, so základnými možnostami. (používať auto_increment, if not exists, drop table?). Výsledný SQL dotaz možete uložiť do .sql súboru alebo vypísať priamo v scripte.

Kód:
class BackUpDB{
  var $DropTables = false;
  var $AddIfNotExists = false;
  var $AddAI = true;
  var $FileName = '';
 
  function __construct($host, $user, $pass, $database){
    $link = mysql_connect($host,$user,$pass) or die(mysql_error());
     mysql_select_db($database,$link) or die(mysql_error());
  }
 
  function GenerateSQL($Tables = ''){
    $SQL = '';
    if($Tables == ''){
      $ShowTables = mysql_query("SHOW TABLES");
      $Tables = array();
      while($r = mysql_fetch_array($ShowTables)){
        $Tables[] = $r[0];
      }
    }else{
      $Tables = is_array($Tables) ? $Tables : explode(',', $Tables);
    }
    foreach($Tables as $Table){
      $CreateTable = mysql_query("SHOW CREATE TABLE `$Table`");
      if($this->DropTables == true){
        $SQL .= 'DROP TABLE `'.$Table.'`;'."\n\n";
      }
      $SQL .= mysql_result($CreateTable, 0, 1).";\n\n";
      $Data = mysql_query("SELECT * FROM `$Table`");;
      $DescribeTable = mysql_query("DESCRIBE `$Table`");
      $Fields = array();
      while($r = mysql_fetch_array($DescribeTable)){
        $Fields[] = $r['Field'];
      }
      $DataNum = mysql_num_rows($Data);
      if($DataNum != 0){
        $SQL .= 'INSERT INTO `'.$Table.'` (';
        for($i=0;$i<count($Fields);$i++){
          $SQL .= '`'.$Fields[$i].'`'.($i == count($Fields)-1 ? '' : ', ');
        }
        $SQL .= ') VALUES '."\n";
        $Y = 0;
        while($r = mysql_fetch_array($Data)){
          $Y++;
          $SQL .= '(';
          $FieldsNum = count($r);
          for($i=0;$i<$FieldsNum/2;$i++){
            $SQL .= (is_numeric($r[$i]) || $r[$i] == 'NULL' ? $r[$i] : '\''.$r[$i].'\'').($i < ($FieldsNum/2)-1 ? ', ' : '');
          }
          $SQL .= ($Y == $DataNum ? ')' : '),'."\n");
        }
      }
      $SQL .= ";\n\n";
    }
    if($this->AddAI == false){
      $SQL = preg_replace("/AUTO_INCREMENT=([0-9]{1,})/", "", $SQL);
    }
    if($this->AddIfNotExists == true){
      $SQL = str_replace('CREATE TABLE', 'CREATE TABLE IF NOT EXISTS', $SQL);
    }
    if($this->FileName == ''){
      return $SQL;
    }else{
      if(!(substr($this->FileName, -4) == '.sql')){
        $this->FileName .= '.sql';
      }
      $handle = fopen($this->FileName,'w+');
      fwrite($handle,$SQL);
      fclose($handle);
      return $this->FileName.' úspešne vygenerovaný.';
    }
  }
}

Použitie:
Kód:
$BackUp = new BackUpDB('localhost', 'root', '', 'dbname');
$BackUp->DropTables = true; //poskytneme zmazanie tabuliek
$BackUp->AddIfNotExists = true; //ku CREATE TABLE pridáme IF NOT EXISTS
$BackUp->AddAI = true; //do štruktúry pridáme aj nasledujúci AI
$BackUp->FileName = 'zalohadatabazy'; //zadáme meno súboru
echo $BackUp->GenerateSQL(); //vygenerujeme SQL dotazy pre všetky tabulky. Ak by sme chceli exportovať iba štruktúru a obsah tabuliek tblname1 a tblname2, zadáme $BackUp->GenerateSQL('tblname1,tblname2');


_________________
Sorry za prelkepy
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 19.12.09
Prihlásený: 01.02.11
Príspevky: 10
Témy: 1 | 1
NapísalOffline : Sob 19.12.09 21:52 |

Užitočné a často používané skripty


Autor: VireL
Popis: Script pre upload s funkciou povolenia pripon(whitelist)
Uploadne subor s povolenou priponou a velkostou do zvoleneho vytvoreneho priecinka.
Pripony zadavajte bez bodiek.

Kód:
<?php
###########################
#------Upload script------#
#--------By VireL---------#
#----------For------------#
#-http://www.pcforum.sk/--#
#------Thx for using------#
###########################

//Velkost v B
define("VELKOST", "150528");
//Priecinok kde ukladat subory
$priecinok = "uploads";
//Povolene pripony
$pripony = array("gif", "GIF", "jpg", "JPG", "jpeg", "JPEG", "png", "PNG", "rar", "RAR", "zip", "ZIP");
//Rozdelenie pripon
$b = 0;
foreach($pripony as $pripona)
{
  $b++;
  if(count($pripony) == $b)
    {$allow .= "\.".$pripona;}
  else
    {$allow .= "\.".$pripona."|";}
}
//Urcenie ID nazvu suboru, podla poctu suborov
$id = 0;
$open = opendir($priecinok);
   while ($files = readdir($open))
   {
      $filename = $files;
      if ($filename != "." and $filename != "..")
      {
         $id++;       
      }
   }
//Formular
echo "<form method='post' action'".$_SERVER['PHP_SELF']."' enctype='multipart/form-data'>";
echo "<input type='file' name='subor'><br>";
echo "<input type='submit' name='upload' value='Upload'></form>";
//Podmienka ci bol odoslany formular, ci subor existuje a ci pripona suhlasi
if(isset($_POST['upload']) and
is_uploaded_file($_FILES["subor"]["tmp_name"]) and
preg_match("/(".$allow.")$/", $_FILES["subor"]["name"]))
{
  if($_FILES["subor"]["size"] <= VELKOST)//Kontrola velkosti
  {
    if(!file_exists($priecinok."/".$id."-".$_FILES["subor"]["name"]))//Ci neexistuje subor s rovnakym menom
    {
      $meno = $id."-".$_FILES["subor"]["name"];
      move_uploaded_file($_FILES["subor"]["tmp_name"], $priecinok."/".$meno);
    }
    else//Ak ano funkcia rand() zvoli nahodnu hodnotu
    {
      $meno = $id."-".rand(0, 99999)."-".$id."-".$_FILES["subor"]["name"];
      move_uploaded_file($_FILES["subor"]["tmp_name"], $priecinok."/".$meno);
    }
    echo "<a href='".$priecinok."/".$meno."'>Link na subor</a>";//Link na subor
  }
  else//Ak je velkost presahujuca
  {
    echo "Subor je prilis velky :(";
  }
}

?>


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 27.06.09
Prihlásený: 16.06.15
Príspevky: 154
Témy: 19 | 19
Bydlisko: Levice, Slo...
NapísalOffline : Štv 24.12.09 11:21 |

Užitočné a často používané skripty


Oseknutie reťazca po medzere

Autor: neXor
Poziadavky: PHP5
Popis:
Funkcia cutString oreže reťazec na určitú veľkosť, bez toho aby reťazec orezalo v strede slova. Na koniec pridá tri bodky (...).

Kód:
<?php
/*
* Oseknutie reťazca
*
* Oseknutie reťazca na určitú veľkosť
*
* @author   neXor <neXor.sk@gmail.com>
* @version   1.1
* @license   http://opensource.org/licenses/gpl-license.php GNU Public License
*/


function cutString ( $text, $limit = 20, $end = "..." ) {
    if ( strlen ( $text ) <= $limit ) {
       return $text;
    } else {
       $po = substr ( $text, 0, $limit );
       $pos = strrpos ( $po, " " );
       $koniec = substr ( $po, 0, $pos );
       return $koniec . $end;
    }
}
?>


Príklad použitia
Kód:
$text = "Ahoj, ako sa mas? Ja sa mam dobre a ty?";
cutString ( $text );


 [ Príspevkov: 37 ] Choď na stránku: 1, 2 ďalšia


Užitočné a často používané skripty



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

Tema pre casto pouzivane skripty

[ Choď na stránku:Choď na stránku: 1 ... 6, 7, 8 ]

v PHP, ASP

223

10929

Uto 08.01.13 9:18

dulius

V tomto fóre nie sú ďalšie neprečítané témy.

FAQ - často kladené otázky, užitočné rady..

v Operačné systémy Microsoft

2

1898

Pon 14.10.13 18:14

JanoF

Táto téma je zamknutá, nemôžete posielať nové príspevky alebo odpovedať na staršie.

FAQ - často kladené otázky, užitočné rady a porovnania

v Notebooky a netbooky

0

4201

Str 12.05.10 14:36

Tomas1

V tomto fóre nie sú ďalšie neprečítané témy.

hack- používane názvy

v PHP, ASP

16

791

Ned 03.05.09 18:32

lolko

V tomto fóre nie sú ďalšie neprečítané témy.

Používané pluginy v Firefoxu?

[ Choď na stránku:Choď na stránku: 1, 2 ]

v Sieťové a internetové programy

33

2731

Uto 31.07.07 16:30

KaktusBR

Táto téma je zamknutá, nemôžete posielať nové príspevky alebo odpovedať na staršie.

Nejake skripty...

v Redakčné systémy

0

1628

Str 07.09.05 2:42

JanoF

V tomto fóre nie sú ďalšie neprečítané témy.

CGI-skripty

v HTML, XHTML, XML, CSS

10

211

Sob 03.07.10 15:05

shaggy

V tomto fóre nie sú ďalšie neprečítané témy.

Php skripty

v PHP, ASP

10

4449

Štv 28.09.06 11:57

mokus

V tomto fóre nie sú ďalšie neprečítané témy.

Užitočne odkazy

v Webdesign

29

9650

Uto 02.06.15 21:45

JanoF

V tomto fóre nie sú ďalšie neprečítané témy.

Užitočné odkazy

v Webhosting a servery

7

2228

Str 28.01.15 4:17

JanoF

V tomto fóre nie sú ďalšie neprečítané témy.

PHP skripty bez ?>

v PHP, ASP

5

104

Pon 10.06.13 22:59

shaggy



Powered by phpBB 3.x.x © 2005 - 2015 PCforum, webhosting by WebSupport, edited by JanoF