PHP: mətn faylında “mini-DB” yaratmaq. Htmlspecialchars - Xüsusi simvolları HTML obyektlərinə xüsusi fon şəkli və ya fonuna çevirir


əks-səda " ";
əks-səda " ";
əks-səda " ";
echo "Salam, bu gün";
echo tarixi("l, F jS, Y"); //digər php kodu burada əks-səda verir "

";
əks-səda "";
?>

Bununla belə, bu, HTML teqlərinin rolunu asan başa düşməyə imkan verən əksər HTML/PHP redaktorlarında HTML Kodu Boyama seçiminə təsir edəcək. HTML kodu daxilində hər ikiqat sitatdan tərs kəsik işarəsi ilə qaçmalısınız.

HTML-də PHP - fayl uzantıları

Verilmiş faylda PHP kodu varsa, onun PHP uzantısı olmalıdır. Əksər hallarda bu .php-dir, lakin siz .htaccess faylının adını dəyişmədən və ya genişləndirilməsini dəyişmədən HTML faylındakı PHP kodunu oxumaq üçün də konfiqurasiya edə bilərsiniz. Aşağıda buna nail olmaq üçün əlavə edilməli olan "işləyicilərə" baxa bilərsiniz

Normal konfiqurasiya edilmiş veb server üçün:

AddHandler cgi-script .html .htm

FastCGI ilə işləyən veb server:

AddHandler fcgid-script .html .htm Qeyd: bu sınaqdan keçirilir və NTC veb hostinq serverləri ilə işləyir. Fərqli bir hosting provayderindən istifadə edirsinizsə, kömək üçün onlarla məsləhətləşin. Əlavə olaraq, orada daimi problemlərlə üzləşirsinizsə, sizə lazım olan PHP optimallaşdırılmış sabit serverləri əldə etmək üçün NTC Hosting-ə keçməyi düşünə bilərsiniz.

PHP-də HTML

HTML kodunu PHP skriptində də istifadə edə bilərsiniz. Əgər siz bütün səhifənizi PHP-də yaratmısınızsa, lakin məsələn, xüsusi HTML formasını daxil etmək istəyirsinizsə, bu çox faydalı ola bilər. Etməli olduğunuz şey HTML və PHP açılış teqlərinin sırasını dəyişmək, səhifəni PHP ilə açmaqdır:

PHP-də HTML-dən istifadə:


$Fname = $_POST["Fname"];
$Lname = $_POST["Lname"];
?>


Şəxsi məlumat



Ad:

Soyad:


echo "Salam, ".$Fname." ".$Lname.".
";
?>

Bu, bir qədər mürəkkəb görünsə də, əslində çoxlu koda qənaət edir. Burada biz $PHP_SELF super qlobal istifadə edirik ki, bu da bizə onun altında göstərilən sahələrin dəyərini eyni faylda istifadə etməyə imkan verir. Adətən belə formalar üçün iki fayl yaradılır - birincisi HTML formasının özü, ikincisi isə bütün işləri görən backend PHP faylıdır.

Əgər siz artıq çox sayda fayla əsaslanan mürəkkəb PHP proqramınız varsa və sadəcə hər şeyi mümkün qədər sadə saxlamaq istəyirsinizsə, bu, böyük kömək ola bilər.

NTC Hosting ilə PHP

NTC Hosting öz müştərilərinə mükəmməl veb hostinq həllini təklif edir. Bütün veb hostinq planlarımız HTML üçün dəstək verir və sizə seçim etmək imkanı verir

Hər hansı bir sənətkarlıqda olduğu kimi, PHP-də də sadə bir proqramçının həyatını əhəmiyyətli dərəcədə asanlaşdırmağa kömək edən bir çox müxtəlif fəndlər var. Bu hiylələrdən bəziləri.

Hiylə 1: massivləri formadan ötürmək.

HTML formasından yalnız dəyərləri (dəyişənləri) deyil, həm də massivləri köçürə bilərsiniz. Tutaq ki, aşağıdakı sahəyə malik bir formamız var:

Formadan məlumatları təqdim edərkən, PHP skripti yük sahəsindən dəyəri $cargo dəyişəni kimi alacaq. Lakin əgər siz “yük” əvəzinə “yük” təyin etsəniz, o zaman sahə artıq skriptə dəyişən deyil, yalnız elementi açar kimi biri və sahənin məzmunu kimi olan $cargo massivi göndərəcək. Dəyər. Avtomatik forma yaradanda (məsələn, çoxlu elementlərlə qiymət siyahısı yaradanda) bu hiylə həqiqətən əvəzolunmazdır və massivi skriptlə emal etmək tovar1, tovar2 və s. kimi adları olan bir qrup dəyişənləri təhlil etməkdən daha asandır. .

Hiylə 2: PHP-də şərt yazmaq üçün stenoqrafiya forması.

Dizayn...

echo "param=";~^~if($a==1)~^~( echo "1"; )~^~else ( echo "2"; )

Qısaldılmış formada qoymaq daha asandır (və daha qısadır):

echo "param=".($a==1?"1":"2");

Hiylə 3: HTML “göndər” düymələrinin təhlili.

HTML “göndər” düyməsi, bildiyiniz kimi, HTML forma məlumatlarını serverə göndərir (bizim vəziyyətimizdə PHP skripti ilə işləmək üçün). Bəs forma məlumatların emalı üçün müxtəlif variantları təmin edən bir neçə düyməni tələb edirsə? Bu vəzifə ilə qarşılaşdıqda, nədənsə az adam xatırlayır ki, “göndər” düymələrinin öz “dəyər” atributu var. Xeyr, əlbəttə ki, hamı bilir ki, bu atribut düymənin üzərindəki yazını göstərir, lakin, bir qayda olaraq, ona başqa məna verilmir. Bu arada, əgər “göndər” tipli düymələr “ad” atributuna malikdirsə, düymələrdəki etiketlərin mətni digər məlumatlar ilə birlikdə formadan serverə göndərilir və skript vasitəsilə təhlil edilə bilər ki, bu da çoxlu “göndər” tipli müxtəlif düymələrə basmaqla həyata keçiriləcək müxtəlif məlumatların işlənməsi. , ürəyiniz istədiyi qədər. Hiylənin üstünlüyü ondan ibarətdir ki, bu halda "gizli" sahələr tələb olunmur.

Hiylə 4: mövcud olmayan PHP funksiya parametrləri.

Məlumdur ki, PHP-də funksiyaları çağırarkən, funksiyanın qəbul etməli olduğu dəyişənlərin sayını dəqiq göstərməlisiniz:

$saat=16;~^~$dəqiqə=35;~^~echo today_is($saat,$dəqiqə);~^~...~^~bugünkü funksiya ($saat,$dəqiqə);~^~(~ ^~...~^~)

Daha az məlum olan odur ki, siz funksiyanın başlığında dəyişənlər üçün standart dəyərləri təyin edə bilərsiniz (çatışmayan dəyişən dəyərlər və ya xaricdən daxil olduqda dəyişənlərin özləri üçün) bu, istənilən funksiya ilə funksiyaya daxil olmağa imkan verir. dəyişənlərin sayı və ya ümumiyyətlə göstərilməməsi:

bugünki funksiya ($saat=16,$dəqiqə=0)~^~(~^~...~^~)

Hiylə 5: JS skriptlərinin və CSS üslublarının keşləşdirilməsinin qarşısını alın.

JS skriptinin və ya CSS üslublarının məzmununu dəyişdirdikdən və brauzerin köhnə versiyanı möhkəm yaddaşda saxladığını və yenisinin nəticələrini göstərmək istəmədiyini aşkar etdikdən sonra hər gün nə qədər insan and içir. Xüsusilə şirkətlərində proxy server vasitəsilə İnternetə çıxışı olanlar. Belə hallarda nə edilmir:meta bölməsində vaxtı keçmiş başlıqlar,anticaching meta teqləri və s.yerləşir.Bu arada bəzən təsadüfi ədəd şəklində uyğun faylı qeyd etdikdən sonra psevdoparametr qoymaq kifayətdir. PHP kodunun qısa bir parçası ilə yaradılıb:

Beləliklə, səhifə açarkən həmişə faylın yalnız ən son versiyası yüklənir.

Hiylə 6: dırnaq işarələri, apostroflar və mətnin təfsiri.

Simli (mətn) dəyərlər üçün konteyner seçiminə bir qədər diqqətsiz yanaşmaq çox vaxt adətdir. Ancaq boş yerə: bir çox insanlar unudurlar ki, PHP tərcüməçisi həmişə dəyişənlərin mövcudluğuna görə ikiqat mətn dırnaqlarının (") məzmununu təhlil edir, eyni zamanda tək dırnaqlardan (apostroflardan) ibarət konteynerlərin məzmununa tamamilə laqeyd yanaşır, onları dəqiq xarakterə uyğunlaşdırır. şərhsiz xarakter.

Buna görə də, dəyişənlərlə mətnləri qırılmaz qoşa dırnaqlara əlavə etmək daha rahatdır:

$text="Salam, $(müştəri)!";

Lakin apostroflu oxunmayan kod, xüsusən də döngələrdə nəzərəçarpacaq dərəcədə sürətlə işləyir:

$text=Salam, .$client.!;

Hiylə 7: Dərhal geri çəkilmə.

Skriptin icrasını sürətləndirməyin başqa bir əla yolu dərhal və hər dəfə əmrlə əlinə gələn hər şeyi göstərmək əvəzinə. əks-səda, test məzmununu dəyişəndə ​​toplayın və sonra həmin dəyişəni bir dəfə çap edin:

$mytext="variant 1";~^~$mytext.=" encode";~^~$mytext.=" giriş";~^~echo $mytext;

Nəzərə alın ki, birləşmə əməliyyatı qısaldılmış formada yazılmışdır: $mytext.=, amma yox $mytext=$mytext.. Vaxta qənaət – çıxış müddətində on dəfəyə qədər azalma. Təsirli?

Hiylə 8: Tipli sahələr massivindən keçmək onay qutusu.

Trick #1 bizə HTML formasından massivləri ötürməyə imkan verir. Və bu hiylədə gəlin başqa bir vəziyyəti təhlil edək: fərz edək ki, biz yalnız kimi sahələri olan formadan massiv ötürməliyik. onay qutusu(bu, kliklədikdə bir gənə görünən kiçik bir kvadratdır). Məsələn, bizdə istifadəçinin ehtiyac duyduğu şəhərləri seçə biləcəyi şəhərlərin siyahısı var, lakin məlumatları göndərərkən biz təkcə istifadəçinin seçdiyi şəhərlərin identifikatorlarını deyil, həm də sonuncuların adlarını göndərmək istəyirik. Və gizli sahələr kimi gizli Biz, həqiqətən, onay qutularının yanında heç bir şey etmək istəmirik (səhifə kodunu və serverə göndərilən məlumatların kütləsini yükləməmək üçün). Mən nə etməliyəm?

Həll yolu çox sadədir. Bildiyiniz kimi, standart olaraq tip sahəsi onay qutusu(bu kimi, hətta üzərinə klikləyə bilərsiniz: ) adətən “on” dəyərinə malik ola bilər (sahə seçilib, yəni orada işarə var) və ya “off” (sahə seçilməyib). Siz həmçinin sahə üçün alternativ dəyər də göstərə bilərsiniz, məsələn, 1. Lakin hamı düşünmür ki, bu sahə üçün ümumiyyətlə hər hansı bir dəyər təyin edə bilərsiniz, hətta “Hərb və Sülh” romanının mətnini belə. Və bu dəyər təhlil və emal üçün diqqətlə server skriptlərinə köçürüləcək:

İstifadəçi tələb olunan elementləri seçir, "Göndər" düyməsini klikləyir və seçilmiş onay qutularının bir sıra seçimi olan serverə göndərilir. ad onay qutusu dəyişənin adı və seçimdir dəyər- onun mənası. -a müraciət edib PHP bu xəttə bərabərdir:

$id548=Toyota Landcruiser;

İndi 1 nömrəli hiyləni bir daha xatırlayaq.Tutaq ki, biz dəyişənlər dəstəsini təhlil etmək istəmirik, bunun əvəzinə bir massivi təhlil etmək istəyirik. Həm də asandır:

Və seçim arqumentində ədədin ətrafında iki kvadrat mötərizənin görünməsi nəticəsində ad onay qutusu, o, artıq serverə göndərilən dəyişən deyil id 548, və massiv elementi $id 548 açarı ilə.

Nəticə? Olduqca yaxşıdır: bir onay qutusundan serverə üç parametr ötürdük - massivin adı, element açarı və dəyəri, heç bir əlavə gizli sahələr və lazımsız HTML kodu olmadan.

(PHP 4, PHP 5, PHP 7)

htmlspecialchars — Xüsusi simvolları HTML obyektlərinə çevirir

Təsvir

Simli htmlspecialchars (string $string [, int $bayraqlar = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") [, bool $double_encode = doğrudur ]]])

HTML-də bəzi simvolların xüsusi mənaları var və onların mənasını qorumaq üçün HTML obyektləri kimi təqdim edilməlidir. Bu funksiya bu çevrilmələrə məruz qalmış sətri qaytarır. Bütün mümkün obyektləri çevirmək lazımdırsa, istifadə edin htmlentities().

Əgər giriş sətri bu funksiyaya ötürülürsə və nəticədə yaranan sənəd eyni simvol kodlaşdırmasından istifadə edirsə, onda bu funksiya HTML sənədinin əksər hissələrinə məlumat daxil etmək üçün hazırlamaq üçün kifayətdir. Bununla belə, əgər məlumatda nəticələnən sənədin simvol kodlaşdırmasında müəyyən edilməmiş simvollar varsa və siz həmin simvolların (rəqəm və ya adlandırılmış obyektlər kimi) saxlanmasını gözləyirsinizsə, bu və htmlentities() funksiyalar (yalnız müvafiq obyektlərlə alt sətirləri çevirən). Funksiyadan istifadə etmək lazımdır mb_encode_numericentity().

Aşağıdakı dəyişikliklər edilir:

  • "&" (ampersand) "&" ə çevrilir
  • """ (ikiqat sitat) rejimdə """-ə çevrilir ENT_NOQUOTES təyin edilməyib.
  • """ (tək dırnaq) yalnız rejimdə """ (və ya ") çevrilir ENT_QUOTES.
  • "<" (знак "меньше чем") преобразуется в "<"
  • ">" (işarədən böyük) ">" şəklinə çevrilir

Parametrlərin siyahısı

Çevirmək üçün sətir ( simli).

Kotirovkaların işlənməsi rejimini, səhv kodlaşdırmaları və istifadə olunan sənəd növünü müəyyən edən aşağıdakı bayraqların bit maskası. Defoltdur ENT_COMPAT | ENT_HTML401.

Mövcud bayraqlar parametr dəyərləri
Daimi ad Təsvir
ENT_COMPAT Tək dırnaqları dəyişməz qoyaraq cüt dırnaqları çevirir.
ENT_QUOTES Həm cüt, həm də tək dırnaqları çevirir.
ENT_NOQUOTES Həm cüt, həm də tək dırnaqları dəyişməz qoyur.
ENT_IGNORE Heç bir bildiriş mesajı olmadan, boş sətir qaytarmaq əvəzinə etibarsız kod ardıcıllığını ləğv edir. Bu bayrağın istifadəsi tövsiyə edilmir, çünki bu, » mənfi təhlükəsizlik təsirlərinə səbəb ola bilər.
ENT_SUBSTITUTE UTF-8 və FFFD istifadə edərkən səhv kod ardıcıllığını Unicode əvəzetmə simvolu U+FFFD ilə əvəz edir; boş sətri qaytarmaq əvəzinə fərqli kodlaşdırmadan istifadə edərkən.
ENT_DISOWD Verilmiş sənəd növü üçün etibarsız simvol kodlarını Unicode əvəzetmə simvolu U+FFFD (UTF-8) və ya FFFD ilə əvəz edir; (fərqli kodlaşdırma istifadə edərkən) hər şeyi olduğu kimi tərk etmək əvəzinə. Bu, məsələn, daxili xarici məzmunu olan XML sənədlərinin formal olaraq düzgün olmasını təmin etmək üçün faydalı ola bilər.
ENT_HTML401 HTML 4.01-ə uyğun olaraq kodun işlənməsi.
ENT_XML1 XML 1-ə uyğun olaraq kodun işlənməsi.
ENT_XHTML XHTML-ə uyğun olaraq kodun işlənməsi.
ENT_HTML5 HTML 5-ə uyğun olaraq kodun işlənməsi.
kodlaşdırma

Simvolları çevirərkən istifadə olunan kodlaşdırmanı təyin edən isteğe bağlı arqument.

Göstərilməyibsə, kodlaşdırma üçün standart dəyər istifadə olunan PHP versiyasından asılıdır. PHP 5.6 və daha köhnə versiyalarda defolt dəyər default_charset konfiqurasiya seçiminə təyin edilir. PHP 5.4 və 5.5-də istifadə olunur UTF-8 default. PHP-nin əvvəlki versiyaları istifadə olunur ISO-8859-1.

Bu arqument texniki olaraq isteğe bağlı olsa da, PHP 5.5 və ya daha yüksək versiyadan istifadə edirsinizsə və ya default_charset konfiqurasiya seçiminiz daxiletmə üçün səhv təyin oluna bilərsə, kodunuz üçün düzgün dəyəri göstərməyiniz çox tövsiyə olunur.

Bu kodlaşdırma funksiyasının məqsədləri üçün ISO-8859-1, ISO-8859-15, UTF-8, cp866, cp1251, cp1252KOI8-R sətirin özündə göstərilən kodlaşdırmada etibarlı simvolların olduğunu fərz etsək, praktiki olaraq ekvivalentdirlər, sonra simvollar dəyişdirilir htmlspecialchars(), bütün bu kodlaşdırmalarda eyni yerlərdə qalacaq.

Aşağıdakı kodlaşdırmalar dəstəklənir:

Dəstəklənən kodlaşdırmalar
Kodlaşdırma Ləqəblər Təsvir
ISO-8859-1 ISO8859-1 Qərbi Avropa Latın-1.
ISO-8859-5 ISO8859-5 Nadir hallarda istifadə olunan kiril kodlaşdırması (latın/kiril).
ISO-8859-15 ISO8859-15 Qərbi Avropa Latın-9. Latın-1 (ISO-8859-1) kodlaşdırmasına avro işarəsi, fransız və fin hərfləri əlavə edir.
UTF-8 8-bit Unicode, ASCII uyğun gəlir.
cp866 ibm866, 866 DOS-da istifadə olunan kiril kodlaşdırması.
cp1251 Windows-1251, win-1251, 1251 Windows-da istifadə olunan kiril kodlaşdırması.
cp1252 Windows-1252, 1252 Windows-da istifadə edilən Qərbi Avropa kodlaşdırması.
KOI8-R koi8-ru, koi8r Rus kodlaşdırması.
BIG5 950 Ənənəvi Çin, əsasən Tayvanda istifadə olunur.
GB2312 936 Sadələşdirilmiş Çin, standart milli xarakter dəsti.
BIG5-HKSCS Genişləndirilmiş Big5 Honq Konqda istifadə olunur.
Shift_JIS SJIS, SJIS-win, cp932, 932 Yapon kodlaşdırması.
EUC-JP EUCJP, eucJP-qalib Yapon kodlaşdırması.
MacRoman Mac OS-də istifadə edilən kodlaşdırma.
"" Boş bir sətir skript faylından (Zend multibayt), default_charset və cari yerli parametrdən kodlaşdırmanın müəyyən edilməsi rejimini aktivləşdirir (bax. nl_langinfo()setlocale()), göstərilən ardıcıllıqla. İstifadəsi tövsiyə edilmir.

Şərh: Digər kodlaşdırmalar dəstəklənmir; əvəzinə defolt kodlaşdırma tətbiq olunacaq və xəbərdarlıq yaradılacaq.

double_encode

double_encode seçimi qeyri-aktivdirsə, PHP mövcud html obyektlərini çevirməyəcək. Varsayılan olaraq, hər şey məhdudiyyətsiz çevrilir.

20.6K

PHP server tərəfində quraşdırılmış proqramlaşdırma dilidir. Onun sintaksisinin çox hissəsi C, Java və Perl-dən götürülmüşdür. Bir neçə unikal PHP-ə xas funksiyalar da əlavə edilmişdir. Bu dilin əsas məqsədi dinamik şəkildə yaradılan PHP HTML səhifələrini yaratmaqdır.

PHP-dən HTML-ə

Mürəkkəb veb səhifələr yaratarkən, xüsusi tapşırıqları yerinə yetirmək üçün PHP və HTML-ni birləşdirmək ehtiyacı ilə qarşılaşacaqsınız. İlk baxışdan bu mürəkkəb görünə bilər, çünki PHP və HTML iki müstəqil fəndir, lakin bu belə deyil. PHP HTML ilə qarşılıqlı əlaqə üçün nəzərdə tutulmuşdur və onun kodu səhifənin işarələnməsinə daxil edilə bilər.

PHP kodu xüsusi teqlərdən istifadə etməklə HTML səhifələrinə daxil edilir. İstifadəçi səhifəni açdıqda, server PHP kodunu emal edir və sonra emalın nəticəsini göndərir. PHP kodu) brauzerə.

HTML və PHP-ni birləşdirmək olduqca asandır. PHP skriptinin teqlərdən kənar hər hansı bir hissəsiPHP kompilyatoru tərəfindən nəzərə alınmır və birbaşa brauzerə ötürülür. Aşağıdakı nümunəyə baxsanız, tam PHP skriptinin belə görünə biləcəyini görə bilərsiniz:

Salam bu gün.

Yuxarıdakı kod daxili tarix funksiyasından istifadə edərək cari tarixi çap edən kiçik bir PHP parçası olan sadə HTML-dir. Bu halda, bütün HTML PHP tərtibçisi tərəfindən nəzərə alınmayacaq və dəyişməz olaraq brauzerə ötürüləcək.

PHP-ni HTML-yə inteqrasiya etmək həqiqətən çox asandır. Unutmayın ki, skript bəzi PHP kodu daxil edilmiş HTML səhifəsidir. Siz yalnız HTML ehtiva edən skript yarada bilərsiniz (teqlər yoxdur) və yaxşı işləyəcək.

Daha qabaqcıl üsullar:

  • Menyu elementi


və nəticə:

short_open_tag istifadə edərək PHP-dən HTML-yə

Əgər PHP-yə HTML daxil etməzdən əvvəl kodunuzu mümkün qədər qısa etmək lazımdırsa, siz short_tags istifadə edə bilərsiniz. Nəticədə daxil olmaq lazım olmayacaqqısa_teqlər"ile" Söndür"haqqında" Aktiv". Əksər serverlərdə bu seçim artıq aktiv olsa da, bunu əl ilə yoxlamaq həmişə yaxşıdır. Qısa teqlərdən istifadə zamanı yarana biləcək problem XML-dən istifadə zamanı yaranan münaqişədir. XML sintaksis ifadəsində

short__tag istifadə edərək PHP-dən HTML-yə

Salam bu gün.

Nəzərə alın ki, mümkün qədər çox platformaya uyğun sayt yaratmaq istəyirsinizsə, PHP-ni HTML-yə daxil edərkən short_tags-ə etibar etməməlisiniz.

HTML-dən PHP-yə echo istifadə edərək

HTML-i PHP faylına inteqrasiya etməyin başqa bir yolu echo: əmridir.

Bu, əksər redaktorlarda işarələmənin vurğulanmasına təsir edəcək. Buna görə də, HTML kodu daxilində bütün qoşa dırnaqları əks xətt istifadə edərək vurğulamaq lazımdır.

PHP-dən HTML-yə - Fayl uzantıları

Standart konfiqurasiya edilmiş veb server üçün:

AddHandler cgi-script .html .htm

FastCGI ilə işləyən veb server üçün:

AddHandler fcgid-script .html .htm

HTML-dən PHP-yə

HTML kodunu PHP skriptlərində də istifadə edə bilərsiniz. Sizə lazım olan tək şey PHP istifadə edərək səhifə açarkən HTML və PHP teqlərinin açılış sırasını dəyişməkdir.

$_SESSION massivi vasitəsilə məlumatların ötürülməsinə bir dəfə icazə verilir, ötürülən məlumatlar dərhal silinir. Bu, məsələn, başqa modula daxil edilmiş məlumatları forma "qaytardıqda" faydalı ola bilər.

Bütün xidmət funksiyaları bir modulda birləşdirildikdə yaxşıdır, əsas modullar require_once direktivi ilə birləşdirilir. Xidmət funksiyaları modulumuzu function.php adlandıracağıq və qeyd olunan trimall və sehrli üsullardan əlavə, ora aşağıdakı funksiyaları daxil edəcəyik:

  • read() - cari verilənlər bazasını oxuyacaq və bir sıra qeydlər qaytaracaq;
  • write($a) - fayla $a qeydləri massivi yazacaq;
  • get_index_by_name ($a,$name) - $name adı ilə müvafiq qeydi axtaracaq və onun nömrəsini (sıfırdan) və ya giriş tapılmadıqda -1 dəyərini qaytaracaq. Bu, yeni giriş əlavə etmək və mövcud olanı redaktə etmək arasında fərq qoymaq üçün faydalıdır.

Bundan əlavə, funksiyalar faylı konfiqurasiya faylını ehtiva edəcək və sessiyanı başlayacaq - bu imkanlar onu birləşdirən hər hansı bir modula lazım ola bilər.

Function.php faylı
$element) (siyahı ($myname,$mynumber) = partlatmaq (DIV, $element); if ($name == mb_strtolower(trimall($myname),"UTF-8")) return $index; ) return -1 ; ) ?>

Qeyd edək ki, oxu funksiyası əlavə olaraq qeyd massivini boş sətirlərdən süzür (yalnız halda, ümumiyyətlə, baş verməməlidir) və trimall əvvəlcə hər hansı boş olmayan ayırıcılar sətirini tək boşluqla əvəz edəcək (ikinci preg_replace) və sonra qalan sətrin əvvəlində və sonunda mümkün əlavə ayırıcıları çıxarın (birinci preg_replace).

Oxu funksiyası ilə kod uyğunluğu baxımından da bir nüans var. Onun yeganə sətirində anonim funksiya olduğu üçün 5.3-dən aşağı olmayan PHP versiyasının istifadə olunduğu güman edilir. Lazım gələrsə, aşağıdakı kodu filtrləmə funksiyasının adlandırıldığı və ya ümumiyyətlə istifadə olunmadığı kodla əvəz edin, burada olduğu kimi:

Funksiya oxundu () ( $str=@file_get_contents (FILENAME); $a=partlatmaq("\n",$str); $a; qaytarın)

Unicode sətirinin kiçik hərflərə düzgün yazılması da vacibdir (kodda mb_strtolower-ə baxın). Biz burada yerli dildən istifadə etmirik.

Deyəsən, əsas index.php faylını yazmağın vaxtıdır. O, aşağıdakı vəzifələri həll edəcək:

  • add.php modulu tərəfindən işlənən yeni giriş əlavə etmək üçün formanı göstərin;
  • əlavə formasının yanında əlavə əmrlər göstərəcəyik - parametrləri olmayan bir skripti "özünə zəng etməklə" formanı təmizləyirik (düymə bura sığmayacaq, çünki serverə məlumat ötürmür) və sort.php adlı qeydlərin çeşidlənməsi moduluna daxil olmaq üçün keçid;
  • digər modullardan öz işlərinin nəticələrini rəqəmsal dəyişən $status şəklində almaq və müvafiq mesajları göstərmək ($status_msg massivi). Sıfıra bərabər olan $status dəyəri standart olaraq qəbul ediləcək, proqramın işi haqqında qısa yardımın çıxışına uyğundur;
  • verilənlər bazası boş deyilsə, onun qeydlərini göstərin və redaktə və ya silinməyə keçid təmin edin.

Cədvəli əlavə düymələr və keçidlərlə yükləməmək üçün klikləyək adı ilə edit.php modulundan istifadə edərək girişi redaktə etmək və üzərinə klikləməklə "Nömrə" sahəsinə görə del.php modulu ilə girişin silinməsinə uyğun olacaq.

Bir neçə giriş əlavə edilməklə belə görünür:

"Mətn faylında mini-DB" skriptinin görünüşü

index.php faylı
Adı: Nömrə: Silin Sort"; $status_msg = massiv ("Düzəlişləri redaktə etmək üçün adına və ya silmək üçün Nömrəyə klikləyin", "Giriş artıq mövcuddur, içindəki dəyər düzəldildi", "Göstərilən nömrə ilə giriş tapmaq mümkün olmadı. ", "Əlavə üçün məlumat ötürülmədi") ; əgər (boş($status)) $status = 0; echo "

".$status_msg[$status]."

"; əgər (count($a)>0) ( əks-səda " "."\n"." "."\n"; foreach ($a kimi $index=>$element) ( echo " "."\n"; siyahı ($name, $nömrə) = partlatmaq (DIV,$element); echo " "."\n"." "."\n".""."\n"; ) echo "
adNömrə
".htmlspecialchars(trimall($name))."".intval(trimall($nömrə))."
"."\n"; ) "foot.php" daxildir; ?>

İndi keçək çatışmayan modullara. add.php-nin sadə işi var - index.php-dən $name və $number dəyişənlərini alın və fayla yazın. Bununla belə, modul ona boş olmayan məlumatların ötürüldüyünü yoxlamalı, həmçinin verilənlər bazasında artıq mövcud olan adın yeni qeydin daxil edilməsindən daxil edildiyi vəziyyəti ayırd etməyi bacarmalıdır (bax: əgər ($id>-) 1) ( ... ) başqa ( ... ) kodda). Sonuncu halda, giriş həmişə sonuna əlavə olunur, çünki sətirləri əlifba sırası ilə çeşidləmək üçün modul olacaq.

Parametr idarəedicisindən “keçilmiş” $name sətirinin artıq “, “, kimi “kritik” işarələmə simvollarından məhrum olması da vacibdir.< и >, və verilənlər faylından oxunan $a massivində bütün sətirlər “olduğu kimi” və<>$name işləndikdən sonra çevrilərsə, 123 tapılmayacaq<>123. Buna görə də, get_index_by_name adlandırdığımız qeyd axtarış funksiyası standart htmlspecialchars_decode funksiyasından (PHP 5.1-dən etibarən mövcuddur) istifadə edərək orijinal formasına “geri” çevrilmiş sətir ötürülür. Eyni formada sətir $_SESSION massivi vasitəsilə index.php-ə qaytarılır. Bu, müəyyən rahatlıq təmin edəcək - yeni giriş daxil edildikdən sonra onun məlumatları formada qalacaq və adından bir qədər fərqli olan başqa bir giriş daxil etmək mümkün olacaq ("İvanov"dan sonra "İvanova").

Yaxşı, moduldan modula qayıdış tamamilə standartdır - standart başlıq funksiyası vasitəsilə. Unutmayın ki, o, yalnız modul hələ brauzerə heç nə çıxarmadıqda istifadə edilə bilər.

add.php faylı
-1) (siyahı ($name,$number0) = partlatmaq (DIV,$a[$id]); $a[$id] = $new_string;; $status=1; ) else ( $id = count($) a)+1;array_push ($a,$new_string); ) yaz ($a); $_SESSION["id"] = intval($id); ) başqa $status=3; $_SESSION["ad"] = htmlspecialchars_decode($name); $_SESSION["nömrə"] = intval($nömrə); başlıq("Yer: index.php".($status==0?"":"?status=".$status)); ?>

İndi redaktə haqqında, o, edit.php-də həyata keçiriləcək. Redaktə forması əlavə forma ilə demək olar ki, eynidir, biz formanı göstərmək üçün ayrıca funksiya yaratmağa çox tənbəl olduq. Daha vacibi odur ki, modulun özü redaktə forması vasitəsilə ötürülən məlumatların prosessoru olacaq və buna görə də istifadəçi "Saxla" düyməsini kliklədiyi zaman yeni çağırılan vəziyyəti fərqləndirməlidir. Son vəzifə yoxlamaqdır

Əgər (!empty($_POST["göndər"]) && !boş($name) && isset($number) && isset($id)) (

düymənin basıldığını və bütün məlumatların ötürüldüyünü müəyyən etmək. İkinci filial -

Əks halda (isset($a[$id])) (

$a massivində nömrəsi skriptə ötürülən və redaktə edilməli olan giriş olduğu vəziyyət üçün nəzərdə tutulub. Giriş nömrəsi gizli HTML sahəsində saxlanılır .

Fayl edit.php
Adı: Nömrə: Geri"; "foot.php" daxil edin; exit (0); ) başqa $status = 2; başlıq ("Yer: index.php".($status==0?"":"?status=".$status) ); ?>

Del.php qeyd silmə modulu olduqca sadə olacaq, ona lazım olan tək şey etibarlı qeyd $id ($a massivindəki element nömrəsi) əldə etmək, uyğun elementi massivdən çıxarmaq, faylı yenidən yazmaq və əsas modula qayıtmaqdır. səhifə.

Fayl del.php

Nəhayət, sort.php çeşidləmə modulu yeni problem təqdim edəcək - böyük və kiçik hərfləri ayırmadan Unicode sətirlərini əlifba sırası ilə necə çeşidləmək olar? Standart çeşidləmə funksiyasından istifadə edərək "birbaşa" çeşidləmə çətin ki, uyğun deyil - kiçik və böyük hərfi fərqli simvollar hesab edir. Yeri təyin etmədik, xüsusən də onu quraşdırmaq üçün bütün əməliyyat sistemləri üçün vahid giriş forması olmadığı üçün.

Elementləri müqayisə etmək üçün xüsusi funksiya ilə massivləri çeşidləmək üçün bütün funksiyalardan usort seçməklə özümüzü məhdudlaşdıraq.

Tək simvollu Unicode sətirlərinin istifadə olunan "birbaşa" müqayisəsi, görünür, tamamilə düzgün deyil, lakin strcmp sətirləri bayt-bayt müqayisə edir və bizim üçün uyğun deyil, lakin ümumiyyətlə müqayisə düzgündür. hər hansı Unicode-da strings çox çətin işdir... Rus və ingilis dillərində sistemdə hər şey mənim üçün işlədi, məsələn, çeşidlədikdən sonra mən təbii söz sıraları aldım, məsələn

Abba, Avka, avklit, basya, Bobi, Bobik, bobik, Bobina

Fayl sort.php
$cb) 1-i qaytarmaq; ) əgər ($alen<$blen) return -1; else if ($alen>$blen) 1-i qaytarın; başqa 0 qaytarın; ) usort($a,"cmp"); yaz ($a); başlıq("Yer: index.php"); ?>

Etməli olduğumuz yeganə şey .htaccess adlı qovluqda fayl yaratmaqdır, burada standart kodlaşdırmanı Unicode olaraq təyin edəcəyik və sayt üçün kotirovkaların təyin edilməsi üçün direktivləri göstərəcəyik, beləliklə...

Eyni qovluqda boş (0 bayt) data.txt faylı yaradın (bütün hüquqlar konfiqurasiya edildikdə isteğe bağlıdır).

File.htaccess
AddDefaultCharset utf-8 php_flag magic_quotes_gpc off php_flag magic_quotes_runtime off php_flag magic_quotes_sybase off

Nə baş verdiyini görə bilərsiniz və tapdığınız problemlər barədə mənə məlumat verə bilərsiniz, mən skripti çox tez, 2 addımda yazdım və bəlkə də bir şey düşünməmişəm :)



Əlaqədar nəşrlər