【问题标题】:Save messages with an input form in websocket node js and php在 websocket 节点 js 和 php 中使用输入表单保存消息
【发布时间】:2018-03-04 10:51:48
【问题描述】:

欢迎大家, 在我的项目中,我用 PHP 制作了一个社交网络,并使用 websocket 和 node.js 进行了聊天

我遇到的问题是我无法将消息保存在我的数据库中,因为我无法从输入表单中获取消息。

服务器端有node.js(仅限js) 客户端接受js,和php(.php扩展名)

我试图将消息保存在服务器端,但我不能,因为该项目在 php 中有每个用户的会话,所以..

我试图将消息保存在 .php 扩展名中的客户端内,

我尝试过的是将输入保存在我写消息的地方,

我会留下客户端代码:

<?php
session_start();
if(!isset($_SESSION["user"])){
  header("location:../login.php");
}
require "../config.php";
$conn = mysqli_connect($hostname,$username,$passw,$database);
$user=mysqli_real_escape_string($conn,$_SESSION["user"];
$q1 = mysqli_query($conn,"SELECT * FROM usuario2 WHERE Usuario = '".$user."'");
while($row = mysqli_fetch_assoc($q1)){
$id = mysqli_real_escape_string($conn, $row['ID']);
}

$query1 = mysqli_query($conn,"SELECT * FROM `chat1` WHERE id_em='$id' OR id_rec='$id'");
while($row = mysqli_fetch_array($query1)){
$row["id_em"];
}

$codroom=$_POST["user3"];

?>
<!DOCTYPE html>
<html lang="en">
<head>
    <?php
        header("Access-Control-Allow-Origin: *");
    ?>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta http-equiv="x-ua-compatible" content="ie=edge">
        <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.4/socket.io.js"></script>
    <title>Chat con nodejs + socket.io</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" integrity="sha384-rwoIResjU2yc3z8GV/NPeZWAv56rSmLldC3R/AZzGRnGxQQKnKkoFVhFQhNUwEyJ" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.1.1.slim.min.js"></script>
    <style>
    h2 {
      margin-top: 20px;
    }
    .input-group-addon{
      background-color: rgb(2, 117, 216);
      color: #efefef;
    }
    #messages {
      padding: none;
    }
    .chat-window {
      height: 500px;
      border: 1px solid #cccccc;
      margin-bottom: 10px;
      padding: 1rem;
      overflow-y: scroll;
    }
    .msg {
      margin-bottom: 1rem;
    }
.id{
    font-weight: bolder;
}

    </style>
</head>
<body>

    <div class="container">
        <div class="row">
            <div class="col-md-12 text-center">
            <h2>Websocket & Socket.io Chat</h2>
</div>

    <script type="text/javascript">
     var socket = io.connect( 'http://localhost:1334' );

        $(function(){
            $("form").submit(function(){
                var mensaje = $("#msg").val();
                if(mensaje=='') return false;
                if(mensaje==' ') return false;
                //evento message en el server nodejs
                console.log(mensaje)

                socket.emit('message',mensaje);
                $("#msg").val('').focus();
                return false;
            });
            $("#channel").change(function(){
                socket.emit('change channel',$("#channel").val());
            });
        });

        socket.on('message',function(msg){

            $('#message').append($('<p><strong>' + '<?echo $_SESSION["user"]?>' + ': </strong>' + msg + '</p>'));

            $('.chat-window').scrollTop($('#message').height());

        socket.on('change channel',function(channel){
            $("#message").html('').append($('<li>').text('system : Bienvenido al Canal '+channel+' !'));
        });
    </script>

    <div class="col-md-12">
        <div class="chat-window">
              <div id="message"></div>
    </div>
    <div id="controls">

        <form action="" method="post">
            <select name="channel" id="channel">

                <option value="<?echo $codroom?>">Channel A</option>
             <option value="<?echo $codroom?>">Channel B</option>
            </select>

            <div class="col-md-12">
                <div class="input-group enter-chat-message">
                    <input type="text" id="msg" name="a" class="form-control" placeholder="Chat Message...">
                    <input class="input-group-addon submit-chat-message" type="submit" id="btn" name="submit" value="Enviar">
                </div>
            </div>
</div></div>
        </form>

    </div></div></div></div>
    <script src="https://code.jquery.com/jquery-3.1.1.slim.min.js"></script>
            <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" ></script>
            <script src="js/bootstrap.js"></script>

</body>
</html>

我试图获取名称为“a”的输入表单消息:

if(isset($_POST['submit'])){
      $aa=$_POST['a'];
      $sql4 = "INSERT INTO as3 (aa1) VALUES('$aa')";
      $resultado = mysqli_query($conn, $sql4); // Realizamos la consulta. mysqli_query() parámetros: conexión, consulta
    }

或低于 $("form").submit(function(){

试图在 PHP 变量中获取消息以将其插入数据库。

也许我尝试的东西很简单,但是在 node.js 和 php 中使用它有点困难,因为我是使用 node.js 的初学者

对不起,如果我的英语不完美, 希望您能帮帮我,谢谢!

【问题讨论】:

    标签: javascript php node.js forms websocket


    【解决方案1】:

    我从事这样的项目,我认为最好的解决方案是为数据库中的每个用户创建一个 uid 归档 将聊天部分的所有逻辑保留在 NodeJs 中。 您也必须使用 WebSocket 发送消息数据。 您必须发送的数据可能如下所示

    {
     "sender_user_uid" : "nsdasdwq324yhjdasjdh548dwadjkhhdt6@e3",
     "message": "Hello",
     "channel_uid": "hbklierokwe,zcsadkwq324545@%#"
    }
    

    【讨论】:

    • 如果我想将它保存到php端的mysql,在它到达node.js之前通过输入字段获取消息?
    • 可以将消息保存在 PHP 中,然后从 PHP 发送到 NodeJs。
    猜你喜欢
    • 2014-04-26
    • 2010-11-28
    • 1970-01-01
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    • 2016-03-12
    • 1970-01-01
    • 2013-04-26
    相关资源
    最近更新 更多