PHP Ziyaretçi Defteri

  • 03.11.2019

Bu eğiticide, AJAX kullanarak bir PHP ziyaretçi defteri oluşturacağız. Kayıtlar veri tabanında saklanacaktır. Tablo şu bilgileri içerecektir: gönderenin adı, e-posta adresi, IP adresi ve son girişin tarih-saati. JQuery kullanılacaktır (AJAX'ı uygulamak için). Basit bir spam koruması da uygulanacaktır - her 10 dakikada bir birden fazla giriş gönderemezsiniz.

Adım 1. SQL

Uygulamamızın çalışması için bir tablo oluşturmamız gerekiyor:

MEVCUT DEĞİLSE TABLO OLUŞTUR "s178_guestbook` (" id` int (10) unsigned NOT NULL auto_increment, "name` varchar (255) default" "," email` varchar (255) default "", "description` varchar (255) varsayılan "", `ne zaman` int (11) NULL DEĞİL varsayılan" 0 ",` ip` varchar (20) varsayılan NULL, BİRİNCİL ANAHTAR (`id`)) MOTOR \u003d MyISAM VARSAYILAN KARAKTER \u003d utf8;

Adım 2. PHP

Ana dosya aşağıdaki kodu içerecektir:

guestbook.php

\u003d ") \u003d\u003d 1) error_reporting (E_ALL & ~ E_NOTICE & ~ E_DEPRECATED); else error_reporting (E_ALL & ~ E_NOTICE); require_once (" classes / CMySQL.php "); // veritabanı ile çalışmak için hizmet sınıfı dahil // Get Ziyaretçi IP işlevi getVisitorIP () ($ ip \u003d "0.0.0.0"; if ((isset ($ _ SERVER ["HTTP_X_FORWARDED_FOR"])) && (! Boş ($ _ SERVER ["HTTP_X_FORWARDED_FOR"]))) ($ ip \u003d $ _SERVER ["HTTP_X_FORWARDED_FOR"];) elseif ((isset ($ _ SUNUCU ["HTTP_CLIENT_IP"])) && (! Boş ($ _ SUNUCU ["HTTP_CLIENT_IP"]))) ($ ip \u003d patlat (".", $ _ SUNUCU [ "HTTP_CLIENT_IP"]); $ ip \u003d $ ip. ".". $ Ip. ".". $ Ip. ".". $ Ip;) elseif ((! Isset ($ _ SUNUCU ["HTTP_X_FORWARDED_FOR"])) | | (boş ($ _ SERVER ["HTTP_X_FORWARDED_FOR"]))) (((! isset ($ _ SUNUCU ["HTTP_CLIENT_IP"])) && (boş ($ _ SUNUCU ["HTTP_CLIENT_IP"]))) ($ ip \u003d $ _SERVER ["REMOTE_ADDR"];)) return $ ip;) // Ziyaretçi defteri fonksiyonundaki son girişleri alır getLastRecords ($ iLimit \u003d 3) ($ sRecords \u003d ""; $ aRecords \u003d $ GLOBALS ["MySQL"] -\u003e getAll ( "SEÇİNİZ * S178_guestbook` SİPARİŞE GÖRE` id` DESC L IMIT ($ iLimit) "); foreach ($ aRecords as $ i \u003d\u003e $ aInfo) ($ sWhen \u003d date ("F j, Y H: i", $ aInfo ["ne zaman"]); $ sRecords. \u003d<<

($ bilgi ["açıklama"])

EOF; ) $ sRecords döndür; ) if ($ _POST) (// Yeni girişleri kabul et $ sIp \u003d getVisitorIP (); $ sName \u003d $ GLOBALS ["MySQL"] -\u003e kaçış (strip_tags ($ _ POST ["ad"])); $ sEmail \u003d $ GLOBALS ["MySQL"] -\u003e kaçış (strip_tags ($ _ POST ["ad"])); $ sDesc \u003d $ GLOBALS ["MySQL"] -\u003e çıkış (strip_tags ($ _ POST ["metin"])); if ($ sName && $ sEmail && $ sDesc && $ sIp) (// Anti-spam $ iOldId \u003d $ GLOBALS ["MySQL"] -\u003e getOne ("SELECT` id` FROM" s178_guestbook` WHERE` ip` \u003d "($ sIp) "AND` when`\u003e \u003d UNIX_TIMESTAMP () - 600 LIMIT 1"); if (! $ IOldId) (// Bir yorum ekleyebilirsiniz $ GLOBALS ["MySQL"] -\u003e res ("INSERT INTO" s178_guestbook` SET` name` \u003d "($ sName)", `email` \u003d" ($ sEmail) ",` description` \u003d "($ sDesc)", `ne zaman` \u003d UNIX_TIMESTAMP (),` ip` \u003d "($ sIp)") ; // Son 10 kaydı yazdır $ sOut \u003d getLastRecords (); echo $ sOut; exit;)) echo 1; exit;) // Son 10 kaydı yazdır $ sRecords \u003d getLastRecords (); ob_start (); ?\u003e

Ziyaretçi defteri

Yorumunuzu buraya ekleyin

PHP Ziyaretçi Defteri

Sayfayı açtığınızda bir defter göreceksiniz. Son üç giriş sol tarafta görüntülenir ve sağ tarafta yeni bir inceleme yayınlamak için bir form görüntülenir. Form gönderildiğinde, komut dosyası POST verilerini (aynı PHP sayfasına) gönderir, ardından alınan verileri veritabanında depolar ve son üç kaydı döndürür. Geliştirme efektini kullanarak, girişler kitabın sol tarafında görüntülenir.

Ayrıca PHP dosyası kullanıldı

sınıflar / CMySQL.php

Bu dosya, veritabanıyla çalışmak için sınıf kodunu içerir. Sunucuya bağlanmak için yapılandırılması gereken üç değişken gerektirir.

$ this-\u003e sDbName \u003d "DATABASE_NAME"; $ this-\u003e sDbUser \u003d "KULLANICI ADI"; $ this-\u003e sDbPass \u003d "ŞİFRE";

3. Adım CSS

Şimdi de ziyaretçi defterinin görünümünü oluşturalım:

css / main.css

* (kenar boşluğu: 0; dolgu: 0;) gövde (arka plan rengi: #fff; renk: #fff; yazı tipi: 14px / 1.3 Arial, sans-serif;) altbilgi (arka plan rengi: # 212121; alt: 0; kutu gölgesi: 0 -1px 2px # 111111; ekran: blok; yükseklik: 70px; sol: 0; konum: sabit; genişlik:% 100; z-endeksi: 100;) altbilgi h2 (yazı tipi boyutu: 22px; yazı tipi- ağırlık: normal; sol:% 50; kenar boşluğu: -400px; dolgu: 22px 0; konum: mutlak; genişlik: 540px;) altbilgi a.stuts, a.stuts: ziyaret edilmiş (kenarlık: yok; metin-dekorasyon: yok ; renk: #fcfcfc; yazı tipi boyutu: 14px; sol:% 50; satır yüksekliği: 31px; kenar boşluğu: 23px 0 0 110px; konum: mutlak; üst: 0;) altbilgi .stuts aralığı (yazı tipi boyutu: 22px; font-weight: bold; margin-left: 5px;) .container (arka plan: şeffaf url (../ images / book_open.jpg) no-tekrar üst merkez; renk: # 000000; yükseklik: 600px; kenar boşluğu: 20px otomatik; taşma: gizli; dolgu: 35px 100px; konum: göreli; genişlik: 600px;) # col1, # col2 (float: sol; kenar boşluğu: 0 10px; taşma: gizli; metin hizalama: merkez; genişlik: 280px;) # col1 (-webkit-dönüşümü: döndürme (3deg); -moz-dönüşümü: döndürme (3deg); -ms-dönüşümü: döndürme (3deg); -o-dönüşümü: döndürme (3deg); ) #records formu (margin: 10px 0; padding: 10px; text-align: left;) #records table td.label (color: # 000; font-size: 13px; padding-right: 3px; metin hizalama: sağ ;) #records tablo etiketi (yazı tipi boyutu: 12px; dikey hizalama: orta;) #records table td.field girişi, #records table td.field textarea (arka plan rengi: rgba (255, 255, 255, 0.4) ; border: 0px solid # 96A6C5; font-family: Verdana, Arial, sans-serif; font-size: 13px; margin-top: 2px; padding: 6px; genişlik: 190px;) #records tablosu td.field girişi (arka plan -color: rgba (200, 200, 200, 0.4); imleç: işaretçi; float: sağ; genişlik: 100px;) #records table td.field girişi: hover (arka plan rengi: rgba (200, 200, 200, 0.8 );) #records_list (text-align: left;) #records_list .record (border-top: 1px solid # 000000; font-size: 13px; padding: 10px;) #records_list .record: first-child (border-top -width: 0px;) #records_list .record p: first-child (yazı tipi ağırlığı: kalın; yazı tipi boyutu: 11px;)

»» @LexGuestbook

@lex Ziyaretçi Defteri - bedava PHP ziyaretçi defteri siteler için komut dosyası. PHP dilinde yazılmış, @lex Ziyaretçi Defteri Dakikalar içinde kurulumu kolay, yeni başlayanlar için bile anlamak kolay olacaktır.

PHP ziyaretçi defteri tamamen ücretsiz komut dosyası - ana koşul: sayfanın altındaki telif hakkını kaldırmayın. PHP ziyaretçi defteri sunucunuza yüklenir ve diğer sitelerden tamamen bağımsızdır. Yine de gönderiyi her gün seçtiğiniz PHP ziyaretçi defterine yedekleyin. Otomatik kurulum Alex Ziyaretçi Defteri: Veritabanındaki tabloların isimleri kendileri tarafından kaydedilir.

Senaryonun avantajları.

  • Deriler sayesinde görünümü değiştirebilirsiniz @filmdenkare sitenizin tasarımı için. (tüm dış görünümler geçerli XHTML 1.0 Geçişlidir)
  • İÇİNDE PHP ziyaretçi defteri yaklaşık 20 dil yerleşiktir.
  • Her ülkenin kendi bayrağı görüntülenir.
  • İfadeler için destek: kendi ifadelerinizi ekleme, silme, düzenleme yeteneği.
  • Karakter istatistikleri görüntülenir: bir mesajdaki maksimum harf sayısını ayarlayabilirsiniz.
  • Dahili arama motoru.
  • Ziyaretçiler tarafından değerlendirme imkanı. 10 puanlık bir sistemde puanlayın.

Desteklenen diller

Tam çeviri.
Fransızca, İngilizce, Lehçe, Almanca, Norveççe, İtalyanca, Hollandaca, Slovakça, Farsça, Türkçe.

Kısmi çeviri. Bazı kelimeler hala İngilizce.
İspanyolca, Rusça, İsveççe, Çekçe, Hırvatça, Portekizce, İzlandaca, Sırpça, Danca.

PHP 5.2 ve üstü;
- mod_rewrite;
- Veritabanı MySQL 4.1 ve üstü.

Yetenekler

Herhangi bir sitenin altına gömülü (tek yapmanız gereken top.php ve bottom.php dosyalarını düzenlemektir);
- sel önleme;
- yasak listesi;
- görünümün sayfada gezinme<< < ...| 5 | 6 | 7 ... > >>;
- BBCode desteği;
- ifadelerin görüntülenmesi;
- yeni eklenen mesajların bildirimi;
- denetleme için mesaj ekleme yeteneği;
- Admin Paneli;
- kurulumu ve kurulumu kolaydır.

Kurulum

Arşivi açın ve arşivin içeriğini web sunucunuzdaki herhangi bir klasöre kopyalayın (örneğin "ziyaretçi defteri"). Config / config_db.php dosyasını bir metin düzenleyicide açın ve bağlantı ayarlarını (veritabanı ana bilgisayarı veya IP, veritabanı adı, kullanıcı adı ve şifre) belirtin. Guestbook.sql dosyasından MySQL veritabanı tabloları SQL sorgusunu ayırın. genellikle çoğu barındırma hizmetinde bu, phpMyAdmin aracılığıyla web arabirimi aracılığıyla yapılır. Yönetim paneline (http: // siteniz / klasörünüz_yönetici_yönetim /) gidin ve 1111 şifresini girin. Ardından, gerekli ayarları belirtin.

Ticari versiyon

Müşterinin isteği üzerine senaryoyu belirli koşullara uyarlayabilirim. Çeşitli ek fonksiyonlar eklenebilir.

Not

SCRIPT "PHP Ziyaretçi Defteri", PROGRAM TAMAMEN ÜCRETSİZDİR. YALNIZCA YAZARIN TELİF HAKKINI SAKLAMA KOŞULLARI ALTINDA, PROGRAMIN KAYNAK KODUNDAKİ DEĞİŞİKLİKLERİNİZİ SERBEST BİR ŞEKİLDE DAĞITABİLİR, KOPYALAYABİLİR, KOPYALAYABİLİRSİNİZ. "PHP Ziyaretçi Defteri" YAZILIMININ TİCARİ AMAÇLARLA KULLANILMASI YASAKTIR. BU PROGRAMI KULLANIMINIZIN RİSKİ SİZE AİTTİR. YAZAR, KAYIPLAR, VERİ HASARLARI VEYA BU PROGRAMIN KULLANIMI VE İŞLETİMİ İLE İLGİLİ DİĞER HERHANGİ BİR ŞEYDEN, PROGRAMIN PERFORMANSINDAN HİÇBİR SORUMLULUK KABUL ETMEZ.

Senaryomu beğendiyseniz ve bana bir ruble ile teşekkür etme arzunuz varsa, işte detaylarım:

İnternet parası
U237811811298
R198597198920
Z917380288657

Yandex parası
41001635943434

PayPal

Herhangi bir sorunuz veya öneriniz varsa, lütfen şu adresten bana yazın: Bu e-posta adresi spambot'lardan korunuyor. Görüntülemek için JavaScript'in etkin olması gerekir.

Bugün, belki de PHP programlama diline yeni başlayanlar için en iyi görevi anlatacağım - Ziyaretçi defteri. Kanımca bu görev en basit olanıdır, ancak aynı zamanda PHP ve MySQL veritabanı ile çalışmanın tüm temel özelliklerini öğrenmenize olanak tanır. Ek olarak, bu görev sonsuz şekilde genişletilebilir ve bu da yeni teknolojileri geliştirmenize olanak tanır.

Bu sorunun tanımı ve çözümü, performans kontrolleri yapılmadan tam buraya yazılacaktır, bu nedenle bir yerde bir yazım hatası olabilir. Bu benim tembelliğim yüzünden değil, yine ziyaretçi defterini oluşturduğunuzda ek eğitim nedeniyle yapıldı. Ayrıca, sunulan çözüm biraz "çarpık" olacaktır, ancak daha fazlası bu makalenin sonunda "Bağımsız çalışma" bölümünde yer almaktadır.

PHP ile nasıl çalışacağınızı bilmiyorsanız, önce size PHP yazısını okumanızı tavsiye ederim - nereden başlayacağınızı.

Tasarım ve yönetim olmadan en ilkel ziyaretçi defterinin oluşturulmasını analiz edeceğiz. Başka bir deyişle, kendimizi kitaba girmek, mesaj yazmak ve bırakmakla sınırlayacağız.
Görevin kendisinden, bu görevi uygulamak için kendimizi tamamen üç php dosyasıyla sınırlayabileceğimiz anlaşılıyor. Tabii ki kayıt görevi ikiye ayrılabilir: kayıt formu ve veri tabanına veri ekleme, ancak bunu yapmayacağız. Aynı mantık, yorumlama prosedürü için de geçerlidir. Böylece, üç dosya oluşturuyoruz: index.php, registration.php, book.php.

Dosyaların adlarından, neyden sorumlu olacaklarını hemen anlayabilirsiniz: index.php - giriş sayfası, kayıt.php - kayıt sayfası, book.php - ziyaretçi defteri sayfası.

Bizim durumumuzda en basit olanı giriş sayfasıdır. Sayfa bir çift giriş ve şifre girmekten sorumlu olduğundan, bu verileri book.php sayfasına göndermek için bir forma sahip olması gerekir. Ve ayrıca kayıt sayfasına bir bağlantı. Sahibiz:

Ziyaretçi defteri girişi

Oturum aç:
Parola:

giriş

Yukarıdaki kodun ne anlama geldiğini beğenmeyenler için biraz konu dışına çıkmak. Burada çıplak HTML var. Anahtar nokta etikettir form iki parametre alan aksiyonveri girişi onaylandıktan sonra açılacak sayfanın adresinden ve parametresinden sorumlu olan yöntem, form verilerinin belirtilen sayfaya nasıl gönderileceğini yanıtlar (basit kelimelerle POST ve GET'e bakın). Form etiketinin içinde, bir özniteliğe sahip olması gereken girdi alanları (girdi, seçim) belirtilir. isim... Eylem formu parametresinde belirtilen sayfada kullanıcı tarafından girilen verileri almak bu özniteliğin değeri ile mümkün olacaktır. Formun içinde tür ile bir girdi olmalıdır sunmak, özünde bir düğme olan, verilerin eylem sayfasına gönderileceği üzerine tıklayarak.

Devam edelim ... Şimdi yeni bir kullanıcı kayıt sayfası oluşturmamız gerekiyor. Tam olarak neye sahip olmak istediğimizi hemen düşünmeye değer. Basit bir ziyaretçi defteri için benzersiz oturum açma bilgilerine sahip kullanıcıların yanı sıra Web sitelerinin adresini (varsa) bilmenin yeterli olacağına karar verdim. Kullanıcı hakkında ne bilmek istediğimize karar verdikten sonra, veritabanımızı tasarlamaya başlayabiliriz.

PhpMyAdmin'e gidin. Burada gb adında bir veritabanı oluşturalım. Bu veritabanında, aşağıdaki alanlarla bir Kullanıcılar tablosu oluşturun:

Giriş varchar (50) benzersiz // kullanıcı adı, benzersiz şifre alanı varchar (150) // www şifresi varchar (255) // site adresi

Ve zaten veritabanı düzenleyicisine girdiğimizden, mesajları nasıl saklayacağımızı hemen düşünebiliriz. Bizim durumumuzda mesajı kimin ne zaman bıraktığını ve mesajımızın gerçek metnini bilmek oldukça uygundur. Ayrıca kolaylık sağlamak için mesajlarımız numaralandırılmaya değer. Buna karar verdik, böylece aşağıdaki yapıya sahip başka bir Mesaj tablosunu güvenle oluşturabiliriz:

İd int ai (auto_increment) birincil_anahtar // mesaj numarası, kendini artıracak sayaç mes metin // mesajın metni kim varchar (50) // zaman damgası varsayılan (geçerli) olduğunda mesajı bırakan kişinin kullanıcı adı // mesajdan ayrılma zamanı, tarafından varsayılan geçerli tarih ve saattir

Veritabanı düzenlenmiştir. Şimdi kayıt.php dosyasına geçelim. Yukarıdakileri özetlemek gerekirse:

giriş

Oturum aç:
Parola:
Tekrar şifre:
WWW: http: //


Ana

Kod hakkında biraz. Fark etmiş olabileceğiniz gibi, PHP burada mevcuttur. Artık formu tarif etmeyeceğim ama gördüğümüz gibi burada form verileri bu formun bulunduğu sayfaya gönderiliyor. Başka bir deyişle, registration.php dosyası verileri kendisine gönderir. Kimse bunu yapmayı yasaklamaz, ancak kodun okunabilirliğini büyük ölçüde bozduğu için onu kullanmak her zaman mümkün değildir. Ancak diğer yandan bu, PHP dilinin yeteneklerini açıkça gösterir. Esasen sayfamız iki duruma ayrılmıştır. İlk durum, verilerin POST isteği ile sayfaya gönderilmesi, ikincisi ise sayfaya hiçbir POST isteği gönderilmemesi durumudur. İkinci durumda, kayıt formunu göstereceğiz ve ilk durumda, gönderilen verileri kontrol etmeye başlayacağız. Gördüğünüz gibi, veriler ilişkilendirilebilir bir dizi biçiminde gönderilir (yani, indisleri dizeler olan bir dizi). Ayrıca, endeksler, veri gönderme formunda belirtilen giriş alanlarının adlarıyla çakışır. Şunlar. eğer yazarsak

daha sonra, bu verileri POST isteği ile gönderirken, bir değişkenimiz olacaktır.

$ _POST ["vasa-peta"]

Tekrarlanan girişler için herhangi bir kontrol yapmadığımızı da belirtmek gerekir. Oturum açma alanı benzersiz olarak işaretlendiğinden, bu kontrol veritabanı düzeyinde gerçekleştirilecektir.

Şimdi sonuncusu. Konuk defterini kendisi yapmak için kalır. Biraz akıl yürütme. Ziyaretçi defteri kullanıcı adı ve parola ile çalıştığından, yapmamız gereken ilk şey, veri tabanında bulunup bulunmadığını girilen kullanıcı adı ve parolayı kontrol etmektir. Book.php dosyasına da mesaj eklemeye karar verdiğimiz için, mesaj ekleme prosedürü açıkça izlenmelidir. Eh, en sonunda, tüm mesajların görüntüsü. (görüntülendikten sonra bir mesaj eklerseniz, eklenen mesaj yalnızca sayfa yeniden yüklendikten sonra görüntülenecektir). Sahibiz:

Ziyaretçi defteri ";) else (echo" Mesajınız eklenmedi!


"; } } ?>
"name \u003d" giriş "/\u003e "name \u003d" şifre "/\u003e

"; echo" Metin: ". $ satır [" mes "]."
";)) mysql_close ($ link);?\u003e

Aslında hepsi bu. Kod% 100 çalışıyorsa, iyi. Değilse, hataları kendiniz düzeltmeye çalışmanızı tavsiye ederim. Şimdi söz verilen bölüm.

Bağımsız iş
Başta da belirtildiği gibi, bu çözüm "çarpıktır". Nedenini henüz anlamadıysanız, şimdi açıklayacağım. Book.php dosyasında fark etmiş olabileceğiniz gibi, yorum ekle formunda birkaç gizli alan vardır, bunlardan ikisi kullanıcı tarafından girilen kullanıcı adı ve paroladır. İyi değil, değil mi? Bu sorunu sessions kullanarak düzeltmeyi deneyin (PHP'de oturumlarla nasıl çalışılır).
Soruyu cevaplamaya çalışın, fonksiyonlar nasıl farklıdır boş / isset ve çıkış / öl?
Veritabanından mesaj seçme isteğini, mesajlar görüntülendiğinde mesajın yazarının web sitesi görüntülenecek şekilde değiştirin.
Fark ettiyseniz, veritabanındaki kullanıcı parolası açık metin olarak saklanır ve bu pek iyi değildir. Kodu, veritabanı kullanıcının parola karmasını depolayacak şekilde düzenleyin (örneğin, MD5 veya SHA1).