Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Prinsip reka bentuk dan amalan sistem pengundian PHP

Prinsip reka bentuk dan amalan sistem pengundian PHP

WBOY
WBOYasal
2023-08-09 15:17:061528semak imbas

Prinsip reka bentuk dan amalan sistem pengundian PHP

Prinsip dan amalan reka bentuk sistem pengundian PHP

Abstrak: Artikel ini akan menumpukan pada prinsip reka bentuk dan amalan sistem pengundian PHP. Ia menerangkan analisis keperluan sistem pengundian, reka bentuk pangkalan data, pengesahan dan kebenaran pengguna, interaksi hadapan dan belakang, dsb. Pada masa yang sama, artikel itu juga mengandungi contoh kod PHP yang berkaitan, bertujuan untuk membantu pembaca mempelajari dan memahami pembangunan sistem pengundian dengan lebih baik.

1. Analisis Keperluan
Sebelum mereka bentuk sistem pengundian, kita perlu menjelaskan keperluan sistem. Sistem pengundian asas biasanya merangkumi fungsi seperti mencipta undi, menerbitkan undi, mengambil bahagian dalam undi dan mengira keputusan pengundian. Dalam artikel ini, kami akan menerangkan sistem pengundian pilihan tunggal yang mudah sebagai contoh.

2. Reka bentuk pangkalan data
Dalam sistem pengundian, kita perlu mereka bentuk pangkalan data untuk menyimpan data berkaitan pengundian. Biasanya, kita perlu mencipta jadual data berikut:

  • Jadual pengguna (pengguna): digunakan untuk menyimpan maklumat pengguna, seperti nama pengguna, kata laluan, dsb.
  • Jadual undian (undi): digunakan untuk menyimpan maklumat pengundian, seperti topik pengundian, masa penciptaan, dsb.
  • Jadual pilihan (pilihan): digunakan untuk menyimpan maklumat pilihan mengundi, seperti kandungan pilihan, undi milik, dsb.
  • Jadual rekod (rekod): digunakan untuk menyimpan rekod pengundian pengguna, seperti ID pengguna, ID mengundi, dsb.

Berikut ialah kod contoh reka bentuk pangkalan data:

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `vote` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  `created_at` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `option` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `content` varchar(255) NOT NULL,
  `vote_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  FOREIGN KEY (`vote_id`) REFERENCES `vote`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `record` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `vote_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON DELETE CASCADE,
  FOREIGN KEY (`vote_id`) REFERENCES `vote`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

3. Pengesahan dan kebenaran pengguna
Dalam sistem pengundian, pengesahan dan kebenaran pengguna adalah sangat penting. Kami perlu memastikan bahawa hanya pengguna log masuk boleh mengundi dan setiap pengguna hanya boleh mengundi sekali setiap tinjauan pendapat. Berikut ialah contoh kod untuk pengesahan dan kebenaran pengguna:

// 登录验证
session_start();
if (!isset($_SESSION['user'])) {
    header('Location: login.php');
    exit;
}

// 投票操作
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $userId = $_SESSION['user']['id'];
    $voteId = $_POST['voteId'];
    $optionId = $_POST['optionId'];

    // 检查是否已经投过票
    $record = $db->query("SELECT * FROM record WHERE user_id = $userId AND vote_id = $voteId")->fetch(PDO::FETCH_ASSOC);
    if (!$record) {
        // 插入投票记录
        $db->query("INSERT INTO record (user_id, vote_id) VALUES ($userId, $voteId)");
        // 更新选项的票数
        $db->query("UPDATE `option` SET count = count + 1 WHERE id = $optionId");
        echo '投票成功!';
    } else {
        echo '您已经投过票了!';
    }
}

4. Interaksi hadapan dan belakang
Dalam sistem pengundian, interaksi antara bahagian depan dan belakang tidak dapat dielakkan. Biasanya kami menggunakan Ajax untuk melaksanakan operasi pengundian tanpa muat semula dan menggunakan format JSON untuk menghantar data. Berikut ialah contoh kod untuk interaksi hadapan dan belakang:

// 前端代码
$('.vote-btn').click(function() {
    var voteId = $(this).data('vote-id');
    var optionId = $(this).data('option-id');
    $.ajax({
        url: 'vote.php',
        type: 'POST',
        dataType: 'json',
        data: {voteId: voteId, optionId: optionId},
        success: function(data) {
            alert(data.message);
            // 刷新页面
            location.reload();
        }
    });
});

// 后端代码(vote.php)
// 处理投票逻辑
// ...
$response = ['message' => '投票成功!'];
echo json_encode($response);

Ringkasan: Artikel ini memperkenalkan prinsip dan amalan reka bentuk sistem pengundian PHP, termasuk analisis keperluan, reka bentuk pangkalan data, pengesahan dan kebenaran pengguna, dan bahagian hadapan- interaksi hujung dan belakang. Dengan menerangkan contoh kod yang sepadan, pembaca boleh mempelajari dan memahami proses pembangunan sistem pengundian dengan lebih baik. Saya harap artikel ini dapat memberi sedikit rujukan dan bantuan kepada pembaca.

Atas ialah kandungan terperinci Prinsip reka bentuk dan amalan sistem pengundian PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn