PHP和MySQL投票系统OOP

时间:2013-05-29 18:33:34

标签: php mysql count

首先我们是PHP的初学者,我们正在学习多媒体设计,我们已经被指派用纯HTML制作一个网站。此外,我们还必须包含一些PHP(必须是面向对象的)。我们的想法是在我们的数据库中调用Youtube视频中的URL,每个视频都应附有一个投票按钮。

我们可以轻松地将视频发送到我们网站上div框中的特定页面。这是我们的video_class.php:

<?php class Video {
private $db;    
public function insertVideo($videoId) {
    $row = $this->db->query("SELECT url FROM video WHERE id = ".$videoId);
    $ost = $this->db->loadRows($row);

    echo '<iframe width="200" height="200" src="https://www.youtube.com/embed/' . $ost[0]['url'] . '" frameborder="0" allowfullscreen></iframe>';
}

public function setDatabaseConnection($db) {
    $this->db = $db;
} } ?>

我们将页面加载到:

<?php // Create database connection

// Load Database class file
require_once 'db_class.php'; 

//Creating new object instance from Database class
$db = new event(); 

// Run initiate function and provide credentials.
$db->initiate("localhost","root","","event"); 


$db->connect();                 // Connect to MySQL database

// Load Video class file
require_once 'video_class.php'; 


$video  = new Video;
$video->setDatabaseConnection($db);

$row=$db->query("SELECT url FROM video WHERE id = 1");
$ost=$db->loadRows($row);
//var_dump($ost);
$row1=$db->query("SELECT url FROM video WHERE id = 2");
$ost1=$db->loadRows($row1);
//var_dump($ost1);
$row2=$db->query("SELECT url FROM video WHERE id = 3");
$ost2=$db->loadRows($row2);
//var_dump($ost2); ?>

HTML:             

    <center><div class="video_clip">

<?php echo '<iframe width="200" height="200" src="https://www.youtube.com/embed/' . $ost[0]['url'] . '" frameborder="0" allowfullscreen></iframe>'; ?>

        <a href="events_vote.php?userid=1&videoid=1"><img src="images/vote.png"></a>

        </div><!--video_clip end-->

但真正的问题是下一个:

我们有3个视频,您可以点击每个视频下的投票按钮进行投票。每个按钮必须计算点击次数并将其存储在我们的数据库中。我们完全不知道如何使这成为可能。我们的老师告诉我链接到一个子页面(例如,“vote.php”)。在那个页面上我们应该使用:

  • $ _ GET [ID]
  • 从$ get
  • 获取ID
  • 从视频获得当前投票,其中id = 1/2/3
  • 添加+ 1
  • 在视频中保存投票,其中id = 1
  • 并以重定向结束

有人可以帮助我们吗?我们在论坛上找到了一些可能的解决方案,但仍然没有运气!很抱歉长篇文章和太多文字:)

数据库结构:

Table name:
users

Table comments: users

Column  Type    Null    Default Comments    MIME

id  int(11) No          
videoId int(11) No          

Table name:
video

Table comments: video

Column  Type    Null    Default Comments    MIME

id  int(11) No          
url varchar(50) No       

2 个答案:

答案 0 :(得分:1)

如果您想保持简单,可能需要跳过页面无法重新加载的部分。你可以制作一个按钮来做各种各样的javascript技巧(google jqueryajax),但是没有必要这样做。

假设您的网址是yourfile.php

  • 在每个视频下面创建一个名为upvote的链接,将其链接到yourfile.php?voteid = xx 其中xx是视频的ID
  • 如果点击该链接,您将被重定向到同一页面,但现在您有一个获取参数
  • 在您的代码中,在您显示页面之前,请检查是否正在投票

    if(isset($_GET['voteid']){
        //save vote!
    }
    

现在你在同一个页面上,你检索了投票(一个比以前更高),你可以继续前进。

答案 1 :(得分:0)

这是非常开放的,所以我会添加一些线索让你前进。

首先,由于您的投票会影响数据库,因此您应该使用post而不是get(有关详细信息,请参阅here 1 。一旦处理完操作,就可以进行重定向。

因此,在<iframe>下,使用<form>方法设置post。在其中添加三个input标记,每个标记的类型为submit,每个标记都具有不同的name属性。对于action,如果您愿意,可以将其瞄准不同的页面,但由于它很简单,我会指出它自己。因此,暂时使用<?php echo $_SERVER[ 'PHP_SELF' ] ?>

好的,这样就会将帖子数据发送到同一页面。因此,在您的页面PHP中,在数据库初始化之后,像这样捕获post op:

// Your existing code
$db->connect();                 // Connect to MySQL database

// New code
if ($_POST) {
    print_r($_POST);
    exit();
    // @todo Parse the result in your POST array
    // @todo Save the result in the database
    // @todo Redirect to self
}

// Load Video class file
require_once 'video_class.php'; 

将要做的是将帖子数据转储到屏幕上,然后立即退出。这是一个很好的原型设计方法,可以确保您走在正确的轨道上。

添加@todo笔记也是一个非常好的方法 - 按顺序执行这些操作,并在编写和测试该文章时删除注释。如果合适,请不要忘记添加解释代码的新评论。

1 如果使用$_GET数组是练习的重要组成部分,那么可以使用三个帖子表单,每个表单都有自己的按钮,并且包含将出现在$_GET数组中的单独查询字符串的操作。但是我认为这有点令人费解,而且可能不是实践中实现这一目标的最佳方法。