0

首先,我们是 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 的视频中保存选票
  • 并以重定向结束

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

数据库结构:

表名:
用户

表注释:用户

列类型 Null 默认注释 MIME

id int(11) 否          
videoId int(11) 否          

表名:
视频

表评论:视频

列类型 Null 默认注释 MIME

id int(11) 否          
url varchar(50) 否       
4

2 回答 2

1

如果你想保持简单,你可能想跳过页面不重新加载的部分。您可以让按钮执行各种 javascript 技巧(googlejqueryajax),但没有必要这样做。

假设您的网址是 yourfile.php

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

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

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

于 2013-05-29T18:57:46.107 回答
0

这是相当开放的,所以我会添加一些线索来帮助你。

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

所以,在你的下<iframe>,设置<form>一个post方法。在其中添加三个input标签,每个标签的类型为submit,每个标签都有不同的name属性。对于您的action,您可以根据需要将其瞄准不同的页面,但由于它很简单,我会将其指向它本身。因此,<?php echo $_SERVER[ 'PHP_SELF' ] ?>暂时使用。

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

// 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数组中的单独查询字符串。但是,我认为这有点令人费解,并且可能不是在实践中实现这一目标的最佳方式。

于 2013-05-29T18:56:49.843 回答