Archive for the ‘Infuzii’ tag
Yahoo! Messenger Panel - PHP-Fusion v6
Deşi am făcut-o acum 3-4 luni, tocmai acum câteva zile am publict-o.
Ce ştie să facă?
- fiecare utilizator îşi poate adăuga ID-ul în baza de date pentru a cunoaşte noi prieteni;
- dispune de o pagină personală unde vor fi afişate informaţiile precum: numele, data naşterii, ID-ul, oraşul şi o mică descriere;
- ID-urile sunt sortate în funcţie de sex (băiat - fată);
- un panou care afişează ultimele ID-uri adăugate pe categorie.
În arhivă am adăugat şi un panou care afişează pe orizontală 5 ID-uri selectate aleatoriu din baza de date.
Pe viitor aş vrea să o dezvolt şi pentru V7, vreau să îi fac un mic panou de administrare pentru opţiuni (ID-uri afişate pe pagină, culori, etc). Dacă aveţi ceva idei aştept comentarii.
Securizarea infuziilor şi modificărilor în PHP-Fusion
Cu toţii ştim că securitatea unui portal PHP-Fusion este foarte importantă. În acest articol vrem să vă arătăm cum să creaţi modificări sau infuzii fără greşeli.
1. Drepturile utilizatorilor:
Pentru a verifica drepturile membrilor şi grupurilor de membri folosiţi întotdeauna:
- constantele iGUEST, iUSER, iMEMBER, iADMIN, iSUPERADMIN, iUSER_RIGHTS, iUSER_GROUPS;
- funcţiile checkrights(), getuserlevel(), checkgroup(), groupaccess().
Exemplu:
if (iMEMBER) echo "Salut!";
else echo "Înregistrează-te!";
2. Interogări Mysql:
Folosiţi întotdeauna funcţiile PHP integrate în PHP-Fusion pentru a interoga baza de date (Mysql):
- dbquery($query) - pentru a efectua un query mysql;
- dbrows($query) - pentru a cunoaşte numărul de rânduri dintr-un query mysql;
- dbcount($camp, $tabel, $conditii) – Afişează suma valorilor câmpului ($camp) din tabel ($tabel) în funcţie de condiţiile puse ($conditii);
- dbresult($query, $camp) - afişează conţinutul câmpului ($camp) în funcţie de primul rând din $query;
- dbarray($query) – Inserează datele din $query într-un array asociativ;
- dbarraynum($query) – Inserează datele din $query într-un array poziţional;
Un exemplu:
// efectuez interogarea
$result = dbquery("SELECT * FROM ".$db_prefix."custom_pages WHERE page_id='$page_id'");
// Controlez ca interogarea să aibă cel puţin un rând
if (dbrows($result) != 0) {
// Pun rezultatele într-un array poziţional
$data = dbarray($result);
// Folosesc datele din array
echo $data['page_title'];
} else die("Eroare!");
Observaţie: Amintiţi-vă să optimizaţi interogările mysql. Server-ului nu îi va place să primească sute de interogări pentru fiecare sait
3. $_POST şi $_GET:
- Folosiţi întotdeauna funcţia stripinput() pentru a vă apăra împotriva codurilor HTML şi PHP periculoase atunci când doriţi să adăugaţi informaţii în baza de date.
Exemplu:
$data = stripinput($POST['']);
Această funcţie înlocuieşte anumite caractere cu „entities” (entităţi?) HTML. De exemplu ghilimele “ devin ”.
- Dacă variabila POST/GET trebuie să fie un număr folosiţi funcţia isNum(). Dacă un număr trimis este folosit într-un query mysql folosiţi acest cod înainte să puneţi ceva în tabelul mysql:
if (!isNum($_POST['numarul_meu'])) falback("index.php");
Sau:
$numarul_meu = isNum($_POST['numarul_meu']) ? $_POST['numarul_meu'] : $numar_predefinit;
- Nu trimiteţi prin variabila GET informaţii importante precum parole.
- Încercaţi să lucraţi cu baza de date prin câmpuri ID. Sunt mai uşor de manipulat şi sunt mai siguri. Este mai uşor să stabiliţi dacă o valoare este un număr cu ajutorul funcţiei isNum() decât să elaboraţi un „string” (caractere?) şi să stabiliţi dacă este sigur sau nu.
4. Alte lucruri:
- Puneţi acest cod la începutul fiecărui script de administrare:
if (!checkrights("IP")) fallback("../index.php");
- Puneţi acest cod la începutul fiecărui panou:
if (!defined("IN_FUSION")) { header("Location:../../index.php"); exit; }
- Puneţi acest cod la începutul – paginilor incluse? - :
if (!defined("IN_FUSION")) { header("Location:../index.php"); exit; }
- Verificaţi întotdeauna imaginile încărcate cu funcţia verify_image(). Amintiţi-vă că anumite browser-ere (Navigatoare web?) permit executarea anumitor scripturi .JS prin tag-urile HTML
- Nu abandonaţi e_notice_warnings (erorile?). Amintiţi-vă să declaraţi variabilele cu valori predefinite.
Un exemplu fără declarare:
$otherdata = 'a';
$data = array('b', 'c', 'd');
for ($i=0;$i)
if ($otherdata==$data[$i]) $result = "OK";
}
$final_result = $result;
Codul de mai sus va afişa o eroare: e_notice warning: Variable $result not defined at line XXX.
Scriptul de mai jos este cel corect şi nu va afişa nicio eroare:
$otherdata = 'a';
$data = array('b', 'c', 'd');
$result = "DEFAULT VALUE"; //acest rând rezolvă problema
for ($i=0;$i)
if ($otherdata==$data[$i]) $result = "OK";
}
$final_result = $result;
Ce este şi cum creez o infuzie?
Ce este o infuzie?
Infuzia este un Plugin pentru PHP-Fusion. Se numeşte aşa deoarece cuvântul “plug” a fost înlocuit cu “fusion”, şi cuvântul “in” a fost mutat în faţă. De aici a ieşit cuvântul “infusion”, adică infuzie.
Cum pot creea o infuzie?
În primul rând trebuie să aveţi fişierul-sursă pentru o infuzie, numit infusion.php. În acest fişier se află toate datele necesare funcţionării corecte unei infuzii.
Ar trebui să arate ca următorul cod:
/*---------------------------------------------------+
| PHP-Fusion 6 Content Management System
+----------------------------------------------------+
| Copyright © 2002 - 2008 Nick Jones
| http://www.php-fusion.co.uk/
+----------------------------------------------------+
| Lansat sub termenii si conditiile versiunii 2
| a Licentei Publice Generale GNU. Pentru detalii,
| cititi fisierul gpl.txt sau vizitati http://gnu.org
+----------------------------------------------------*/
if (!defined("IN_FUSION") || !checkrights("I")) { header("Location: ../../index.php"); exit; }
if (file_exists(INFUSIONS."infusion/locale/".$settings['locale'].".php")) {
include INFUSIONS."infusion/locale/".$settings['locale'].".php";
} else {
include INFUSIONS."infusion_title/locale/English.php";
}
$inf_title = $locale['xxx100'];
$inf_description = $locale['xxx101'];
$inf_version = "1.0";
$inf_developer = "";
$inf_email = "";
$inf_weburl = "http://";
$inf_folder = "folderol_infuziei";
$inf_admin_image = "";
$inf_admin_panel = "";
$inf_link_name = $locale['xxx102'];
$inf_link_url = "";
$inf_link_visibility = "0";
$inf_newtables = 1;
$inf_insertdbrows = 0;
$inf_altertables = 0;
$inf_deldbrows = 0;
$inf_newtable_[1] = "tabel_nou (
camp1 SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT,
camp2 TINYINT(5) UNSIGNED DEFAULT '1' NOT NULL,
camp3 VARCHAR(200) DEFAULT '' NOT NULL,
camp4 VARCHAR(50) DEFAULT '' NOT NULL,
PRIMARY KEY (camp1)
) TYPE=MyISAM;";
$inf_insertdbrow_[1] = "tabel_nou (camp1, camp2, camp3, camp4) VALUES('', '', '', '')";
$inf_droptable_[1] = "tabel_nou";
$inf_altertable_[1] = "tabel_name ADD …";
$inf_deldbrow_[1] = "table_nou";
?>
Pentru început, toate aceste informaţii vor fi greu de înţeles, dar pe parcurs veţi vedea că sunt uşor de reţinut.
Infuziile funcţionează după un sistem bine creat, astfel se pot introduce date în baza de date cu uşurinţă.
Ce înseamnă toate aceste variabile?
$inf_title = Numele infuziei.
$inf_description = Descrierea infuziei.
$inf_version = Versiunea infuziei.
$inf_developer = Dezvoltatorul infuziei.
$inf_email = E-mail-ul dezvoltatorului.
$inf_weburl = Saitul dezvoltatorului.
$inf_folder = Folderul în care se află fişierele infuziei.
$inf_admin_image = Iconiţa infuziei.
$inf_admin_panel = Legătura din panoul navigare.
$inf_link_name = Numele legăturii infuziei.
$inf_link_url = Legătura infuziei.
$inf_link_visibility = Acces infuzie: 0 - Vizitator / 101 - Membru / 102 - Administrator / 103 - SuperAdministrator.
$inf_newtables = Numărul tabelelor ce trebuie create în baza de date.
$inf_insertdbrows = Numărul câmpurilor ce trebuie create în tabele.
$inf_altertables = Numărul tabelelor ce trebuie modificate.
$inf_deldbrows = Numărul tabelelor ce trebuie şterse.
$inf_newtable_[1] = Pentru început este bine să folosiţi acel cod ca exemplu.
Cum foloseşte cod PHP în Infuzii ?
Pentru a face acest lucru trebuie să aveţi:
1. Un script PHP care rulează corect;
2. Un script PHP dezvoltat pentru PHP-Fusion;
3. Un fişier infusion.php care să includă toate variabilele necesare infuziei.
Deschideţi infusion.php
Modificaţi toate variabile, iar la codul bazei de date este bine să folosim acel cod ca exemplu.
La începutul infuziei veţi găsi:
if (file_exists(INFUSIONS."infusion/locale/".$settings['locale'].".php")) {
include INFUSIONS."infusion/locale/".$settings['locale'].".php";
} else {
include INFUSIONS."infusion_title/locale/English.php";
}
Înlocuiţi "infusion_title" cu folderul infuziei.
Cam atât!
Alex Dincu (@LEX),
PHP-Fusion România