2013-05-29 4 views
0

Для начала мы начинаем работать с PHP, мы изучаем дизайн мультимедиа, и нам назначили веб-сайт в виде простого HTML. Кроме того, мы также должны включить некоторый PHP (который должен быть объектно-ориентированным). Наша идея - вызывать URL-адрес из наших видео Youtube в нашей базе данных, и каждое видео должно содержать кнопку голосования.Система голосования по PHP и MySQL OOP

Мы можем легко позвонить нашим видео на определенную страницу в поле 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]
  • получать идентификатор от $ получить
  • получить текущие голоса из видео, где 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  
+0

Это должно быть так, как он сказал вам, или вы можете использовать другие способы, например AJAX? Если да, то это будет проще, чем то, как он сказал. – DontVoteMeDown

+0

Ваш учитель прав, это должно сработать. В чем проблема с его решением, где именно вы застряли? Отправьте свой код. – Beat

+0

@DontVoteMeDown они просто изучают HTML и PHP - не путайте их с Javascript и Ajax;) – Beat

ответ

0

Это довольно открытым, поэтому я добавлю некоторые подсказки, чтобы ты.

Во-первых, так как ваши голоса будут влиять на базу данных, вы должны использовать post и не get (см here для более подробной информации) . После того, как вы справитесь с этой операцией, вы можете сделать свою переадресацию.

Итак, под вашим , настройте <form> с помощью метода post. В нем добавьте три тега input, каждый из которых имеет тип submit, и каждый из них имеет другой атрибут name. Для вашего action вы можете направить его на другую страницу, если хотите, но так как это просто, я бы указал на нее. Таким образом, пока используйте <?php echo $_SERVER[ 'PHP_SELF' ] ?>.

ОК, поэтому это сообщение отправит данные сообщения на ту же страницу. Таким образом, на странице PHP, только после инициализации базы данных, поймать пост оп так:

// 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 также является хорошим подходом - сделайте это по порядку и удалите комментарий, когда эта часть написана и протестирована. Не забудьте добавить новые комментарии, объясняющие код, если это необходимо.

При использовании $_GET массива является важным компонентом упражнения, то вы могли использовать три почтовых форм, каждый со своей собственной кнопки, и с действием, содержащим отдельную строку запроса, который будет отображаться в $_GET массив. Однако я бы сказал, что это немного запутанно и, вероятно, не лучший способ добиться этого на практике.

+0

Хорошо, поэтому мы попробовали это сейчас. И мы получаем этот результат: пустая страница с Array ([vote1] => submit)? – mobaho

+0

Отлично! И если бы у вас были другие кнопки в одной и той же форме, вы могли бы называть их разными вещами (возможно, «upvote» и «downvote» и т. Д.). Таким образом, у вас теперь есть способ различать различные виды голосования. Теперь вы также захотите передать своему почтовому обработчику идентификатор видео, который вы можете либо сделать в действии (в виде строки запроса), либо как скрытое поле. Сделайте это дальше? После этого удалите 'print_r' и' exit() 'из вашего кода и начните кодировать три элемента' @ todo', которые я указал. – halfer

1

Если вы хотите, чтобы это было просто, вы можете пропустить часть, где страница не перезагружается. Вы можете сделать кнопку делать всевозможные трюки javascript (google jquery и ajax), но в этом нет необходимости.

предположив свой адрес является yourfile.php

  • Сделать ссылку под названием upvote под каждым видео связывая его yourfile.php? Voteid = хх где хх это идентификатор видео
  • , если нажать ссылка, вы попадаете на ту же страницу, но теперь у вас есть параметр ПОЛУЧИТЬ
  • в своем коде, прежде чем показать страницу, проверьте, есть ли голоса быть брошенным

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

Теперь вы находитесь на той же странице, вы получаете голоса (один выше, чем раньше), и вы можете продолжать идти дальше.

+0

Спасибо. Мы не можем использовать jquery, только PHP и OOP. Наши URL-адреса хранятся в нашей базе данных в разных таблицах. Мы еще не создали файл vote.php, поскольку мы не знаем, как начать работу. Цитаты, которые я изложил, это то, что наш учитель сказал нам, что vote.php должен включать. – mobaho

+0

Часть, где я печатаю «нет необходимости», означает, что jquery не требуется. Я понял эту часть. Я дал вам почти точный способ получить материал от параметра? Я не уверен, чего больше вы хотите. – Nanne

+0

Спасибо за помощь. Мы вставили ваш код в наш php, и наши ссылки выглядят так: Где userid = 1 (только 1 пользователь в нашей базе данных) и видеоигры (наше настольное видео и идентификаторы 1,2,3 ссылок на YouTube). хранится ли счет? Извините за то, что вы начинающий PHP. – mobaho

Смежные вопросы