Гостьова книга PHP Guestbook. Гостьова книга PHP Антипатія dealer guestbook php

Сьогодні я опишу, мабуть, найкраще завдання для новачків мови програмування. Гостьова книга. На мій погляд це завдання є найпростішим, але при цьому дозволяє дізнатися про всі основні особливості роботи з PHP і базою даних MySQL. Крім цього, це завдання до нескінченності розширюється, що дозволяє відточувати нові технології.

Опис і розв'язання цього завдання буде написано відразу тут, без перевірок на працездатність, тому, можливо, є помилка. Зроблено це не через мою лінощі, а знову-таки через додаткове тренування, при створенні гостьової книги Вами. Також представлене рішення буде трохи «кривувато», але про це вже наприкінці цієї статті у розділі «Самостійна робота».

Якщо Ви зовсім не знаєте як працювати з PHP, то для початку раджу прочитати нотатку PHP - з чого почати.

Ми розбиратимемо створення найпримітивнішої гостьової книги, без дизайну та адміністрування. Тобто ми обмежимося входом у книгу, реєстрацією та залишенням повідомлень.
Із самого завдання стає зрозуміло, що ми можемо цілком обмежитися трьома файлами php, Задля реалізації даної задачі. Звичайно завдання реєстрації можна розбити на дві: форма реєстрації та додавання даних до бази, проте робити ми цього не будемо. Аналогічні міркування допустимі й у процедури залишення коментарів. Таким чином створюємо три файли: index.php, registration.php, book.php.

За назвами файлів можна відразу зрозуміти, за що вони відповідатимуть: index.php - сторінка входу, registration.php - сторінка реєстрації, book.php - сторінка гостьової книги.

Найпростіше у нашому випадку це сторінка входу. Оскільки сторінка відповідає за введення пари логіну та паролю — на ній повинна бути форма для відправки цих даних на сторінку book.php. А також посилання на сторінку із реєстрацією. Маємо:

Вхід до гостьової книги

Логін:
Пароль:

Реєстрація

Трохи відійшовши від теми, для тих хто не смакує що означає код вище. Тут ми маємо голий HTML. Ключовим моментом є тег formякий приймає два параметри action, який відповідає за адресу сторінки, яка відкриється після підтвердження введення даних, та параметр method, який відповідає яким чином дані форми будуть надсилатися на вказану сторінку (див. POST та GET простими словами). Усередині тега form вказуються поля для введення (input, select), які обов'язково повинні мати атрибут name. Саме за значенням даного атрибута можна буде отримати дані, що введені користувачем, на сторінці вказаної в параметрі форми action. Обов'язково всередині форми повинен бути input з типом submit, який за своєю сутністю є кнопкою, по натисканню на яку і відправиться дані на сторінку action.

Продовжимо… Тепер нам потрібно створити сторінку із реєстрацією нового користувача. Варто одразу продумати, що саме ми хочемо мати. Я вирішив, що для простої гостьової книги буде цілком достатньо мати користувачів з унікальними логінами, а також знати адресу їхнього Web сайту (якщо він є). Оскільки ми визначилися з тим, що ми хочемо знати про користувача, ми можемо почати проектувати нашу базу даних.

Заходимо до phpMyAdmin. Створимо там основу з ім'ям gb. У цій базі створимо таблицю Users з наступними полями:

Login varchar(50) unique //логін користувача, унікальне поле password varchar(150) //пароль www varchar(255) //адреса сайту

А якщо ми вже зайшли в редактор бази, то можна відразу й подумати про те, як ми зберігатимемо повідомлення. У нашому випадку цілком підійде знати хто і коли залишив повідомлення, та й власне текст нашого повідомлення. Також для зручності варто пронумерувати наші повідомлення. З цим ми визначилися, отже, можна сміливо створювати ще одну таблицю Messages з наступною структурою:

Id int ai(auto_increment) primary_key //номер повідомлення, лічильник, який сам буде збільшуватися mes text //текст повідомлення who varchar(50) //логін того, хто залишив повідомлення when timestamp default(current) //час залишення повідомлення, замовчуванням поточна дата та час

Із базою даних розібралися. Тепер ми переходимо до файлу registration.php. Підбивши підсумок вищевикладеному маємо:

Реєстрація

Логін:
Пароль:
Пароль ще раз:
WWW: http://


На головну

Трохи про код. Як Ви вже помітили, тут є PHP. Описувати форму я вже не буду, але, як ми бачимо, тут дані форми посилаються на ту саму сторінку, де розташована дана форма. Тобто файл registration.php шле дані сам на себе. Так робити ніхто не забороняє, проте використовувати це можна не завжди, тому що це сильно псує читабельність коду. Однак, з іншого боку, це наочно демонструє можливості мови PHP. По суті, наша сторінка розділена на два випадки. Перший випадок це коли на сторінку надсилаються дані POST запитом, другий випадок, коли на сторінку ніякого POST запиту не надіслано. У другому випадку ми покажемо форму для реєстрації, а першому почнемо виконувати перевірки надісланих даних. Як видно дані йдуть у вигляді асоціативного масиву (тобто масиву, індексами якого є рядки). Причому індекси збігаються з назвами полів input, зазначеними у формі надсилання даних. Тобто. якщо ми пишемо

то у нас, при надсиланні цих даних POST запитом, буде змінна

$_POST["vasa-peta"]

Також варто зауважити, що жодних перевірок на повтор логіну ми не робимо. Ця перевірка буде здійснюватися на рівні бази даних, тому що поле логін позначене як унікальне.

Тепер останнє. Залишилося зробити саму гостьову книгу. Небагато міркувань. Так як гостьова книга працює за логіном і паролем, то перше, що нам доведеться робити - перевіряти введений логін і пароль на наявність у базі. Оскільки ми вирішили додавати повідомлення як і файлі book.php, то очевидно слідом повинна здійснюватися процедура додавання повідомлення. Ну і наприкінці відображення всіх повідомлень. (якщо зробити додавання повідомлення після їх відображення, то додане повідомлення відобразиться тільки після перезавантаження сторінки). Маємо:

Гостьова книга "; ) else ( echo "Ваше повідомлення не додано!


"; } } ?>
" name="login" /> " name="password" />

"; echo "Текст: ".$row["mes"]."
"; ) ) mysql_close($link); ?>

Ось насправді і все. Якщо код 100% робітник, добре. Якщо ні, то рекомендую Вам постаратися самостійно виправити помилки. Тепер обіцяний розділ.

Самостійна робота
Як уже говорилося на початку, це рішення «криве». Якщо Ви ще не зрозуміли чому, то зараз поясню. Як ви могли помітити у файлі book.php у формі додавання коментаря присутні кілька прихованих полів, при цьому два з них - це введений користувачем логін та пароль. Не добре, чи не так? Спробуйте виправити цей недолік використовую сесії (Як працювати з сесіями в PHP).
Намагайтеся відповісти на питання, чим відрізняються функції empty/issetі exit/die?
Змініть запит вибірки повідомлень з бази так, щоб при виведенні повідомлень відображався веб-сайт автора повідомлення.
Якщо ви помітили, то пароль користувачів у базі даних зберігатиметься у відкритому вигляді, а це дуже не добре. Відредагуйте код так, щоб у базі зберігався хеш пароля користувача (наприклад, MD5 або SHA1).

Sort By:

  • 1

    Це є потужним програмним забезпеченням з новим user interface, easy to use software to management warehouse inventory with customers, suppliers, products and automatical calculation of the stock. Це має точний чіткий interface of latest generation. У будь-який вільний househouse inventory with loading and unloading, products stock and quantities to be ordered. Ви можете спробувати завантажити цю програму за цим посиланням: www.rgpsoft.com/software/calus. php

  • 2

    Complete Web Based / SAAS Accounting & ERP with FULL SOURCE CODE! PHP& MySQL Based, цей Software є сучасним і відповідальним, використовує bootstrap and MVC Architecture! Всі основні функції та функція ERP включаються, GL, AR, AP, OE, Inv, Warehousing, CRM, MRP, і Shopping Cart. Advances features include Multi-Entity Accounting with Automatic Financial Statement Consolidation, Unlimited Users, Unlimited Warehouses, Unlimited Bins within Warehouses, Multi-Language, Multi...

  • 3
  • 4

    Bitmixsoft is a Romania software company and offers a software title called PHP-Jobsite. PHP-Jobsite є job board software, і включають особливості таких як billing & invoicing, discount / package management, employer accounts, job management, matching engine, resume posting, resume search, and job marketplace. З системами потреб, PHP-Jobsite є наявним як SaaS software. Costs start at $299.00. Один з інших виробів до PHP-Jobsite включає Careerleaf Job Board Software, SmartJobBoard, і JobMount Job Board Software.

  • 6

    The Lightning-Smart PHP IDE. Php Storm deeply understands ваш code. Php Storm is perfect for working with Symfony, Laravel, Drupal, WordPress, Zend Framework, Magento, Joomla!, Cake PHP, Yii, та інші frameworks. The editor дійсно "gets" ваш code і глибоко understands його структура, supporting all the PHP language features for modern і legacy projects. Це забезпечує кращий код завершення, refactorings, on-the-fly error prevention, і більше. Make the most of the cutting edge front...

  • 19

    The latest technologies, PHP, JS, jQuery, HTML5, Bootstrp and Codeigniter framework з HMVC coding pattern. Responsive themes for seamless full-blow user experience by managing a steady look and feel of your site across devices. Ви повинні бути безпечно і надійно нашого продукту з програмою Security Bounty Program encourage responsible disclosure by researchers. З нашою streamlined technology we give you an unprecedented level of control. User-friendly fast, easy to understand and manage.

  • 20

PHP 5.2 та вище;
- mod_rewrite;
- База даних MySQL 4.1 та вище.

Можливості

Вбудовується під будь-який сайт (для цього потрібно лише відредагувати файли top.php і bottom.php);
- Антифлуд;
- бан лист;
- Посторінкова навігація виду<< < ...| 5 | 6 | 7 ... > >>;
- Підтримка BBCode;
- Відображення смайликів;
- повідомлення про нові додані повідомлення;
- Можливість додавання повідомлень на модерацію;
- Панель Адміністратора;
- простота в установці та настоянці.

Встановлення

Розпакуйте архів та скопіюйте вміст архіву в будь-яку папку на Вашому веб-сервері (наприклад "guestbook"). Відкрийте файл config/config_db.php у текстовому редакторі та вкажіть налаштування підключення (хост бази даних або IP, ім'я бази даних, логін та пароль). Розмістіть таблиці бази даних MySQL SQL-запиту із файлу guestbook.sql. зазвичай на більшості хостингів це робиться за допомогою web-інтерфейсу через phpMyAdmin. Зайдіть у панель адміністрування (http://ваш_сайт/папка_с_скриптом/admin/) і введіть пароль 1111. Далі вкажіть необхідні налаштування.

Комерційна версія

За бажанням замовника, я можу адаптувати скрипт під конкретні умови. Додаткові функції можуть бути додані.

Примітка

СКРИПТ "PHP Guestbook", ДАЛІ ПРОСТО ПРОГРАМА Є ПОВНІСТЮ БЕЗКОШТОВНА. ВИ МОЖЕТЕ ВІЛЬНО РОЗПОШИРЮВАТИ, КОПІРОВАТИ, ВНОСИТИ СВОЇ ЗМІНИ У ПОХІДНОМУ КОДУ ПРОГРАМИ, ЛИШЕ ПРИ УМОВІ ЗБЕРЕЖЕННЯ КОПІРАЙТУ АВТОРА. ВИКОРИСТАННЯ ПРОГРАМИ "PHP Guestbook" У КОМЕРЦІЙНИХ ЦІЛЯХ ЗАБОРОНЕНО. Ви використовуєте цю програму на свій власний страх і ризик. АВТОР НЕ НЕСЕ ЖОДНОЇ ВІДПОВІДАЛЬНОСТІ ЗА РОБОТОЗДАТНІСТЬ ПРОГРАМИ, А ТАКОЖ ЗА ВТРАТИ, ПОШКОДЖЕННЯ ДАНИХ АБО ЧОГО ІНШОГО, ЗВ'ЯЗАНІ З ВИКОРИСТАННЯМ І ВИКОРИСТАННЯМ ТА .

Якщо Вам сподобався мій скрипт і у Вас є бажання віддячити мені рублем, то мої реквізити:

WebMoney
U237811811298
R198597198920
Z917380288657

Яндекс гроші
41001635943434

PayPal

Якщо у Вас виникнуть запитання чи є пропозиції, будь ласка, пишіть мені на адресу: Ця адреса електронної пошти приховується від різних спамерських пошукових роботів. У вас має бути включений JavaScript для перегляду.

1. На безкоштовному хостингу є лише те, що дають.
2. Краще, але не обов'язково. Порядний гість залишить повідомлення так, як потрібно (через мою форму), а гарнийхакер все одно обійде ваші $_GET, $_POST, $_COOKIE та $HTTP_REFERER теж.
3. Контроль довжини проводитися, але неявно, самої БД (єдине, що саме повідомлення може бути величезне - до 64Кб).
4. Так, є, HtmlSpecialChars була використана, не використовував AddSlashes (і це велика помилка, визнаю свою провину, див. нижче). При ключеній magic_quotes_gpc, дана проблема не настільки гостра, але дірка в безпеці залишається (в панелі управління).
5. Так, згоден, можна було б і вирізати, але ім'я #[email protected]%#$^%$ нічим не гірше ніж AF4ETX09T43. У e-mail та url є дірка, можна використовувати скрипти.
6. Цікаво, що не є ініціалізованим?

Є ще ряд цікавих прийомів, як, наприклад, захист від автоматичного введення через картинку (як на цьому сайті) http://www.сайт/webmast/php/Security-Images-in-PHP/
...

Картинок здається не було, навіщо ускладнювати демонстраційний приклад. Поки що жодного разу не зустрічав гостьовий із подібним захистом. Щодо цього сайту, то це не гостьова.

Анатомія міжсайтового скриптингу XSS
http://www.woweb.ru/index.htm/id/1073393942

Дуже цікаво, дякую.

З.И. Якби Аффтор попрацював би почитати (і вникнути) у статті що на цьому ж сайті, то зрозумів би, наскільки його праця непрофесійна. Варто враховувати досвід попередніх Авторів і, принаймні, поважати їхню працю - вони ж вам писали.

Де є не пошана? Вибачте, якщо кого образив.

Щодо захисту, то раджу ще раз прочитати перший абзац статті, я не ставив за мету розглядати надійну гостьову, а лише показати як можна написати найпротішугостьову, для тих хто тільки починає пізнавати CGI, адже не все одразу приходить, треба починати з простого, і ти теж не одразу став таким розумним, теж робив помилки, тож давай залишимо аспекти захисту іншим статтям, іншим авторам.

Так, з погляду захисту цей скрипт непрофесійний, і я непрофесіонал у галузі захисту, тому в першому абзаці і стоїть відповідне застереження, яке, на жаль, не всі прочитали.

PS

Цитата:

Закон "Про авторське право та суміжні права"
Стаття 6. Об'єкт авторського права. загальні положення
1. Авторське право поширюється на твори науки, літератури та мистецтва, що є результатом творчої діяльності, незалежно від призначення та перевагитвори, а також від способу його вираження.
Решта можеш прочитати тут: http://www.febras.ru/~patent/copyright/2_3part2.html
У тому числі Стаття 9. п.1
І не тобі вирішувати користуватися мені чи моїм правом ні.

"Звучить гарно, як казка". Найчастіше людина, вибираючи пристрасть, вибирає насолоду, а чи не вічне борошно. І за цими вже маленькими "виборами" складається загальний? Усвідомлений вибір, був би тоді, коли ліворуч від людини стояла пристрасть, а за нею котел, праворуч стояв би Ісус, а за ним двері раю. Вибір очевидний і усвідомлений. Гріх чи чеснота – це завжди усвідомлений вибір, інакше психічно хворих людей судили б несправедливо. Чи можна сказати, що суїцидник усвідомлено віддає перевагу вічному борошну, а не тимчасовим "легким" земним стражданням? Та взагалі, багато вчинених гріхів неусвідомлені. Якби людей судили за гріхи за рівнем їхньої усвідомленості, то головними грішниками стали б самі православні – це несправедливо, парадоксально. З цього всього випливає: що засудження неусвідомленого гріха несправедливо, але при цьому несправедливим і мірятиме гріх за усвідомленістю, а з цього випливає, що якщо перед людиною не стоїть вибір між котлом і раєм до якого він може торкнутися, то суд його вибору буде несправедливим. А з цього "марення" вже випливає, що судити людину чи не має сенсу чи несправедливо. Отже, суд несправедливий за своєю суттю. Якщо суд несправедливий, а судить Бог, ми посміємо уявити, що Бог несправедливий. Ідучи по ланцюжку далі можна допустити смиренне уявлення, що Бога чи ні чи він докорінно інший, ніж описаний в євангелії. А насправді мені просто хотілося зрозуміти: Чому людей настільки сильно мучать у пеклі, чому для грішників не відвели інше місце і чому їм не дають можливості насолоджуватися тим, чим вони насолоджувалися до цього або другий шанс на рай, але менш прекрасний, ніж у праведників. ? Хіба б у цьому не виражалася любов і справедливість? Адже варіантів мільйони, а відсутність цього, не говорить про зворотне? Ви хочете на повному серйозі мені сказати, що справедливо грішникам уготоване таке пекло? Якщо любиш, то обсмикнеш людину, коли та стрибає під машину, навіть якщо усвідомлено стрибає по своїй волі.

2. Далі, Ви пишете: «Якби людей судили за гріхи за рівнем їхньої усвідомленості, то головними грішниками стали б самі православні – це несправедливо, парадоксально». Чому ж це і справедливо і не парадоксально. Людина, яка знає, як і що вона повинна робити і порушує заповідь без сумніву більш винна, ніж той, хто взагалі нічого не знає. І Бог сказав, що той, хто знає і грішить, буде покараний більше (Лк. 12, 47-48).

3. Далі, Ви пропонуєте міркування про Божий суд і Вам здається, що вони логічні. Але насправді у них немає жодної логіки. Вони цілком надумані і нічого спільного з реальністю. Очевидно, в них тільки те, що Ви намагаєтеся міркувати про те, чого просто не знаєте. Ні про Бога, а Він досить відкрив нам про Себе, ні про властивості судів Божих, і приватного та Страшного суду, ні про таємне життя кожної душі та шляхи її вибору та боротьби за цей вибір. Вам просто невідоме християнство. Тут знову Ви самі свідчите, що прийшли сюди не питати. Коли людина ось так, що нітрохи не сумнівається, впевнено розмірковує про несправедливість суду Божого, будуючи хибно-логічні викладки, це свідчить про чималу проблему, і вона полягає не в логіці. У неї духовне коріння.
Чому я вам це пишу? Можна було б відповісти коротко: Бог праведний, всезнаючий, справедливий і справедливий. Як Істота абсолютна і незмінна Він судить завжди справедливо, завжди милосердно, завжди на основі Свого всезнання: Йому відкриті серця і немає для Нього нічого таємного. Він судить з незбагненним для людини любов'ю і з незрозумілою нам непорушністю справедливості. Але Ви, гадаю, не зможете цього зрозуміти, як і вперше. Це все одно, що пояснювати першокласнику біном Ньютона та ще й такому першокласнику, який не хоче вчитися. Тим не менш, я позначу відповіді і на наступні запитання, щоб Ви не подумали, що на Ваші запитання християни не мають відповідей. Насправді Ваші запитання не вирішуються лише у Вашій уяві.

4. «Чому людей настільки сильно мучать у пеклі». Ну, це повторення пройденого. Дуже багато вже було написано про те, що пекло це не покарання, а вибір всього життя. І ніхто не мучитиме людей в пеклі, а страждатимуть вони від їхніх власних пристрастей, тих, які вони вирощували в душі все життя. Напишу словами однієї чудової книги: "Душа, що перейшла за труну з невиліковними ранами - зі своїми пристрастями, залишається там у пристрасному, болючому стані і, невигоєна на землі, вже тут не може позбутися своїх пристрастей. І як не лікувана хвороба розвивається все більше і більше, так за труною пристрасний стан душі, за законом життя, буде все більше і більше розвиватися, доходячи до жахливих розмірів. в природу і зробила пристрасний стан знедолених ніби природним, буде невпинно, цілу вічність, терзати душу .... Ось в чому полягає внутрішня мука грішників в геєнні! …Пристрасті та звички продовжують існувати і, внаслідок своєї незадоволеності, є джерелом мук для душі. Чим хто грішить, тим і мучиться, якщо тільки не влікується на землі».

5. Ви не без наївності питаєте: «Ви хочете на повному серйозі мені сказати, що справедливо грішникам уготоване таке пекло?» - Вибравши сенс свого життя пристрасті, людина залишається з цим вибором своєї волі. Що ж тут несправедливого? На це вам відповідає апостол: «хто ким переможений, той тому і раб» (2 Петр. 2, 19).
6. Про те, в чому «виражалася б любов і справедливість» Вам теж написано вже більш ніж достатньо.
7. «Чому для грішників не відвели інше місце і чому їм не дають можливості насолоджуватися тим, чим вони насолоджувалися до того чи другого шансу на рай». – Грєшников залишать у тому місці, яке з'явиться вибором їхнього життя. Теорії про другий шанс, друге життя, реінкарнацію та ін. – це прийоми диявола, щоб погубити людей. Нам дано життя нема на що інше, як на те, щоб ми зробили вибір. Бог посилає кожному все, що йому потрібне для цього. І Бог посилає смерть лише тоді, коли вибір душі визначився. Той, хто вибрав зло один раз, обере його і сто разів. Той, хто прагне істини, вибере її у своєму єдиному житті. Ніхто з нас не матиме другого шансу, бо ніхто з нас не скористається ним: це була б погана нескінченність зла. А у Бога немає нічого недоцільного. Можна почитати про це у статті
8. «Якщо любиш, то обсмикнеш людину, коли та стрибає під машину, навіть якщо усвідомлено стрибає за своєю волею». Бог не тільки багато разів за наше життя зупиняє нас, спрямовує, наполягає, всіляко застерігає через людей, обставини, книги, вселяючи нам добрі помисли і будячи нашу совість. Бог із однієї тільки Любові зійшов землю, населену жахливими грішниками, щоб помилувати їх. Він став Людиною і помер у страшних муках на хресті, щоб взяти на Себе всі наші гріхи і цим відкрити нам шлях до раю. Він кличе до Себе кожного все його життя, і чекає від нас тільки одного: вільного волі жити в добрі та любові. Тому ми без відповіді будемо перед Ним на суді, поправивши таку висоту милосердя.

9. І останнє. У Вашому розпорядженні весь сайт, де є відповіді на всі Ваші запитання. Ласкаво просимо. А ось якщо Ви вирішите й надалі просто сперечатися, це не до нас. Не ображайтеся, якщо Вам не дадуть відповіді. Апостолом заповідано християнам не брати участь у безплідних суперечках і не розуміти тих, хто не приймає перших двох умовлянь.