Jump to content

[RESOLVIDO] Sistema de "episódios"


Ivo Pereira
 Share

Recommended Posts

Boas pessoal,

estou a fazer um site para a TV da minha escola, e por cada programa que fosse lançado, para não estar sempre a mexer no código pensei em criar um backend, pelo qual inseria os programas (link do youtube que irá aparecer na iframe no meio, imagem thumbnail, data, título do programa, número do episódio e descrição.

Isto, digo eu, será uma coisa fácil de fazer, mas eu de PHP faço o básico praticamente.

O que me aconselham? 🙂

EDIT:

Queria algo deste género mas automático 🙂

iframe.jpg

Abraço

Link to comment
Share on other sites

  • Replies 55
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Isso é através de HTML, se reparares os vídeos no Youtube têm do lado direito o código pronto com aquele vídeo para inserir o thumbnail em qualquer site, do tipo:

<object width="560" height="340"><param name="movie" value="

https://www.youtube.com/embed/U8vvhGixWQQ?feature=oembed

&hl=en_US&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="

https://www.youtube.com/embed/U8vvhGixWQQ?feature=oembed

&hl=en_US&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object>

Com o PHP só precisas de concatenar o link para o vídeo ao restante código e mostrar na página usando um ciclo.

"Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"

Link to comment
Share on other sites

Ok, a minha dúvida não era bem essa 🙂

A minha dúvida era mais, visto que apenas sei "o básico do PHP", apesar de perceber a sintaxe, saber interpretar os comandos, mesmo que SQL, o que me aconselham, para fazer um esquema como aquele demonstrado na imagem, que por acaso foi feito por mim, mas escrito em código mesmo, e não "automatizado".

Link to comment
Share on other sites

Não não, não me estou a fazer entender 🙂

Aquele "menu" à direita, onde quando se clica no vídeo, ele vai abrir na iframe do meio, aquelas informações que lá estão, data, miniatura da imagem, título do "programa", e descrição do episódio, foi tudo escrito por mim em código.

Após o clique aí, isso irá abrir um vídeo ligado a esse "episódio" no youtube.

Para adicionar mais episódios, e consequentemente outros links do youtube (outra foto, data, título, etc) tenho de editar o código à mão, e colocar.

Por isso, pensei em fazer algo com PHP, CSS, e MySQL, o problema é que não estou a ver como o fazer, visto que a nível de programação com interação com bases de dados não sei tanto quanto queria, e apenas a entendo, não conseguindo criar um processo pelo qual consiga inserir as informações depois num backend, como formatá-las e consegui-las no frontend.

Será que me fiz entender agora ? 🙂

Link to comment
Share on other sites

Crias o form em HTML. Depois em PHP fazes algo como isto:

//Aqui conecta-se à base de dados MySql do teu host
$link = mysql_connect("host", "userBD", "passBD");
//Aqui escolhe-se a base de dados que contém a infornmação.
mysql_select_db("nome_da_tabela", $link);

A estrutura da tabela deverá ser:

CREATE  TABLE IF NOT EXISTS `nome_da_base_de_dados`.`nome_da_tabela` (
  `ID` INT NOT NULL AUTO_INCREMENT ,
  `thumbnail` VARCHAR(45) NOT NULL ,
  `title` VARCHAR(45) NOT NULL ,
  `description` VARCHAR(45) NOT NULL ,
  `date` DATE NOT NULL ,
  `url` VARCHAR(45) NOT NULL ,

  PRIMARY KEY (`ID`) )

ENGINE = InnoDB

E o INSERT será algo como isto:

mysql_query("INSERT INTO `nome_da_tabela` (`ID`, `thumbnail`, `title`, `description`, `date`, `url`) VALUES ( , \"".$_POST["thumbnail"]."\", \"".$_POST["title"]."\", \"".$_POST["description"]."\", \"".$_POST["date"]."\", \"".$_POST["url"]."\")")

Se quiseres obter a data automaticamente da inserção do registo, podes ver aqui.

Date

🙂

PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum.

Link to comment
Share on other sites

Hmm, obrigado 🙂

E por exemplo, como aplicaria que cada um dos resultados ficasse na formatação da notícia que lá está que o código é este?:

<table width="284" height="79" border="0">

  <tr>

    <td width="98" rowspan="2"><a href="#link_do_youtube" target="monitor"><img src="caminho_da_imagem" alt="descricao_da_noticia" class="tv_news_image_static" height="60" width="94" /></a></td>

    <td width="218"><span class="news_date">14-12-2009</span><span class="titulo"><br />

    </span><span class="titulo_desc">    CATerpillar</span></td>

  </tr>

  <tr>

    <td class="textoNormal"><strong><a href="#link_do_youtube" target="monitor">Primeira edição do programa</a></strong></td>

  </tr>

</table>

Link to comment
Share on other sites

Fazes algo como isto:

echo "<table width=\"284\" height=\"79\" border=\"0\">";
$sql = mysql_query("SELECT ID FROM nome_da_tabela ORDER BY date");
for ($pass = 0; pass < mysql_num_rows($sql); pass++){
  $query = mysql_query("SELECT url FROM nome_da_tabela WHERE ID = ".mysql_result($sql, $pass)." LIMIT 1");
  $url = mysql_result($query, 0);
  echo '<tr>
    <td width="98" rowspan="2"><a href="'.$url.'" target="monitor">';

$query = mysql_query("SELECT thumbnail FROM nome_da_tabela WHERE ID = ".mysql_result($sql, $pass)." LIMIT 1");
echo '<img src="'.mysql_result($query, 0).'" alt="descricao_da_noticia" class="tv_news_image_static" height="60" width="94" /></a></td>';

$query = mysql_query("SELECT date FROM nome_da_tabela WHERE ID = ".mysql_result($sql, $pass)." LIMIT 1");
    echo '<td width="218"><span class="news_date">'.mysql_result($query, 0).'</span>';

$query = mysql_query("SELECT title FROM nome_da_tabela WHERE ID = ".mysql_result($sql, $pass)." LIMIT 1");
echo '<span class="titulo"><br />
    </span><span class="titulo_desc">'.mysql_result($query, 0).'</span></td>
  </tr>
  <tr>';
  
  $query = mysql_query("SELECT description FROM nome_da_tabela WHERE ID = ".mysql_result($sql, $pass)." LIMIT 1");
  echo '
    <td class="textoNormal"><strong><a href="'.$url.'" target="monitor">'.mysql_result($query, 0).'</a></strong></td>
  </tr>';
}

echo "</table>";

Não testei, mas deve funcionar. Se der erros ou tiveres alguma dúvida no código, diz. 🙂

PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum.

Link to comment
Share on other sites

Enaa paah! 🙂 Já tenho aqui com que me entreter 🙂

Nunca atinei com os for's, e os while's e outro ainda que me está a escapar.

Aqui já tenho o código pronto (ao qual te tenho a agradecer e muito 😄 ), mas nunca atinei com essa parte 🙂 com os For's, só atinei com os For Each's no VB.NET 🙂

Bom, mas isto estar a montar assim o sistema a partir do nada se calhar ainda demora um pouco, por isso não sei se ainda monte hoje, ou se depois veja com mais calma...

Link to comment
Share on other sites

Eu antes também não usava os for's, era só While's. Mas recentemente, e devido a um professor de programação que me mostrou as vantagens do for no PHP e C.

Nos for's de PHP e C, podes dividir a parte dos argumento em três:

for([parte1]; [parte2]; [parte3]){}

  • Parte1: É o código que é executado no ínicio da primeira vez do for.

for($passar = 0;  [parte2]; [parte3]){}

  • Parte2: É a condição para que o for continue. Por exemplo, se for verdadeira, o for "corre" mais uma vez, senão para.

//Aqui o for executa dez vezes
for($passar = 0; $passar < 10; [parte3]){
$passar++;
}

//Ou seja, é o mesmo que isto.
for($passar = 1; $passar <= 10; [parte3]){
$passar++;
}

  • Parte3: É executada no fim de cada loop, no fim de cada execução do script.

for($passar = 0; $passar < 10; $passar++){}

Ou seja, um exemplo:

//Esta função vai escrever a mesma frase x número de vezes.
function escreverFrases($frase, $vezes){
    for ($passar = 0; $passar < $vezes; $passar++){
        echo $frase."<br />";
    }
}

escreverFrases("Não devo falar na aula." 50);

E pronto, é simples, e útil. 🙂

PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum.

Link to comment
Share on other sites

Ahh, acho que já percebi 🙂

Então, no exemplo para a listagem de "episódios", o que faz é:

  • Declara a variável pass como 0
  • Enquanto o valor de pass, for menor do que os resultados obtidos por aquela query SQL, vai somando mais um valor ao pass até que este seja igual ao valor de resultados obtidos da query.

Acertei ? 🙂

E já agora, se quisesse paginar os dados?

Imagina, chegava aos "5 episódios" numa página, e em baixo aparecia:

1 2 Próxima

Acho que deu para perceber 🙂

Link to comment
Share on other sites

Sim, acertas-te. 🙂

Quanto à paginação, basta colocares o valor da página menos 1 vezes o número de registos. Por exemplo, (1 - 1) * 5 = 0. (2 - 1) * 5 = 5. Isto para ele te começar no registo x. Depois a parte 2 fica o valor da página vezes o número de registos. Por exemplo, 1 * 5 = 5. 2 * 5 = 10. Assim, ele só vai até ao registo x, só mostra x registos. Algo como isto: 🙂

for ($pass = ($_GET["page"] - 1) * 5; $pass < $_GET["page"] * 5; pass++){
    //Resto do código
}

PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum.

Link to comment
Share on other sites

Já agora, "assim noutra parte", será que seria possível, um upload de imagens, auto-resize das mesmas e disponibilização do link para thumbs? 😄

EDIT:

Btw, como posso verificar se a inserção de dados resultou?

Tenho este código, mas dá-me erro no IF...

<?php


require_once('../db/ligar.php'); // este já tem código feito por mim para se ligar à bd, consultando ainda outro ficheiro com as definições do host, user, etc

$query = mysql_query("INSERT INTO `tv_noticias` (`ID`, `thumbnail`, `title`, `description`, `date`, `url`) VALUES ( , \"".$_POST["thumbnail"]."\", \"".$_POST["title"]."\", \"".$_POST["description"]."\", \"".$_POST["date"]."\", \"".$_POST["url"]."\")")

if ($query) {
echo "Os dados foram introduzidos.<br /><br /><a href=\"javascript:history.go(-1)\">Voltar</a>";
} else {
echo "Ocorreu um erro ao introduzir os dados.<br /><br /><a href=\"javascript:history.go(-1)\">Tentar de novo?</a>";
}

die();

?>

O erro que aparece é:

Parse error: syntax error, unexpected T_IF in /v2/gestao/noticias/addnoticia.php on line 87

e a linha 87 é a linha do if do $query, que segundo a minha lógica era, se o conteúdo da variável $query fosse executado (que é a operação SQL), retornava verdadeiro, e mostrava que a operação tinha sido concluída.

Pelo menos, fiz algo do género para fazer a conexão ao SQL, e funcionou.

Sugestões ? 😛

EDIT2:

Aliás, mesmo só com a parte do mysql_query, mesmo depois ao ver na base de dados, a tabela está limpa 😛

EDIT3:

Outra dúvida (ai tanta 😛 ) em que formato o MySQL guarda a data? dd/mm/yyyy?

Já vi que é YYYY-mm-dd, e não dava para alterar para dd-mm-yyyy?

Abraço 👍

Link to comment
Share on other sites

Quanto ao erro do código, esqueces-te-te de um ; no fim da linha da query. 😛

<?php

       
require_once('../db/ligar.php'); // este já tem código feito por mim para se ligar à bd, consultando ainda outro ficheiro com as definições do host, user, etc

$query = mysql_query("INSERT INTO `tv_noticias` (`ID`, `thumbnail`, `title`, `description`, `date`, `url`) VALUES ( , \"".$_POST["thumbnail"]."\", \"".$_POST["title"]."\", \"".$_POST["description"]."\", \"".$_POST["date"]."\", \"".$_POST["url"]."\")");

if ($query) {
        echo "Os dados foram introduzidos.<br /><br /><a href=\"javascript:history.go(-1)\">Voltar</a>";
} else {
        echo "Ocorreu um erro ao introduzir os dados.<br /><br /><a href=\"javascript:history.go(-1)\">Tentar de novo?</a>";
}

die();

?>

Quanto à segunda questão, eu sempre que preciso disso guardo no formato do MySql, e depois ao lêr, formato a data.

PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum.

Link to comment
Share on other sites

Que estranho, continua a dar-me um erro a inserir na base de dados. Peguei nisso da data pois pensei que fosse esse o problema.

Tenho este código no formulário:

  <form action="addnoticia.php" method="POST">
    <h1 class="a">URL da miniatura:<br />
    <input type="text" name="thumbnail" size="70" />
    </h1>
    <p class="a">Título:<br />
    <input type="text" name="date" size="50" />
    </p>
    <p class="a">Descrição:<br />
    <textarea rows="5" cols="67" name="description"></textarea>
    </p>
    <p class="a">Data:<br />
    <input type="text" name="date" size="16" value="<?php echo date("Y-m-d H:i:s"); ?>" readonly="readonly" disabled="disabled"/>
    </p>
    <p class="a">URL do Youtube:<br />
    <input type="text" name="url" size="70" />
    </p>
    <br />
    <input type="submit" value="Enviar notícia" />  <input type="reset" value="Apagar" />
    </form>

addnoticia.php:

<?php


require_once('../db/ligar.php'); // ficheiro que inclui a conexão, e esta funciona porque já experimentei

$query = mysql_query("INSERT INTO `tv_noticias` (`ID`, `thumbnail`, `title`, `description`, `date`, `url`) VALUES ( , \"".$_POST["thumbnail"]."\", \"".$_POST["title"]."\", \"".$_POST["description"]."\", \"".$_POST["date"]."\", \"".$_POST["url"]."\")");

if ($query) {
echo "Os dados foram introduzidos.<br /><br /><a href=\"javascript:history.go(-1)\">Voltar</a>";
} else {
echo "Ocorreu um erro ao introduzir os dados.<br /><br /><a href=\"javascript:history.go(-1)\">Tentar de novo?</a>";
}

die();

?>

Vai-me sempre para o Else 😛

Btw, como se põe o geshi em HTML? Não consigo --'

Link to comment
Share on other sites

Obrigado pela dica, não conhecia 😛

Ele retornou isto:

1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' "http://tv.esdg.pt/v2/images/videos/thumbs/amostra.jpg", "", "descriçao", "Obr' at line 1

Mas continuei sem perceber o que está mal ali...

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.