Using PHP and WebSocket to develop online voting functions
With the rapid development of the Internet, more and more traditional activities have gradually migrated to Conducted on an online platform. One of them is the voting campaign. By using the combination of PHP and WebSocket technology, we can implement a simple and practical online voting function. This article will introduce how to develop a complete online voting system using PHP and WebSocket, and provide some specific code examples.
In order to implement the online voting function, we need to meet the following system requirements:
Before designing the online voting system, we need to determine some key functions and implementation methods:
The following steps will be followed to implement the online voting function:
Create database table
Create in MySQL A table is used to store voting options. The table structure is as follows:
CREATE TABLE `voting_options` ( `id` int(11) NOT NULL AUTO_INCREMENT, `option_name` varchar(255) NOT NULL, `vote_count` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`id`) );
Writing server code
First you need to install the swoole extension, then create a WebSocket server and listen to the specified port. When a new connection is established, obtain the client's voting option ID and update the number of votes for the corresponding option in the database. The code example is as follows:
<?php // 创建WebSocket服务器 $server = new SwooleWebSocketServer('0.0.0.0', 9501); // 当有新的连接建立时 $server->on('open', function ($server, $request) { // 解析请求中的投票选项ID $optionId = $_GET['option_id']; // 更新数据库中对应选项的投票数量 // 推送投票统计结果给所有已连接的客户端 }); // 启动服务器 $server->start();
Writing client code
In HTML, add a button for voting options, and use JavaScript to create a WebSocket connection to listen for message push from the server. When the button is clicked, use WebSocket to send the voting option ID to the server. The code example is as follows:
<html> <head> <!-- 引入jQuery库 --> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> </head> <body> <!-- 添加投票选项的按钮 --> <button id="option1" onclick="vote(1)">选项1</button> <button id="option2" onclick="vote(2)">选项2</button> <button id="option3" onclick="vote(3)">选项3</button> <!-- 引入WebSocket客户端代码 --> <script> // 创建WebSocket连接 var socket = new WebSocket('ws://localhost:9501'); // 监听服务端的消息推送 socket.onmessage = function(event) { // 更新投票统计结果 }; // 投票函数 function vote(optionId) { // 发送投票选项ID给服务端 } </script> </body> </html>
Update the database and push the voting statistics results
In the server code, according to the received voting option ID, update the number of votes for the corresponding option in the database. Then, push the voting statistics results to all connected clients via WebSocket. The code sample is as follows:
<?php // 创建WebSocket服务器 $server = new SwooleWebSocketServer('0.0.0.0', 9501); // 当有新的连接建立时 $server->on('open', function ($server, $request) { // 解析请求中的投票选项ID $optionId = $_GET['option_id']; // 更新数据库中对应选项的投票数量 $optionId = intval($optionId); $result = mysqli_query($conn, "UPDATE voting_options SET vote_count = vote_count + 1 WHERE id = $optionId"); if ($result) { // 推送投票统计结果给所有已连接的客户端 $votingLiveData = getVotingLiveData(); // 获取投票统计数据 $server->push($request->fd, $votingLiveData); // 发送投票统计数据给当前客户端 $server->push($request->fd, $votingLiveData, WEBSOCKET_OPCODE_BINARY); } }); // 启动服务器 $server->start();
This article introduces how to use PHP and WebSocket to develop a simple online voting function. By using PHP as the server, HTML, CSS and JavaScript to implement the user interface, and WebSocket for real-time communication, we can implement an online voting system that updates voting statistics in real time. It should be noted that this sample code is just a simple example. In actual situations, some adjustments and optimizations may be required based on specific needs. I hope this article can be helpful in developing online voting capabilities.
The above is the detailed content of Develop online voting function using php and Websocket. For more information, please follow other related articles on the PHP Chinese website!