ติดต่อลงโฆษณา racingweb@gmail.com

ผู้เขียน หัวข้อ: สร้าง php ajax chat ใช้งานร่วมกับฐานข้อมูล  (อ่าน 2225 ครั้ง)

0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

ออฟไลน์ nut43150tier2

  • New Member
  • *
  • กระทู้: 4
    • ดูรายละเอียด
เนื้อหานี้ จะเป็นแนวทางการทำ ระบบสนทนา หรือ chat box อย่างง่าย
ที่สามารถนำไปประยุกต์เพิ่มเติม เริ่มต้นให้ทำการสร้างตารางตามโครงสร้าง
คำสั่ง sql ดังนี้

โค้ด: [เลือก]
--
-- Table structure for table `tbl_chat`
--
 
CREATE TABLE IF NOT EXISTS `tbl_chat` (
  `chat_id` int(11) NOT NULL,
  `chat_msg` varchar(200) NOT NULL,
  `chat_user1` int(11) NOT NULL,
  `chat_user2` int(11) NOT NULL,
  `chat_datetime` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
--
-- Indexes for dumped tables
--
 
--
-- Indexes for table `tbl_chat`
--
ALTER TABLE `tbl_chat`
  ADD PRIMARY KEY (`chat_id`),
  ADD KEY `chat_user1` (`chat_user1`),
  ADD KEY `chat_user2` (`chat_user2`);
 
--
-- AUTO_INCREMENT for dumped tables
--
 
--
-- AUTO_INCREMENT for table `tbl_chat`
--
ALTER TABLE `tbl_chat`
  MODIFY `chat_id` int(11) NOT NULL AUTO_INCREMENT;

ตาราง tbl_chat ประกอบด้วย
 
chat_id เลขรัน autoincrement
chat_msg เก็บข้อความสนทนา
chat_user1 เก็บ id ของผู้ใช้ที่เป็นคนผู้ส่งข้อความ
chat_user2 เก็บ id ของผู้ใช้ที่เป็นคนผู้รับข้อความ
chat_datetime เก็บวันที่ เวลา ที่ส่งข้อความ

ไฟล์ สำหรับเชื่อมต่อกับฐานข้อมูล dbconnect.php

โค้ด: [เลือก]
<?php  
$mysqli 
= new mysqli("localhost""root","","test");  
/* check connection */ 
if ($mysqli->connect_errno) {  
    
printf("Connect failed: %s\n"$mysqli->connect_error);  
    exit();  
}  
if(!
$mysqli->set_charset("utf8")) {  
    
printf("Error loading character set utf8: %s\n"$mysqli->error);  
    exit();  
}

ไฟล์เพิ่มข้อมูลการ chat และแสดงรายการ chat ชื่อ ajax_chat.php
รูปแบบการใช้งานจะเป็นรูปแบบง่ายๆ สามารถไปประยุกต์เพิ่มเติมได้

โค้ด: [เลือก]
<?php  
session_start
();
include(
"dbconnect.php");
// ถ้ามี session ของคนที่กำลังใช้งานอยู่ และมีค่า id ของคนที่เป็นจะส่งไปหา และข้อความไม่ว่าง ส่งมาเพิ่มข้อมูล
if(isset($_SESSION['ses_user_id']) && $_SESSION['ses_user_id']!=""
&& isset($_POST['user2']) && $_POST['user2']!=""
&& isset($_POST['msg']) && $_POST['msg']!="" ){
    
$sql="
    INSERT INTO tbl_chat SET 
    chat_msg='"
.$_POST['msg']."',
    chat_user1='"
.$_SESSION['ses_user_id']."',  
    chat_user2='"
.$_POST['user2']."',
    chat_datetime='"
.date("Y-m-d H:i:s")."'        
    "
;
    
$mysqli->query($sql);
    exit;
}
// ส่งค่ามาเพื่อรับข้อมูลไปแสดง
if(isset($_POST['viewData']) && $_POST['viewData']!=""){
header("Content-type:application/json; charset=UTF-8");            
header("Cache-Control: no-store, no-cache, must-revalidate");           
header("Cache-Control: post-check=0, pre-check=0"false);      
    if(
$_POST['viewData']==1){ // เงื่อนไขกรณีส่งค่ามาครั้งแรก แสดงรายการทั้งหมดที่มีอยู่ 
        // กำหนดเงื่อนไขคำสั่งแสดงรายการทั้งหมดของคู่สนทนา
        
$sql="
        SELECT * FROM tbl_chat WHERE chat_id>'"
.$_POST['maxID']."' AND
        (
            (chat_user1='"
.$_SESSION['ses_user_id']."' AND chat_user2='".$_POST['userID']."') OR 
            (chat_user1='"
.$_POST['userID']."' AND chat_user2='".$_SESSION['ses_user_id']."')
        )   
        ORDER BY chat_id 
        "
;
         
    }else{ 
// แสดงทีละรายการกรณีเริ่มสนทนา
        // กำหนดเงื่อนไขแสดงรายการล่าสุดที่ละ 1 รายการที่มีการเพิ่มเข้ามาใหม่
        
$sql="
        SELECT * FROM tbl_chat WHERE chat_id>'"
.$_POST['maxID']."' AND
        (
            (chat_user1='"
.$_SESSION['ses_user_id']."' AND chat_user2='".$_POST['userID']."') OR 
            (chat_user1='"
.$_POST['userID']."' AND chat_user2='".$_SESSION['ses_user_id']."')
        )   
        ORDER BY chat_id LIMIT 1
        "
;
    }
    
$result $mysqli->query($sql);
    if(
$result){
        while(
$row $result->fetch_array()){
            
$json_data[]=array(
                
"max_id"=>$row['chat_id'],
                
"data_align"=>($_SESSION['ses_user_id']==$row['chat_user1'])?"right":"left",// ถ้าเป็นข้อความที่ส่งจากผู้ใช้ขณะนั้น
                
"data_msg"=>$row['chat_msg']         
            );  
        }
    }
    
$json =json_encode($json_data);
    echo 
$json;// ส่งค่ากลับเป็น json object
    
exit;
}

มาดูรูปแบบคำสั่ง sql ส่วนของการดึงข้อมูลเพื่อทำความเข้าใจ

โค้ด: [เลือก]
SELECT * FROM tbl_chat WHERE chat_id>'".$_POST['maxID']."' AND
(
    (chat_user1='".$_SESSION['ses_user_id']."' AND chat_user2='".$_POST['userID']."') OR
    (chat_user1='".$_POST['userID']."' AND chat_user2='".$_SESSION['ses_user_id']."')
)   

หมายถึง ดึงข้อมูลจากตาราง tbl_chat โดยแสดง chat_id ที่มากกว่าค่าป้จจุบันที่แสดงอยู่
หรือก็คือแสดงรายการที่เพิ่มเข้าไปใหม่ และ
เป็นรายการที่ผู้ใช้คนนั้นเป็นคนส่ง หรือ ผู้ใช้คนนั้นเป็นคนรับ เช่น สมมติ
เราเป็นผู้ส่ง มี id = 1 ผู้รับมี id = 2
เงื่อนไขแรก
คนที่ส่งเป็นเรา $_SESSION['ses_user_id'] เท่ากับ chat_user1 และผู้รับเป็น $_POST['userID'] เท่ากับ
chat_user2
จะได้เงื่อนไขเป็น
(chat_user1='1' AND chat_user2='2')
เงื่อนไขที่สอง
คนที่ส่งมาเป็น $_POST['userID'] เท่ากับ chat_user1 และผู้รับเป็นเรา $_SESSION['ses_user_id'] เท่ากับ
chat_user2
จะได้เงื่อนไขเป็น
(chat_user1='2' AND chat_user2='1')
ดังนั้นเงื่อนไขของรายการที่แสดงก็คือ ทุกรายการที่เราส่งหาเขา หรือเขาส่งหาเรา ให้นำมาแสดง

ต่อไปเป็นไฟล์สุดท้าย ไฟล์ chat_box.php
เป็นไฟล์สมมติ ทดสอบการใช้งาน

โค้ด: [เลือก]
<?php
session_start
();
// สำหรับใช้ในตัวอย่างการกำหนด session user_id
if(isset($_POST['set_user1'])){
    
$_SESSION['ses_user_id']=$_POST['userID'];
}
if(isset(
$_POST['set_user2'])){
    
$_SESSION['ses_user_id2']=$_POST['userID'];
}
?>

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>chat box</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">   
</head>
 
<body>
 
<style type="text/css">
div#messagesDiv{
    display: block;
    height: 280px;
    overflow: auto;
    background-color: #FDFDE0;
    width: 700px;
    margin: 5px 0px;
    border: 1px solid #CCC;
}
.left_box_chat{
    border: 1px solid #CCC;
    border-radius: 25px;
    margin: 5px;
    padding: 0px 10px;
    display:inline-block;
    float:left;
    clear:both;
    text-align:left;
    background-color:#FFF; 
}
.right_box_chat{
    border: 1px solid #CCC;
    border-radius: 25px;
    margin: 5px;
    padding: 0px 10px;
    display:inline-block;
    float:right;
    clear:both;
    text-align:right;
    background-color:#9F6;
}
</style>
 
<br>
<div id="messagesDiv">
<!--<div class="left_box_chat">1</div>
<div class="right_box_chat">2</div>-->
</div>
<div class="bg-info" style="width:700px;padding:5px 0px;">
<div class="row">
  <div class="col-xs-4">
    <input type="text" class="form-control" name="userID1" id="userID1" value="<?=(isset($_SESSION['ses_user_id']))?$_SESSION['ses_user_id']:''?>" placeholder="UserID 1">
    <input type="text" class="form-control" name="userID2" id="userID2" value="<?=(isset($_SESSION['ses_user_id2']))?$_SESSION['ses_user_id2']:''?>" placeholder="UserID 2">   
  </div>
  <div class="col-xs-5">
<!--  input hidden สำหรับ เก็บ chat_id ล่าสุดที่แสดง-->
  <input name="h_maxID" type="hidden" id="h_maxID" value="0">
  <input type="text" class="form-control" name="msg" id="msg" placeholder="Message">
  </div>
</div>
</div>
<br>
การใช้งาน<br>
1. ทดสอบโดยเปิดบราวเซอร์ 2 อันเช่น chrome กับ firefox แล้วรันไฟล์ทดสอบนี้<br>
2. ที่ chrome <br>
    2.1 ให้เลือก user 1 แล้วกดปุ่ม Set user 1<br>
    2.2 ให้เลือก user 2 แล้วกดปุ่ม Set user 2<br>   
3. ที่ firefox  <br>
    3.1 ให้เลือก user 2 แล้วกดปุ่ม Set user 1<br>
    3.2 ให้เลือก user 1 แล้วกดปุ่ม Set user 2<br>   
4. เร่ิมการสนทนา
<br>
<form name="form1" method="post" action="">
  <select name="userID" id="userID">
    <option value="1">User 1</option>
    <option value="2">User 2</option>   
  </select>
  <input type="submit" name="set_user1" value="Set User 1">
    <input type="submit" name="set_user2" value="Set User 2">
</form>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>     
<script type="text/javascript">
var load_chat; // กำหนดตัวแปร สำหรับเป็นฟังก์ชั่นเรียกข้อมูลมาแสดง
var first_load=1; // กำหนดตัวแปรสำหรับโหลดข้อมูลครั้งแรกให้เท่ากับ 1
load_chat = function(userID){
    var maxID = $("#h_maxID").val(); // chat_id ล่าสุดที่แสดง
    $.post("ajax_chat.php",{
        viewData:first_load,
        userID:userID,
        maxID:maxID
    },function(data){
        if(first_load==1){ // ถ้าเป็นการโหลดครั้งแรก ให้ดึงข้อมูลทั้งหมดที่เคยบันทึกมาแสดง
            for(var k=0;k<data.length;k++){ // วนลูปแสดงข้อความ chat ที่เคยบันทึกไว้ทั้งหมด
                if(parseInt(data[0].max_id)>parseInt(maxID)){ // เทียบว่าข้อมูล chat_id .ใหม่กว่าที่แสดงหรือไม่
                    $("#h_maxID").val(data[k].max_id); // เก็บ chat_id เป็น ค่าล่าสุด
                    // แสดงข้อความการ chat มีการประยุกต์ใช้ ตำแหน่งข้อความ เพื่อจัด css class ของข้อความที่แสดง
                    $("#messagesDiv").append("<div class=""+data[k].data_align+"_box_chat">"+data[k].data_msg+"</div>");
                    $("#messagesDiv")[0].scrollTop = $("#messagesDiv")[0].scrollHeight; // เลือน scroll ไปข้อความล่าสุด     
                }
            };
        }else{ // ถ้าเป็นข้อมูลที่เพิ่งส่งไปล่าสุด
            if(parseInt(data[0].max_id)>parseInt(maxID)){ // เทียบว่าข้อมูล chat_id .ใหม่กว่าที่แสดงหรือไม่
                $("#h_maxID").val(data[0].max_id); // เก็บ chat_id เป็น ค่าล่าสุด
                // แสดงข้อความการ chat มีการประยุกต์ใช้ ตำแหน่งข้อความ เพื่อจัด css class ของข้อความที่แสดง
                $("#messagesDiv").append("<div class=""+data[0].data_align+"_box_chat">"+data[0].data_msg+"</div>");
                $("#messagesDiv")[0].scrollTop = $("#messagesDiv")[0].scrollHeight;   // เลือน scroll ไปข้อความล่าสุด
            }
        }
        first_load++;// บวกค่า first_load
    });     
}
// กำหนดให้ทำงานทกๆ 2.5 วินาทีเพิ่มแสดงข้อมูลคู่สนทนา
setInterval(function(){
    var userID = $("#userID2").val(); // id user ของผู้รับ
    load_chat(userID); // เรียกใช้งานฟังก์ช่นแสดงข้อความล่าสุด
},2500);   
$(function(){
     
 
 /// เมื่อพิมพ์ข้อความ แล้วกดส่ง
  $("#msg").keypress(function (e) { // เมื่อกดที่ ช่องข้อความ 
    if (e.keyCode == 13) { // ถ้ากดปุ่ม enter 
      var user1 = $("#userID1").val(); // เก็บ id user  ผู้ใช้ที่ส่ง
      var user2 = $("#userID2").val(); // เก็บ id user  ผู้ใช้ที่รับ
      var msg = $("#msg").val();  // เก็บค่าข้อความ 
      $.post("ajax_chat.php",{
          user1:user1,
          user2:user2,
          msg:msg
      },function(data){
            load_chat(user2);// เรียกใช้งานฟังก์ช่นแสดงข้อความล่าสุด
            $("#msg").val(""); // ล้างค่าช่องข้อความ ให้พร้อมป้อนข้อความใหม่         
      });
 
    } 
  }); 
   
});
 
</script>
</body>
</html>
ufabetufabet1688ufaแทงบอลแบบ 1×2
ดาวน์โหลดไฟล์ตัวอย่าง พร้อมเพิ่มเติมไฟล์ประยุกต์ chat_box_log.php และ chat_box_apply.php
ได้ที่  http://www.ninenik.com/download/php_ajax_chat.rar

source:https://www.ninenik.com/content.php?arti_id=724

ออฟไลน์ jijira

  • Jr. Member
  • **
  • กระทู้: 84
    • ดูรายละเอียด
สุดยอดมากๆเลยคะ  ยิงปลา

ออฟไลน์ FrankJScott

  • FrankJScottZZ
  • Hero Member
  • *****
  • กระทู้: 14,910
  • เพศ: ชาย
    • ดูรายละเอียด
    • Great 메이저사이트 Info
High Rated AMAN88SLOT Blog
« ตอบ #2 เมื่อ: 12/10/24, 20:27:04 »
For the person talking about casino slot login, slot tutorial, agen judi casino, agen slot, microgaming slot online, net net slot, slot tips, backlink judi, link slot games, gaming casino,  I highly recommend this awesome AMAN88 blog or web judi slot, slot spade gaming, login pragmatic slot, company slot, website judi, casino ion, id casino, slot soft, slot joker login, ion casino, as well as this awesome AMAN88SLOT details and don't forget pragmatic slot login, pragmaticplay casino, login live22, pg slot login, slot amazing, sini slot login, antara slot login, link slot microgaming, slot spade, casino l, as well as this my explanation about AMAN88SLOT blog which is also great. Also, have a look at this click here for AMAN88 details together with pragmatic play online, sbobet casino, slot agen, slot itu judi, casino slot login, login microgaming, microgaming slot online, pragmatic link alternatif, slot casino, login slot joker, bearing in mind this over at this website for AMAN88SLOT info which is worth considering with net net slot, slot soft, slot online slot, casino login, evolution slot,  super fast reply about as well as pragmatic play slots, slot gameplay, gaming joker, slot soft, home casino,  for good measure. Check more @ Updated AMAN88 Website 0f8952_

ออฟไลน์ FrankJScott

  • FrankJScottZZ
  • Hero Member
  • *****
  • กระทู้: 14,910
  • เพศ: ชาย
    • ดูรายละเอียด
    • Great 메이저사이트 Info
Useful DVLTOTO Guide
« ตอบ #3 เมื่อ: 12/10/24, 22:49:35 »
In reply to the guy talking about slot 10, slot e, slot spade, login slot online, casino microgaming, online judi, money slot, judi slot game, company slot, slot tutorial,  I highly recommend this top DVLTOTO site or link pragmatic slot, slot web, pg slot login, slot amazing, slot games, pragmatic play online, slot company, id slot online, slot and casino, pragmatic slot login, on top of this listen to this podcast on DVL TOTO blog which is worth considering with tips judi slot, login pragmatic play, login slot joker, slot amazing, judi slot game, slot soft, casino login, link slot microgaming, mobile slot, slot mob, not forgetting sites such as this on front page for DVL TOTO site which is also great. Also, have a look at this updated DVLTOTO info on top of slot spade gaming, casino slot login, slot website, link slot games, pragmaticplay casino, mobile slot, link pragmatic slot, link alternatif pragmatic, slot tutorial, slot agen, alongside all this read full article for DVLTOTO info together with sbobet casino online, slot spade gaming, slot games, backlink judi, ion slot login,  agree with for and don't forget login microgaming, slot pragmatic, slot judi slot, joker slot login, pragmaticplay casino,  for good measure. Check more @ Useful AMAN88 Info 1944fee

ออฟไลน์ FrankJScott

  • FrankJScottZZ
  • Hero Member
  • *****
  • กระทู้: 14,910
  • เพศ: ชาย
    • ดูรายละเอียด
    • Great 메이저사이트 Info
Top Rated DVLTOTO Tips
« ตอบ #4 เมื่อ: 13/10/24, 00:59:58 »
In reply to the man inquiring about gaming casino, casino play, web casino games, web judi, pragmatic slots, home casino, pragmatic slot login, pragmatik bonanza, tipster slot, habanero slot online,  I highly suggest this more tips here on DVL TOTO info or link slot online, login slot joker, web slot casino, habanero slot online, casino di, tips judi slot, link alternatif pragmatic play, backlink judi, slot and casino, games slot online, not to mention this funny post on DVL TOTO info and don't forget ion casino, slot online microgaming, net net slot, slot online pg, guide slot, sbo111 slot, link slot games, antara slot login, casino di, pragmatic play slots, alongside all this high rated DVLTOTO tips which is also great. Also, have a look at this high rated DVL TOTO tips bearing in mind pragmaticplay casino, web casino games, backlink judi, slot spade gaming, slot 10, sini slot login, link slot online, judi slot, login judi slot, link alternatif pragmatic play, together with this more hints for DVL TOTO info bearing in mind web casino games, slot games, login live22, slot judi slot, casino microgaming,  full report for and don't forget slot casino, slot fantastic, slot itu judi, login judi slot, casino play,  for good measure. Check more @ Top DVL TOTO Info 951_38c

ออฟไลน์ FrankJScott

  • FrankJScottZZ
  • Hero Member
  • *****
  • กระทู้: 14,910
  • เพศ: ชาย
    • ดูรายละเอียด
    • Great 메이저사이트 Info
Updated Car Detailing Software Website
« ตอบ #5 เมื่อ: 15/10/24, 03:07:00 »
For the lady asking about ups direct mail, real estate mailing campaigns, direct mail campaign management, direct mail marketing near me, direct mail postcard services, postcard ads, direct mail code, direct mailing list service, direct mail cost, easy direct mail, card mailing services, bulk mailing list, bulk mail postcard template, ups bulk mail, post card mailing, direct marketing campaign, marketing postcard design, best marketing postcard designs, bulk mail pricing, best eddm service,  I recommend this read full report for car detailing software forum for letter marketing, cost of direct mail advertising, bulk letter mailing, best direct mail postcards, best marketing postcard designs, direct mail delivery, eddm postage cost, usps direct mail marketing, direct mail automation, eddm mailing list, bulk mail pricing, eddm cost usps, business marketing lists, direct email marketing, usps market, usps mailing list, direct mail marketing cost, direct mar, direct mail usa, usps postcard marketing, create a mailer, advertising mailing services, postcards email marketing, also. See More Awesome AVSUBTHAI Guide 4_ab718

ออฟไลน์ FrankJScott

  • FrankJScottZZ
  • Hero Member
  • *****
  • กระทู้: 14,910
  • เพศ: ชาย
    • ดูรายละเอียด
    • Great 메이저사이트 Info
Top Storage Space To Rent Site
« ตอบ #6 เมื่อ: 21/10/24, 04:24:18 »
For the guy inquiring about office space design, second hand aeron herman miller, buy used office furniture, office furniture supplies, office furniture us, herman miller setu used, furniture miller, used office furniture in my area, used aeron chairs near me, herman miller mirra 2 second hand,  I highly recommend this top rated storage site or corporate office furniture, used aeron chair size b, office furniture websites, office furniture near me for sale, best new and used office furniture, second hand designer office furniture, office furniture stores near me, buy used office chairs, commercial office furniture for sale, second hand executive office chairs, together with this conversational tone for storage space to rent url alongside all 2nd hand office chairs near me, office chair suppliers, office workspace design, office group office furniture, used home office furniture, white herman miller, refurbished herman miller aeron size b, herman miller aeron used size c, commercial office furniture, office furniture second hand near me, which is worth considering with this helpful hints on storage space to rent tips which is also great. Also, have a look at this extra resources about storage space to rent blog as well as used business furniture stores near me, pre owned office furniture near me, cheap office furniture online, things to make your office space better, resell office furniture, herman miller desk chair sale, herman miller office chair sale, new and used office furniture near me, used office furniture warehouse, used office furniture clearance, which is worth considering with this how you can help for storage units info together with high end office furniture brands, new office furniture near me, office work office chairs, open space productivity, resale office chairs,  top article on which is worth considering with herman miller office chairs india, furniture in an office, office furniture stores in my area, sustainable office furniture companies, resell office furniture,  for good measure. Check more @ Great AMAN88 Site 7_29e48