Ιδιωτική συνομιλία στο διαδίκτυο χωρίς εγγραφή php javascript. Σχήμα βάσης δεδομένων. Πραγματοποίηση διαδικτυακής συνομιλίας AJAX χρησιμοποιώντας PHP και jQuery

HTML

Ως συνήθως, το πρώτο βήμα αφορά τη σήμανση HTML. Το έγγραφό μας είναι κατασκευασμένο σύμφωνα με το HTML5, το οποίο μας επιτρέπει να χρησιμοποιούμε μια νέα, συντομότερη σύνταξη DOCTYPE, και παραλείψτε το χαρακτηριστικό τύποςσε ετικέτες γραφή.

index.html

Πραγματοποίηση διαδικτυακής συνομιλίας με AJAX χρησιμοποιώντας PHP, MySQL και jQuery | Επίδειξη για ιστότοπο ιστότοπου Δημιουργία διαδικτυακής συνομιλίας AJAX με χρήση PHP και jQuery

Για τη βελτιστοποίηση της φόρτωσης, τα στυλ περιλαμβάνονται σε ενότητες κεφάλι, Α Αρχεία JavaScriptπεριλαμβάνονται στο κάτω μέρος του εγγράφου, πριν από την ετικέτα κλεισίματος σώμα.

Για να οργανώσουμε μια περιοχή με δυνατότητα κύλισης με γραμμές συνομιλίας, χρησιμοποιούμε την προσθήκη jScrollPane. Αυτό το πρόσθετο έχει το δικό του δικά τους στυλ, που περιλαμβάνεται στις ενότητες κεφάλι.

Η σήμανση συνομιλίας αποτελείται από τέσσερα κύρια στοιχεία div - πάνω πάνελ, κοντέινερ συνομιλίας, κοντέινερ χρήστη και κάτω πλαίσιο. Τελευταίος divπεριέχει φόρμες εγγραφής χρήστη και αποστολής μηνυμάτων. Η φόρμα υποβολής μηνύματος είναι κρυφή από προεπιλογή και εμφανίζεται μόνο εάν ο χρήστης έχει συνδεθεί επιτυχώς στο σύστημα συνομιλίας.

Στη συνέχεια, περιλαμβάνουμε τα αρχεία JavaScript: τη βιβλιοθήκη jQuery, το πρόσθετο mousewheel (που χρησιμοποιείται στο jScrollPane), το πρόσθετο jScrollPane και το αρχείο script.js.


Σχήμα βάσης δεδομένων

Πριν προχωρήσουμε στο μέρος της PHP, πρέπει πρώτα να ρίξουμε μια ματιά στον τρόπο οργάνωσης των δεδομένων συνομιλίας στη βάση δεδομένων Δεδομένα MySQL.

Για το σενάριό μας χρησιμοποιούμε δύο πίνακες. Στον πίνακα webchat_usersαποθηκεύονται πληροφορίες σχετικά με τους συμμετέχοντες στη συνομιλία. Ο πίνακας έχει πεδία ταυτότητα , όνομα, gravatarΚαι τελευταία_δραστηριότητα. Πεδίο όνομαορίζεται ως μοναδικό, αποτρέποντας έτσι τη χρήση διπλών ονομάτων στη συνομιλία.


Σε άλλους χρήσιμη ιδιότηταπεδία με μοναδικό ευρετήριο είναι ότι το αίτημα εισαγωγής θα αποτύχει με ένα σφάλμα και την ιδιότητα inserted_linesΤο αντικείμενο MySQLi θα οριστεί σε 0 εάν προσπαθήσετε να εισαγάγετε διπλότυπες σειρές. ΣΕ κλάση PHP Κουβέντα αυτό το ακίνητοθα χρησιμοποιηθεί ενεργά.

Πεδίο τελευταία_δραστηριότηταπεριέχει την τιμή του χρόνου. Η τιμή ενημερώνεται κάθε 15 δευτερόλεπτα για κάθε χρήστη. Το πεδίο ορίζεται επίσης ως ευρετήριο, επιτρέποντας τη γρήγορη διαγραφή ανενεργούς χρήστες(τιμή στο πεδίο τελευταία_δραστηριότηταπερισσότερα από 15 σημαίνει ότι ο χρήστης δεν βλέπει πλέον το παράθυρο συνομιλίας).

Τραπέζι webchat_linesπεριέχει καταχωρήσεις συνομιλίας. Σημειώστε ότι αποθηκεύουμε και εδώ το όνομα του συγγραφέα και το gravatar. Αυτή η επικάλυψη μας επιτρέπει να αποφύγουμε τη χρήση μιας δαπανηρής οδηγίας ενώνωκατόπιν αιτήματος πιο πρόσφατες καταχωρήσεις- το πιο συχνά χρησιμοποιούμενο στην εφαρμογή μας.


Οι ορισμοί πινάκων είναι διαθέσιμοι στο αρχείο tables.sql στις πηγές. Μπορείτε να χρησιμοποιήσετε κείμενο ερωτήματος για να δημιουργήσετε πίνακες. Επίσης, κατά την εγκατάσταση συνομιλίας στον κεντρικό υπολογιστή σας, πρέπει να αλλάξετε τις ρυθμίσεις στο ajax.php στα δεδομένα σας για σύνδεση στη βάση δεδομένων MySQL.

PHP

Τώρα έχουμε τη βάση δεδομένων, ας συζητήσουμε το σενάριο PHP που ελέγχει τη συνομιλία.

Το πρώτο αρχείο που θα δούμε είναι το ajax.php. Επεξεργάζεται αιτήματα AJAX από την πλευρά του πελάτη από το jQuery και εξάγει δεδομένα σε μορφή JSON.

ajax.php

/* Διαμόρφωση βάσης δεδομένων. Προσθέστε τα δεδομένα σας */ $dbOptions = array("db_host" => "", "db_user" => "", "db_pass" => "", "db_name" => ""); /* Τέλος ενότητας διαμόρφωσης βάσης δεδομένων */ error_reporting(E_ALL ^ ​​​E_NOTICE); απαιτούν "classes/DB.class.php"? απαιτούν "classes/Chat.class.php"? απαιτούν "classes/ChatBase.class.php"? απαιτούν "classes/ChatLine.class.php"? απαιτούν "classes/ChatUser.class.php"? session_name("webchat"); session_start(); if(get_magic_quotes_gpc())( // Αφαίρεση επιπλέον κάθετου array_walk_recursive($_GET,create_function("&$v,$k","$v = stripslashes($v);")); array_walk_recursive($_POST,create_function(" &$v,$k","$v = stripslashes($v);")); ) try( // Σύνδεση στη βάση δεδομένων DB::init($dbOptions); $response = array(); // Επεξεργασία υποστηριζόμενες ενέργειες: switch($_GET["action"])( case "login": $response = Chat::login($_POST["name"],$_POST["email"]); break; case "checkLogged" : $response = Chat::checkLogged( case "logout"): $response = case "submitChat": $response = Chat::submitChat($_POST); Διάλειμμα "getUsers": $response = Chat::getChats: $response = Chat: ) echo json_encode($response) catch(Exception $e)( die(json_encode(array("error" => $e->getMessage())));

Για ευκολία, χρησιμοποιείται ο χειριστής διακόπτηςγια να ορίσετε τις ενέργειες που χειρίζεται το σενάριο. Εφαρμόζει υποσυστήματα συνομιλίας, λειτουργίες σύνδεσης/αποσύνδεσης και ενέργειες για την αναζήτηση μιας λίστας αντιγράφων και χρηστών στο διαδίκτυο.

Η έξοδος έχει τη μορφή μηνυμάτων JSON (με τα οποία μπορεί να γίνει εύκολη επεξεργασία χρησιμοποιώντας jQuery), τα σφάλματα δημιουργούν εξαιρέσεις. Χειριστής διακόπτηςδιανέμει όλα τα αιτήματα στις αντίστοιχες στατικές μεθόδους της κλάσης Κουβέντα, το οποίο θα συζητηθεί αργότερα σε αυτήν την ενότητα.

DB.class.php

Κλάση DB ( ιδιωτική στατική $instance; ιδιωτική $MySQLi; ιδιωτική συνάρτηση __construct(array $dbOptions)( $this->MySQLi = @ new mysqli($dbOptions["db_host"], $dbOptions["db_user"], $dbOptions[ "db_pass"], $dbOptions["db_name"] if (mysqli_connect_errno()) (writ new Exception("Database error."); ) $this->MySQLi->set_charset("utf8" ) δημόσια στατική συνάρτηση init); (πίνακας $dbOptions)( if(self::$instance instanceof self)( return false; ) self::$instance = new self($dbOptions); ) δημόσια στατική συνάρτηση getMySQLiObject())( return self::$ instance- >MySQLi ) δημόσια στατική συνάρτηση ερώτημα($q)( return self::$instance->MySQLi->query($q); >real_escape_string(htmlspecialchars($str) )

Η κλάση DB είναι ένας διαχειριστής βάσης δεδομένων. Ο κατασκευαστής δηλώνεται ως ιδιωτικόςΈτσι, το αντικείμενο δεν μπορεί να δημιουργηθεί εκτός της κλάσης και η προετοιμασία είναι δυνατή μόνο από τη στατική μέθοδο init(). Παίρνει έναν πίνακα παραμέτρων σύνδεσης MySQL και δημιουργεί ένα στιγμιότυπο της κλάσης, το οποίο περιέχεται στη στατική μεταβλητή self::$instance . Αυτό διασφαλίζει ότι υπάρχει μόνο μία σύνδεση με τη βάση δεδομένων τη δεδομένη στιγμή.

Η υπόλοιπη κλάση υλοποιεί επικοινωνία με τη βάση δεδομένων, η οποία βασίζεται στη μέθοδο static query().

ChatBase.class.php

/* Βασική κλάση που χρησιμοποιείται από τις κλάσεις ChatLine και ChatUser */ class ChatBase( // Αυτός ο κατασκευαστήςχρησιμοποιείται από όλες τις τάξεις συνομιλίας: δημόσια συνάρτηση __construct(array $options)( foreach($options as $k=>$v)( if(isset($this->$k))( $this->$k = $v ) ) ) )

Αυτή είναι μια απλή βασική κατηγορία. Ο κύριος σκοπός του είναι να ορίσει έναν κατασκευαστή που λαμβάνει μια σειρά παραμέτρων αλλά αποθηκεύει μόνο αυτές που ορίζονται στην κλάση.

ChatLine.class.php

/* Γραμμή συνομιλίας */ κλάση ChatLine επεκτείνει το ChatBase( προστατευμένο $text = "", $author = "", $gravatar = ""; δημόσια λειτουργία save())( DB::query(" INSERT INTO webchat_lines (συγγραφέας, gravatar , κείμενο) ΤΙΜΕΣ ("".DB::esc($this->συγγραφέας)."", "".DB::esc($this->gravatar)."", "".DB::esc($ this ->text)."")"); // Επιστροφή ενός αντικειμένου MySQLi της κλάσης DB επιστρέφει DB::getMySQLiObject(); ) )

Τάξη ChatLineείναι μια προκύπτουσα κλάση από ChatBase. Ένα αντικείμενο αυτής της κλάσης μπορεί εύκολα να δημιουργηθεί περνώντας έναν πίνακα στον κατασκευαστή με κείμενο, όνομα συγγραφέα και στοιχείο gravatar. Ταξική ιδιοκτησία gravatarπεριέχει τον κατακερματισμό md5 της διεύθυνσης email. Απαιτείται για να αποκτήσετε ένα προσαρμοσμένο avatar που ταιριάζει διεύθυνση ηλεκτρονικού ταχυδρομείου, από το gravatar.com.

Αυτή η κλάση ορίζει επίσης μια μέθοδο εκτός, το οποίο αποθηκεύει το αντικείμενο στη βάση δεδομένων. Επειδή η μέθοδος επιστρέφει ένα αντικείμενο MySQLi που περιέχεται στην κλάση DB, μπορείτε να ελέγξετε εάν η λειτουργία ολοκληρώθηκε με επιτυχία χρησιμοποιώντας την ιδιότητα επηρεασμένοι_γραμμές.

ChatUser.class.php

Η κλάση ChatUser επεκτείνει το ChatBase( προστατευμένο $όνομα = "", $gravatar = ""; δημόσια συνάρτηση αποθήκευση())( DB::query(" INSERT INTO webchat_users (όνομα, gravatar) VALUES ("".DB::esc($ αυτό ->όνομα)."", "".DB::esc($this->gravatar)."")"); επιστροφή DB::getMySQLiObject(); ) ενημέρωση δημόσιας λειτουργίας())( DB::query (" INSERT INTO webchat_users (όνομα, gravatar) ΤΙΜΕΣ ("".DB::esc($this->name)."", "".DB::esc($this->gravatar)."") ΣΕ ΔΙΠΛ. KEY UPDATE last_activity = ΤΩΡΑ()"); ) )

Μια κλάση έχει ιδιότητες όνομαΚαι gravatar(σημειώστε τον τροποποιητή πρόσβασης προστατεύονται- οι ιδιότητες είναι διαθέσιμες στην κλάση ChatBase και μπορούμε να ορίσουμε τις τιμές τους στον κατασκευαστή).

Η κλάση ορίζει μια μέθοδο update() που ενημερώνει το πεδίο τελευταία_δραστηριότητατην τιμή της τρέχουσας ώρας. Αυτό δείχνει ότι ο χρήστης διατηρεί το παράθυρο συνομιλίας ανοιχτό και θα πρέπει να υπολογίζεται ως συγγραφέας στο διαδίκτυο.

Chat.class.php - Μέρος 1

/* Η κλάση Chat περιέχει public στατικές μέθοδοι, τα οποία χρησιμοποιούνται στο ajax.php */ class Chat( public static function login($name,$email)( if(!$name || !$email)(try new Exception("Συμπληρώστε όλα τα υποχρεωτικά πεδία.") ; ) if(!filter_input(INPUT_POST,"email",FILTER_VALIDATE_EMAIL))(ρίξε νέα Εξαίρεση("Μη έγκυρη διεύθυνση email."); ) // Προετοιμασία της κρυφής μνήμης gravatar: $gravatar = md5(strtolower(trim($email)) ); 1)( throw new Exception("Αυτό το όνομα χρησιμοποιείται."); $_SESSION["user"] = array("name" => $name, "gravatar" => $gravatar); επιστροφή πίνακα ("status" => 1, " name" => $name, "gravatar" => Chat::gravatarFromHash($gravatar) ) δημόσια στατική συνάρτηση checkLogged())( $response = array("logged" => false); ($_SESSION["user "]["name"])( $response["logged"] = true; $response["loggedAs"] = array("name" => $_SESSION["user"]["name "], "gravatar" => Συνομιλία::gravatarFromHash($_SESSION["χρήστης"]["gravatar"]));

) επιστροφή $response; διακόπτης) δημόσια στατική συνάρτηση logout())( DB::query("DELETE FROM webchat_users WHERE name = "".DB::esc($_SESSION["user"]["name"])."""); $_SESSION = array( unset($_SESSION return array("status" => 1);

Αυτός ο κώδικας κάνει όλη τη δουλειά. Στον χειριστή gravatarστο αρχείο ajax.php, επιλέχθηκαν ενέργειες που αντιστοιχούσαν στις μεθόδους αυτής της κλάσης. Κάθε μία από αυτές τις μεθόδους επιστρέφει έναν πίνακα, ο οποίος στη συνέχεια μετατρέπεται σε αντικείμενο JSON χρησιμοποιώντας τη συνάρτηση json_encode() (αυτό συμβαίνει στο κάτω μέρος του αρχείου ajax.php). Όταν ένας χρήστης συνδέεται, το όνομά του καιαποθηκεύονται ως στοιχεία πίνακα

$_SESSION

και να είναι διαθέσιμα σε επόμενα αιτήματα.< SUBTIME(NOW(),"0:5:0")"); DB::query("DELETE FROM webchat_users WHERE last_activity < SUBTIME(NOW(),"0:0:30")"); $result = DB::query("SELECT * FROM webchat_users ORDER BY name ASC LIMIT 18"); $users = array(); while($user = $result->fetch_object())( $user->gravatar = Chat::gravatarFromHash($user->gravatar,30); $users = $user; ) return array("users" => $users, "total" => DB: :query("SELECT COUNT(*) as cnt FROM webchat_users")->fetch_object()->cnt);

) δημόσια στατική συνάρτηση getChats($lastID)( $lastID = (int)$lastID; $result = DB::query("SELECT * FROM webchat_lines WHERE id > ".$lastID." ORDER BY id ASC"); $chats = array(); while($chat = $result->fetch_object())( // Επιστροφή του χρόνου δημιουργίας μηνύματος σε μορφή GMT (UTC): $chat->time = array("hours" => gmdate("H. " ,strtotime($chat->ts)), "minutes" => gmdate("i",strtotime($chat->ts))); $chat->gravatar = Chat::gravatarFromHash($chat->gravatar ) ; $chats = $chat ) return array("chats" => $chats) public static function gravatarFromHash($size=23)( return "http://www.gravatar.com/avatar/); " .$hash."?size=".$size."&default=". urlencode("http://www.gravatar.com/avatar/ad516503a11cd5ca435acc9bb6523536?size=".$size) ) Το jQuery στέλνει αιτήματα getUsers() κάθε 15 δευτερόλεπτα. Χρησιμοποιούμε αυτό το γεγονός για να αφαιρέσουμε αντίγραφα που είναι παλαιότερα των 5 λεπτών και ανενεργούς χρήστες από τη βάση δεδομένων. Θα ήταν δυνητικά δυνατή η διαγραφή δεδομένων εγγραφής getChats

, αλλά αυτό το αίτημα έρχεται κάθε δευτερόλεπτο και το πρόσθετο φορτίο μπορεί να επηρεάσει την απόδοση της εφαρμογής. Η μέθοδος getChats() χρησιμοποιεί τη συνάρτηση gmdate για να εμφανίσει την ώρα σε μορφή GMT. Στην πλευρά του πελάτη χρησιμοποιούμε τις τιμές ώρας και λεπτών για να τις ορίσουμεΑντικείμενο JavaScript

, και ως αποτέλεσμα, η ώρα εμφανίζεται σύμφωνα με τη ζώνη ώρας του χρήστη.

Συνέχεια στο δεύτερο μέρος!

Σήμερα θέλω να πω και να δείξω πώς να γράψω μια συνομιλία σε PHP χρησιμοποιώντας τεχνολογία ajax και βάση δεδομένων mysql. Θα χρησιμοποιήσουμε το Ajax για να διασφαλίσουμε ότι η σελίδα δεν θα επαναφορτωθεί κατά την αποστολή μηνυμάτων.

Λοιπόν, πρώτα πρέπει να γράψετε μια εγγραφή για τη μελλοντική συνομιλία. Για όσους δεν έχουν διαβάσει το άρθρο για το πώς να το κάνετε αυτό, εδώ είναι "". Προσοχή: όταν δημιουργείτε μια εγγραφή, κάντε τη βάση δεδομένων με το όνομα chat .
Τώρα που οι χρήστες μπορούν να εγγραφούν στη συνομιλία μας, ας αρχίσουμε να γράφουμε το ίδιο το σενάριο για ανταλλαγή μηνυμάτων στον ιστότοπο. Έχουμε μια σελίδα index.php, δηλαδή την κύρια. Εκεί μετά τη γραμμή:
ηχώ "Έξοδος"?
Εισαγάγετε αυτήν τη γραμμή:
include("chat.php");

Με αυτό θα συνδέσουμε το αρχείο chat.php στην κεντρική σελίδα. Τώρα δημιουργήστε ένα αρχείο chat.php δίπλα σε όλα τα αρχεία (login.php, register.php, κ.λπ.). Θα το αποθηκεύσουμε εκεί(δηλαδή ένα πλαίσιο) και κώδικα javascript (JQuery) με τον οποίο θα στέλνουμε δεδομένα στον διακομιστή και θα φορτώνουμε μηνύματα σε ένα div κάθε 5 δευτερόλεπτα.

Εκτός από τον πίνακα χρηστών, προσθέστε την ακόλουθη ένδειξη στη βάση δεδομένων (αυτός είναι ο πίνακας μηνυμάτων στον οποίο θα αποθηκεύουμε τα μηνύματα χρήστη):

CREATE TABLE `messages` (`id` INT(5) NOT NULL AUTO_INCREMENT , `login` VARCHAR(200) NOT NULL , `message` VARCHAR(1000) NOT NULL , PRIMARY KEY (`id`));

Εδώ είναι ο καλά σχολιασμένος κώδικας του αρχείου chat.php:

#messages (πλάτος:300px; ύψος:150px; υπερχείλιση:αυτόματο; περίγραμμα:1px στερεό ασήμι; ) //Φόρτωση Βιβλιοθήκη jQuery google.load("jquery", "1.3.2");

google.load("jqueryui", "1.7.2");

//Λειτουργία για την αποστολή μιας συνάρτησης μηνύματος send() ( //Ανάγνωση μηνύματος από το πεδίο εισαγωγής με id mess_to_add var mess=$("#mess_to_send").val(); // Αποστολή παραμέτρων $.ajax(( type: "POST", url: "add_mess.php", data:"mess="+mess, // Εξαγωγή ό,τι η PHP επέστρεψε επιτυχία: function(html) ( //Εάν όλα είναι επιτυχή, φορτώστε τα μηνύματα load_messes(); // Εκκαθάριση της φόρμας εισαγωγής μηνύματος $ ("#mess_to_send"). ", δεδομένα: " req=ok", // Έξοδος τι επέστρεψε η PHP επιτυχία: function(html) ( //Εκκαθάριση της φόρμας εισόδου $("#messages").empty(); // Έξοδος τι php επέστρεψε σε εμάς $ ("#messages") .append(html) //Κύλιση του μπλοκ προς τα κάτω (αν υπάρχουν πολλά μηνύματα) $("#messages").scrollTop(90000) ));

//Όταν φορτώνεται η σελίδα, φορτώνονται τα μηνύματα load_messes(); //Ρύθμιση βρόχου κάθε τρία δευτερόλεπτα setInterval(load_messes,3000); Όπως παρατηρήσατε, στη λειτουργία της προσθήκης μηνυμάτων στη βάση δεδομένων, στέλνει ένα αίτημα Ajax στο αρχείο add_mess.php, το οποίο θα το προσθέσει ήδη στον πίνακα μηνυμάτων. Εδώ είναι ο κώδικας για αυτό το αρχείο:Τώρα ο τελευταίος κωδικός της συνομιλίας μας είναι

php

ένα σενάριο που ανακτά δεδομένα από τη βάση δεδομένων και τα στέλνει στη συνάρτηση load_messes() για έξοδο. Εδώ είναι:

Αυτό είναι όλα τα σενάρια τελειωμένα. Τώρα το μόνο που μένει είναι να μαζέψουμε τα πάντα. Και για όσους είναι ιδιαίτερα τεμπέληδες, θα δημοσιεύσω ένα αρχείο με όλα τα σενάρια και μια χωματερή βάσης δεδομένων. . Το μόνο που μένει είναι να δημιουργήσετε μια βάση δεδομένων με το όνομα chat, να ανεβάσετε το dump και τα σενάρια. Ήθελα όμως να πω ότι αυτή η έκδοση του chat είναι πολύ απλή, χωρίς κουδούνια και σφυρίχτρες και χωρίς προστασία από πλημμύρες κ.λπ.. Αλλά κάτι λείπει ακόμα... Τι; Κουβέντα! Ένα chat room όπου θα μπορούσατε να συνομιλήσετε, εξαιτίας του οποίου οι επισκέπτες θα επιστρέφουν ξανά και ξανά...

Τι χρειάζεται για αυτό;

Τι συμβαίνει λοιπόν;! Ας γράψουμε τη δική μας συνομιλία που θα καλύψει όλες τις απαιτήσεις σας, θα είναι γρήγορη και συμπαγής.
Τώρα ας αποφασίσουμε τι μπορεί να κάνει η συνομιλία μας.
Πρώτον, πρέπει να εγγράψει νέους επισκέπτες και να δώσει είσοδο σε όσους έχουν ήδη εγγραφεί.
Δεύτερον, πρέπει να μπορεί να εισάγει emoticon - εκείνες τις αστείες μικρές εικόνες που οι περισσότερες συνομιλίες σήμερα δεν μπορούν να κάνουν χωρίς.
Τρίτον, οι χρήστες πρέπει να μπορούν να επικοινωνούν ιδιωτικά, δηλ. προσωπικά μεταξύ τους, ώστε οι άλλοι επισκέπτες να μην βλέπουν τη συνομιλία τους (φυσικά, εκτός από τον διαχειριστή J)

Τώρα ας αποφασίσουμε ποιες τεχνολογίες θα χρησιμοποιήσουμε κατά την ανάπτυξη της συνομιλίας. Θα γράφουμε σε PHP και για την εγγραφή χρηστών θα αποθηκεύουμε πληροφορίες για αυτούς σε μια βάση δεδομένων MySQL. Το κείμενο του ίδιου του chat room (ας ονομάσουμε το chat room τις πληροφορίες που ανταλλάσσονται μεταξύ των επισκεπτών) θα είναι στο αρχείο κειμένου.

Αρχικά, ας γράψουμε μια απλή συνομιλία, χωρίς ιδιωτικές και διοικητικές λειτουργίες, στην οποία οι επισκέπτες μπορούν να εγγραφούν, να επικοινωνήσουν μεταξύ τους και να εισάγουν emoticons.

Θα μοιάζει κάπως έτσι.

Τώρα θα διευκρινίσω μερικές ακόμη λεπτομέρειες που πρέπει να συζητηθούν πριν γράψω τον κώδικα.

Το αρχείο κειμένου chat.txt (το chat room μας θα αποθηκευτεί σε αυτό) δεν πρέπει να περιέχει περισσότερα από 20 τελευταία μηνύματα(για μείωση της επισκεψιμότητας και επιτάχυνση της φόρτωσης συνομιλίας).

Κατά την είσοδο στη συνομιλία, ο επισκέπτης θα πρέπει να εισαγάγει μια σύνδεση (γνωστός και ως ψευδώνυμο) και κωδικό πρόσβασης, και εάν μια τέτοια σύνδεση είναι ήδη αποθηκευμένη στον πίνακα της βάσης δεδομένων μας, τότε το σενάριο θα πρέπει να ελέγξει εάν ο κωδικός πρόσβασης είναι σωστός και εάν είναι σωστός, στη συνέχεια να ανακατευθύνει ο επισκέπτης στη συνομιλία και, εάν είναι λανθασμένος, επιστρέψτε στην αρχική σελίδα για εισέρχομαι πάλιόνομα χρήστη και κωδικό πρόσβασης και πείτε του ότι ο κωδικός είναι λάθος. Εάν δεν υπάρχει τέτοια σύνδεση στον πίνακα, τότε πρέπει να εγγράψετε τον επισκέπτη, δηλ. προσθέστε δεδομένα για αυτόν (σύνδεση και κωδικό πρόσβασης) στον πίνακα. Αλλά ξεχωριστή σελίδαγια να εγγραφείτε νέος επισκέπτης (εφεξής θα αποκαλούμε επισκέπτες "chatniks" J) δεν χρειάζεται να το κάνετε αυτό, διαφορετικά θα χρειαστεί να κάνετε κάποια πρόσθετες ενέργειεςη είσοδος στο chat θα τρομάξει αρκετά σημαντικό μέρος των επισκεπτών.

Επίσης, αν σκοπεύετε να δημιουργήσετε μικρή κουβέντα, για παράδειγμα, για να επικοινωνήσετε με φίλους, θα ήταν καλή ιδέα να καταγράψετε όλα όσα ειπώθηκαν στη συνομιλία στο ξεχωριστό αρχείο(ας το πούμε history.txt). Στο μέλλον, μπορείτε να εκτελέσετε ορισμένες ενέργειες σε αυτό το αρχείο (για παράδειγμα, να σας στέλνετε τα περιεχόμενα αυτού του αρχείου με e-mail κάθε μέρα στις 12.00 και μετά να το διαγράψετε). Αλλά θα το κάνουμε αυτό αφού η συνομιλία μας έχει ήδη λειτουργήσει.

Ποια αρχεία χρειάζονται για τη δημιουργία μιας συνομιλίας;

Τώρα ας αποφασίσουμε ποια αρχεία πρέπει να δημιουργηθούν για να λειτουργήσει η συνομιλία. Παρακάτω είναι πλήρης λίστααρχεία συνομιλίας με περιγραφή του τι χρειάζεται αυτό ή εκείνο το αρχείο.

index.php – αρχική σελίδακουβέντα. Εμφανίζει μια φόρμα για την εισαγωγή των στοιχείων σύνδεσης και του κωδικού πρόσβασής σας, καθώς και πληροφορίες σχετικά με το χρόνο που ένα άτομο βρίσκεται αυτήν τη στιγμή στη συνομιλία (και πιθανώς τις τελευταίες 20 απαντήσεις)

chat.php - Λοιπόν, αυτό είναι το πιο σημαντικό και σημαντικό αρχείο. Τι δεν κάνει: ελέγχει τους επισκέπτες για την ορθότητα του ζεύγους σύνδεσης-κωδικού πρόσβασης, καταχωρεί τον επισκέπτη και, επιπλέον, συνδέεται αρκετά μεγάλο αριθμόΑρχεία PHP που περιγράφονται παρακάτω.

chat.inc.php – αυτό το αρχείο PHP περιέχει ένα έγγραφο HTML με πλαίσια, χωρίς τα οποία δεν μπορούν να κάνουν περισσότερα από ένα chat room που σέβεται τον εαυτό τους, καθώς και ένα μικρό κομμάτι κώδικα PHP.

send.php – αυτό το αρχείο εμφανίζει μια φόρμα με πεδία κειμένουγια εισαγωγή παρατηρήσεων, εισαγωγή emoticon και άλλα χρήσιμα πράγματα, καθώς και πεδίο για επιλογή συνομιλητή (είτε για συνομιλία σε «θάλαμο συνομιλίας» είτε για επικοινωνία σε «ιδιωτική»).

smiles.php – όλα είναι ξεκάθαρα εδώ. Αυτό το αρχείο θα εμφανίσει emoticon στην οθόνη σε βρόχο και θα δημιουργήσει κώδικα JavaScript για να εισαγάγει τον κωδικό emoticon στη γραμμή απόκρισης του συνομιλητή.

add.php – αυτό το αρχείο θα μορφοποιεί τις απαντήσεις chatter και θα τις εισάγει στο αρχείο chat.txt.

del.php – όταν μια συνομιλία αποχωρεί από τη συνομιλία, αφαιρεί τη συνομιλία από τη λίστα των ενεργών (δηλ. αυτή τη στιγμήσυζητώντας τα σημαντικά τους προβλήματα και κουβεντιάζοντας).

includer.php – περιέχει 3 μεταβλητές: $myserver, $mylogin, $mypassword. Η μεταβλητή $myserver υποδεικνύει τον διακομιστή στον οποίο βρίσκεται η βάση δεδομένων (συνήθως localhost), το $mylogin και το $mypassword – τη σύνδεση και τον κωδικό πρόσβασης για τη σύνδεση στη βάση δεδομένων.

text.php – Αρχείο PHP υπεύθυνο για την ενημέρωση πληροφοριών στο chat room.

users.php – ένα αρχείο PHP που εμφανίζει μια λίστα επισκεπτών που βρίσκονται αυτήν τη στιγμή στη συνομιλία και επίσης δημιουργεί κώδικα JavaScript για την εισαγωγή του ψευδώνυμου της επιλεγμένης συνομιλίας στο παράθυρο εισαγωγής σχολίων.

logo.html – ένα αρχείο που εμφανίζει το λογότυπο της συνομιλίας στην οθόνη.

chat.txt – αυτό είναι το chat room είναι αποθηκευμένα τα τελευταία 20 αντίγραφα.

history.txt – ο σκοπός του έχει ήδη περιγραφεί παραπάνω.

chat_users.sql – Αρχείο SQL που περιέχει τη δομή του πίνακα chat_users

logo_chat.jpg – λογότυπο συνομιλίας.

style.css – φύλλο στυλ που χρησιμοποιείται στη συνομιλία.

1…7.gif – 7 σχέδια emoticon που χρησιμοποιούνται στη συνομιλία.

Και τώρα πρέπει να αναφέρουμε ένα σημείο, η εξήγηση του οποίου δεν μπορεί να αποφευχθεί.

Τι άλλο;

Πώς φεύγουν συνήθως οι άνθρωποι από μια συνομιλία; Αυτό είναι σωστό, σπάνια κάποιος κάνει κλικ στο κουμπί εξόδου συνήθως απλώς κλείνει το παράθυρο συνομιλίας. Πρέπει να παρακολουθούμε αυτές τις στιγμές για να αφαιρέσουμε αμέσως τους συνομιλητές που έχουν αποχωρήσει από τη λίστα όσων συμμετέχουν στη συνομιλία. Ας πούμε ότι κάτι συνέβη σε ένα άτομο και ανανεώνει τη σελίδα. Αρκετά πραγματική κατάσταση. Έτσι, και στις δύο αυτές περιπτώσεις εμφανίζεται το συμβάν Unload. Μπορεί να παρακολουθηθεί χρησιμοποιώντας το πρόγραμμα χειρισμού JavaScript onUnload. Αυτή η εκδήλωση λαμβάνει χώρα σε τρέχον παράθυροαμέσως πριν ανεβάσετε το έγγραφο. Επομένως, για κάθε μια από τις προαναφερθείσες ενέργειες του επισκέπτη, πρέπει να αντιδράσετε σωστά: εάν η συνομιλία φύγει από τη συνομιλία, τότε τον αφαιρούμε από τη λίστα των ενεργών επισκεπτών και εάν απλώς ενημερώνει, τότε δεν κάνουμε τίποτα. Αλλά έχουμε διαφορετικές ενέργειεςο ίδιος χειριστής αντιδρά! Πώς να λύσετε αυτό το πρόβλημα; Θα μιλήσω για αυτό με περισσότερες λεπτομέρειες όταν περιγράφω τη λειτουργία των αρχείων chat.inc.php, send.php και del.php.
Εάν θέλετε να δείτε πώς λειτουργεί η συνομιλία που περιγράφεται στο άρθρο, μπορείτε να μεταβείτε στη διεύθυνση http://chat.micro.org.ua και να βεβαιωθείτε ότι όλα όσα περιγράφονται σε αυτό το άρθρο λειτουργούν J.

Ας αρχίσουμε τη δουλειά

Λοιπόν, τώρα που όλες οι ερωτήσεις φαίνεται να έχουν διευκρινιστεί, μπορείτε να αρχίσετε να πληκτρολογείτε απευθείας τον κωδικό. Θα αρχίσω να γράφω πλήρης κωδικόςαρχείο, και στη συνέχεια θα περιγράψω λεπτομερώς τι κάνει. Και πριν πληκτρολογήσετε τον κώδικα, δημιουργήστε κενά αρχεία chat.txt και history.txt.
Επιπλέον, στον ίδιο κατάλογο στον οποίο έχετε τη συνομιλία, βάλτε 7 αρχεία gif - αυτά είναι τα emoticon μας. Νομίζω ότι μπορείτε να βρείτε 7 emoticon στο Διαδίκτυο J, αλλά και πάλι αν δεν έχετε emoticon, μπορείτε να τα πάρετε από τη διεύθυνση http://chat.micro.org.ua.
Τώρα δημιουργήστε ένα φύλλο στυλ style.css, θα το χρειαστούμε αργότερα για να σχεδιάσουμε τη συνομιλία, αν και αν δεν θέλετε να χρησιμοποιήσετε CSS, δεν χρειάζεται να το δημιουργήσετε. Εάν εξακολουθείτε να αποφασίζετε να χρησιμοποιήσετε CSS, δημιουργήστε δύο κλάσεις: normal και title, θα μας φανούν χρήσιμες αργότερα J.
Τώρα χρειαζόμαστε ένα λογότυπο συνομιλίας. Το λογότυπό μου είναι η λέξη "MICRO" γραμμένη επάνω μπλε φόντομε χρυσά γράμματα ύψους 55 pixel και πλάτους 195 pixel. Αφήνω αυτό το σημείο στην κρίση σας.
Λοιπόν, τώρα, ανοίξτε τον αγαπημένο σας επεξεργαστή PHP (ελπίζω να μην είναι το Notepad J) και ξεκινήστε... Θα ξεκινήσω με τα αρχεία που έχουν δευτερεύουσα σημασία. Για να μην σας αποσπά αργότερα η περιγραφή τους καθώς εξηγείτε τη λειτουργία των κύριων αρχείων.

Chat_users.sql

Πρώτα πρέπει να δημιουργήσετε τον πίνακα "chat_users" στη βάση δεδομένων. Ορίστε λοιπόν ο κωδικός:

ΔΗΜΙΟΥΡΓΙΑ ΠΙΝΑΚΑ chat_users (
id int(10) NOT NULL auto_increment,
κείμενο σύνδεσης ΟΧΙ NULL,
κείμενο κωδικού πρόσβασης ΟΧΙ NULL,
ιδιωτικό κείμενο ΟΧΙ NULL,
ενεργό tinyint(2) NOT NULL προεπιλογή "0",
ΚΥΡΙΟ ΚΛΕΙΔΙ (αναγνωριστικό)
) TYPE=MyISAM;

Δημιουργήσαμε έναν πίνακα με πέντε στήλες:
1. id – αναγνωριστικό φλυαρίας.
2. login – είσοδος (παρατσούκλι) της φλυαρίας
3. κωδικός – κωδικός φλυαρίας
4. Το ιδιωτικό είναι ένα θεμέλιο για το μέλλον, όταν εργαζόμαστε στο "privat"
5. ενεργό – μόνο ένας αριθμός θα αποθηκευτεί εδώ: 1 – εάν η συνομιλία βρίσκεται αυτήν τη στιγμή στη συνομιλία και 0 εάν η συνομιλία δεν είναι αυτήν τη στιγμή στη συνομιλία.
Δεν υπάρχει τίποτα περίπλοκο εδώ.

Incuder.php


//Ο κωδικός πρόσβασής σας

Αυτά είναι τα δεδομένα σας για να συνδεθείτε στη βάση δεδομένων.

Logo.html









Δεν υπάρχουν πολλά να εξηγηθούν εδώ. Δημιουργούμε ένα έγγραφο HTML, εισάγουμε την εικόνα του λογότυπου συνομιλίας σε αυτό και το πατάμε στη σελίδα χρησιμοποιώντας τη γραμμή “TOPMARGIN=0 LEFTMARGIN=0 RIGHTMARGIN=0 MARGINHEIGHT=0 MARGINWIDTH=0”.

Λοιπόν, τώρα ας προχωρήσουμε στα κύρια αρχεία συνομιλίας.

Ευρετήριο.php




Συνομιλία στο MICRO.ORG.UA













Καλώς ήρθατε στο Microportal Chat















Το όνομά σας (ή το ψευδώνυμό σας):
Κωδικός πρόσβασης (πρέπει να είναι διαφορετικός από το ψευδώνυμο):
Σημείωση: εάν έρχεστε εδώ για πρώτη φορά, εισαγάγετε τον κωδικό πρόσβασής σας και θα τον θυμάται το σύστημα


Προγραμματισμός συνομιλίας και ανάπτυξη σχεδίου Ilya Barkov



Μέχρι στιγμής δεν υπάρχουν περιγραφείς PHP σε αυτό το έγγραφο, αλλά αργότερα, όταν επεκταθεί η λειτουργικότητα της συνομιλίας, κάποια δεδομένα σχετικά με τη λειτουργία της συνομιλίας θα εμφανιστούν εδώ.
Σε αυτό το αρχείο, εμφανίζουμε τη φόρμα εισαγωγής για την εισαγωγή της σύνδεσης (ψευδώνυμο) και του κωδικού πρόσβασης, χρησιμοποιούμε επίσης JavaScript για να ελέγξουμε ότι τα πεδία για την εισαγωγή της σύνδεσης και του κωδικού πρόσβασης δεν παραμένουν κενά και επίσης, μετατρέποντας τόσο τη σύνδεση και τον κωδικό πρόσβασης σε πεζά τα συγκρίνουμε ώστε να μην ταιριάζουν (για λόγους βασικής ασφάλειας). Λοιπόν, εμφανίζουμε επίσης τον τίτλο της συνομιλίας (το όνομά της) και τα πνευματικά δικαιώματα.
Τα δεδομένα από τη φόρμα αποστέλλονται στο αρχείο chat.php. Θα το δούμε τώρα.

Chat.php

Τι κάνουμε σε αυτό το αρχείο; Πρώτα απ 'όλα, ορίσαμε την καταστολή σφαλμάτων (error_reporting(0)) - ανεξάρτητα από το τι συμβαίνει, οι επισκέπτες δεν πρέπει να βλέπουν μηνύματα σφάλματος. Στη συνέχεια, συμπεριλαμβάνουμε το αρχείο includer.php με δεδομένα για σύνδεση στη βάση δεδομένων. Επιλέγουμε τις τιμές σύνδεσης και κωδικού πρόσβασης από τον πίνακα POST και, αν δεν είναι κενές (αν και έχουμε ήδη προβλέψει αυτήν την επιλογή στο αρχείο index.php, τι γίνεται αν κάποιος πληκτρολογήσει αμέσως http://chat.*** .com/chat.php , τότε σε αυτή την περίπτωση το μεταφέρουμε στο index.php), συνεχίζουμε το σενάριο. Στη συνέχεια ελέγχουμε αν έχουμε χρήστη με αυτήν τη σύνδεση στον πίνακα chat_users. Εάν όχι (το ψευδώνυμο δεν είναι απασχολημένο), τότε εισάγουμε τα στοιχεία σύνδεσης και τον κωδικό πρόσβασης στον πίνακα - έτσι πραγματοποιείται η εγγραφή. Εάν μια τέτοια σύνδεση υπάρχει ήδη στον πίνακα, τότε ελέγχουμε αν ο κωδικός πρόσβασης που έχει εισαγάγει ο επισκέπτης ταιριάζει με τον κωδικό πρόσβασης στον πίνακα. Εάν όχι, τότε δημιουργούμε κώδικα JavaScript που περιέχει ένα μήνυμα ότι ο κωδικός πρόσβασης είναι λανθασμένος και τον μεταφέρουμε στη σελίδα index.php. Εάν όλα είναι καλά (το αντίστοιχο ζεύγος «login-password» βρίσκεται στον πίνακα, τότε δίνουμε στον επισκέπτη το αρχείο chat.inc.php). Επιπλέον, εκτελούμε μερικούς χειρισμούς J στον πίνακα: εισάγουμε τον αριθμό 1 στο πεδίο "ενεργό" αυτού του επισκέπτη, δηλ. κάντε το ενεργό.

Chat.inc.php




Αυτό το έγγραφο αξίζει ιδιαίτερης προσοχής.
Χρησιμοποιώντας τη γραμμή "" ορίσαμε τη συχνότητα ενημέρωσης του αρχείου σε πέντε δευτερόλεπτα. Σύμφωνα με τις παρατηρήσεις μου, 5 δευτερόλεπτα για τη συνομιλία μας - βέλτιστη συχνότηταενημερώσεις, γιατί το αρχείο που θα διαβάζεται κάθε φορά αποτελείται από μόνο 20 γραμμές, οπότε όσο πιο γρήγορα ενημερωθεί το text.php τόσο το καλύτερο για εμάς.
Φυσικά, αποκρύπτουμε μηνύματα λάθους.
Περαιτέρω χρήση λειτουργίες αρχείου() διαβάζουμε πληροφορίες από το αρχείο chat.txt και εμφανίζουμε τις πληροφορίες στην οθόνη, αντικαθιστώντας πρώτα τους χαρακτήρες "\n" (διακοπή γραμμής) με "
».
Προσοχή στις γραμμές:
$num=20;
εάν ($count>$num)
{

Για ($i=($count-$num); $i






Χρησιμοποιώντας JavaScript, εισάγουμε τον κωδικό emoticon στη γραμμή αντίγραφο που βρίσκεται στο αρχείο send.php (για παράδειγμα, για το πέμπτο emoticon, που ονομάζεται 5.gif, ο κώδικας θα είναι ως εξής: ). Αργότερα, στο αρχείο add.php, αντί για τον κώδικα που θα εισάγουμε , και οι συνομιλητές θα δουν ένα κανονικό emoticon στην οθόνη τους.

Αποστολή.php












Ερωτήσεις;

Αναφέρετε ένα τυπογραφικό λάθος

Κείμενο που θα σταλεί στους συντάκτες μας: