← Desenvolvimento

Problemas em php,incluir posts de um forum numa página html

Lida 14733 vezes

Offline

morpheus 
Membro
Mensagens 1199 Gostos 0
Troféus totais: 28
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1 1000 Posts

os curiosos evoluem...
Offline

fpware 
Fundador
Mensagens 15318 Gostos 7
Troféus totais: 38
Trófeus: (Ver todos)
Linux User Mobile User Level 6 Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Poll Starter Level 5

De acordo... Ou então matam o gato :lol:
Offline

morpheus 
Membro
Mensagens 1199 Gostos 0
Troféus totais: 28
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1 1000 Posts

...só se o gato for curioso...
Offline

fpware 
Fundador
Mensagens 15318 Gostos 7
Troféus totais: 38
Trófeus: (Ver todos)
Linux User Mobile User Level 6 Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Poll Starter Level 5

:lol:  :lol:  :lol:
Offline

MiguelTavares 
Membro
Mensagens 3871 Gostos 0
Troféus totais: 33
Trófeus: (Ver todos)
Avatar Level 6 Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Poll Starter Level 5 Level 4

:lol:  :lol:  :lol:
Offline

icaro 
Membro
Mensagens 128 Gostos 0
Troféus totais: 26
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1 100 Posts

Citação de: "morpheus"
ok...

para uma coisa destas é preciso saber de mysql. não sei se é o teu caso.

Na bd do smf existe uma tabela de nome "smf_messages". é aqui que ficam as mensagens, em que tópico, que fez, etc.

o primeiro passo é identificar o ID do tópico em que vais por as notícias.

depois, é só usar um bocado de php:

Citar
<?
$host="O_HOST_MYSQL";
$sqluser="SQL_USER";
$sqlpassword="SQL_PASSWORD";
$database="SMF_DATABASE";
$connection=mysql_connect($host,$sqluser,$sqlpassword) or die (mysql_error());
$db = mysql_select_db($database) or die (mysql_error());
$password = "";

$query = "SELECT * FROM smf_messages WHERE ID_TOPIC='O_ID_DO_TOPICO" ORDER BY -ID_MSG;
$result = mysql_query($query) or die(mysql_error());
$i=0;
while($i<10){
$i++;
$row = mysql_fetch_array($result);
extract($row);
echo"$subject<br>";}
?>


Isto vai publicar as 10 últimas notícias (titulos) na página. Atenção que para isto funcionar tem que ter uma extensão .php!

PS, não testei o script, mas acho que está ok. Já olhei para ele 20 vezes!  8)


Não entendo nada Sql nem de php mas este script interessa-me será que poderias trocar por miúdos o que faz cada linha de comando para ver se entendo e o aplico? :obrigado:
Offline

kebrus 
Membro
Mensagens 459 Gostos 0
Troféus totais: 25
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1 100 Posts

icaro não fui eu que escrevi o codigo mas vou tentar responder à tua pergunta, assim pratico um pouco, espero que o morpheus não se importe (é que eu ando numa de php spree)

para te ligares a uma base de dados mysql precisas dempre de 4 dados, o servidor ($host="O_HOST_MYSQL"; ) a conta que queres utilizar para te ligar, ou seja o username ($sqluser="SQL_USER"; ) a password respectiva ao username ($sqlpassword="SQL_PASSWORD"; ) e finalmente a base de dados a que te queres ligar ($database="SMF_DATABASE"; ) visto que podes ter várias

$connection=mysql_connect($host,$sqluser,$sqlpassword) or die (mysql_error()); aqui ele estabeleceu a conecção com o mysql através de uma funcção integrada do php (mysql_connect(); ) com as respectivas informações, servidor, username e password e caso algo corresse mal ele utilizou o (or die (mysql_error()); ) que se algo correr mal da-nos o erro que aconteceu, penso que não é necessario igualar tudo à string $connection, isto só é util caso queiras utilizar novamente aquela conecção, poupando codigo só chamando pela string

depois ele estabeleceu a ligação com a database ($db = mysql_select_db($database) or die (mysql_error()); ) novamente com o (or die (mysql_error()); ) aqui acontece o mesmo daquela igualdade acima

a seguir não percebi o que ele queria com o ($password = ""; ) visto que no resto do codigo não está a ser utilizado pra nada... o morpheus deve saber explicar isto

depois armazenou na string $query a busca que se vai fazer a seguir (SELECT * FROM smf_messages WHERE ID_TOPIC='O_ID_DO_TOPICO" ORDER BY -ID_MSG) não te vou explicar isto por já é codigo mysql que convinha ser aprendido em vez de te estar a ensinar agora à pressão, mas a intensão daquele codigo é fazer uma lista por uma dertiminada ordem do conteudo que se quer extrair da base de dados

$result = mysql_query($query) or die(mysql_error()); aqui ele realizou a query utilizando a string $query anterior, ele podia ter simplesmente posto a busca aqui, mas assim o codigo fica mais organizado e podes vir a precisar mais tarde daquilo.. aqui acontece o mesmo daquela outra igualdade acima mas desta vez é necessaria em baixo

agora pro resto vamos falar portugues bem dezido lol
i é igual a zero ($i=0; ) enquanto i for menor que dez (while($i<10)) somamos mais um ao i ($i++; ) e extrai-se uma linha da base de dados que estão transformadas numa array (imagina varias strings juntas lado a lado) que resultou da query em cima feita $row = mysql_fetch_array($result); extract($row); e apresentamos cada resultado ($subject) seguindo de uma linebreak (<br>)

o objectivo desta parte final é extrair da busca feita, 10 linhas da base de dados e apresenta-las separadas por um paragrafo, o quebra de linha (como quiseres chamar) o tal <br>
por outro lado, o codigo nesta parte é duvidoso, porque $subject não está definido anteriormente em lado nenhum, ou seja muito possivelmente deveria ser $subject = extract($row); para depois sim ser utilizado, mas o morpheus é que te pode explicar, porque foi ele que fez

e então mais claro? duvidas é só dizer ;)
Offline

morpheus 
Membro
Mensagens 1199 Gostos 0
Troféus totais: 28
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1 1000 Posts

ganda post, kebrus!  :D  é por estas que o fpware nos chama de geeks!  :mrgreen:

deixa-me complementar isso:

Citar
para te ligares a uma base de dados mysql precisas dempre de 4 dados, o servidor ($host="O_HOST_MYSQL"; ) a conta que queres utilizar para te ligar, ou seja o username ($sqluser="SQL_USER"; ) a password respectiva ao username ($sqlpassword="SQL_PASSWORD"; ) e finalmente a base de dados a que te queres ligar ($database="SMF_DATABASE"; ) visto que podes ter várias

nem mais, ponto final.

Citar
$connection=mysql_connect($host,$sqluser,$sqlpassword) or die (mysql_error()); aqui ele estabeleceu a conecção com o mysql através de uma funcção integrada do php (mysql_connect(); ) com as respectivas informações, servidor, username e password e caso algo corresse mal ele utilizou o (or die (mysql_error()); ) que se algo correr mal da-nos o erro que aconteceu, penso que não é necessario igualar tudo à string $connection, isto só é util caso queiras utilizar novamente aquela conecção, poupando codigo só chamando pela string

exactamente. poderia-se reduzir o nº de linhas, mas pus assim (variaveis=valores) porque torna-se mais fácil para quem não está habituado a ler php. o die é muita util quando algo corre mal. em vez de termos que adivinhar o que correu mal, ele diz que erro se passou!

Citar
depois ele estabeleceu a ligação com a database ($db = mysql_select_db($database) or die (mysql_error()); ) novamente com o (or die (mysql_error()); ) aqui acontece o mesmo daquela igualdade acima
a seguir não percebi o que ele queria com o ($password = ""; ) visto que no resto do codigo não está a ser utilizado pra nada... o morpheus deve saber explicar isto

um bocado atrás ($connection) e ($password) são standards na "indústria". não tem uso concreto neste script, mas é assim que manda o livro.
o connection, podes sempre usar após fechar o connect oa mysql, poupando código. o $password utiliza-se quando as bds estão protegidas com... adivinhem... that's right! password... novamente, não tem uso concreto no script mas achei por bem incluir.

Citar
depois armazenou na string $query a busca que se vai fazer a seguir (SELECT * FROM smf_messages WHERE ID_TOPIC='O_ID_DO_TOPICO" ORDER BY -ID_MSG) não te vou explicar isto por já é codigo mysql que convinha ser aprendido em vez de te estar a ensinar agora à pressão, mas a intensão daquele codigo é fazer uma lista por uma dertiminada ordem do conteudo que se quer extrair da base de dados

tradução do mysql:
Código: [Seleccione]
SELECT * FROM smf_messages WHERE ID_TOPIC='O_ID_DO_TOPICO" ORDER BY -ID_MSG
"SELECT * " - escolher todos os campos (*). poderia ser substituido pelos nomes dos respectivos separado por virgulas;
"FROM smf_messages " - a tabela que vai buscar os dados;
" WHERE ID_TOPIC='O_ID_DO_TOPICO' " - reparei aqui num erro, esta parte deveria terminar numa ' em vez de " (my bad  :D ) onde (nome da coluna) é igual a (o id do tópico);
"ORDER BY -ID_MSG " - ordenar pela coluna ID_MSG. o - é para ordenar decrescente (do último para o primeiro);

Citar
$result = mysql_query($query) or die(mysql_error()); aqui ele realizou a query utilizando a string $query anterior, ele podia ter simplesmente posto a busca aqui, mas assim o codigo fica mais organizado e podes vir a precisar mais tarde daquilo.. aqui acontece o mesmo daquela outra igualdade acima mas desta vez é necessaria em baixo

nem mais!

Citar
agora pro resto vamos falar portugues bem dezido lol
i é igual a zero ($i=0; ) enquanto i for menor que dez (while($i<10)) somamos mais um ao i ($i++; ) e extrai-se uma linha da base de dados que estão transformadas numa array (imagina varias strings juntas lado a lado) que resultou da query em cima feita $row = mysql_fetch_array($result); extract($row); e apresentamos cada resultado ($subject) seguindo de uma linebreak (<br>)
o objectivo desta parte final é extrair da busca feita, 10 linhas da base de dados e apresenta-las separadas por um paragrafo, o quebra de linha (como quiseres chamar) o tal <br>
por outro lado, o codigo nesta parte é duvidoso, porque $subject não está definido anteriormente em lado nenhum, ou seja muito possivelmente deveria ser $subject = extract($row); para depois sim ser utilizado, mas o morpheus é que te pode explicar, porque foi ele que fez

só acrescento que $subject é uma das colunas escolhidas anteriormente com o (*), logo, não seria
Código: [Seleccione]
$subject = extract($row), porque iria eliminar o escolhido anteriormente.

são dois grandes testamentos, é verdade! mas espero que assim compreendas este pequeno código!
Offline

MiguelTavares 
Membro
Mensagens 3871 Gostos 0
Troféus totais: 33
Trófeus: (Ver todos)
Avatar Level 6 Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Poll Starter Level 5 Level 4

Excelente meninos! :mrgreen:
Offline

Ricardo75 
Membro
Mensagens 1660 Gostos 0
Troféus totais: 28
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1

SMF... ora bem, esta é complicada...
muito complicada, não é fácil fazer o que queres... pelo contrário, é muito difícil...

mas dá uma olhada em ssi_examples.php  :lol:  :lol:
ou vê isto: http://www.simplemachines.org/community/index.php?topic=14906.0

só acho que tens q pôr isso num ficheiro php e não html.

SMF => the best...
Offline

morpheus 
Membro
Mensagens 1199 Gostos 0
Troféus totais: 28
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1 1000 Posts

:mrgreen: thanx!
Offline

kebrus 
Membro
Mensagens 459 Gostos 0
Troféus totais: 25
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1 100 Posts

Citação de: "morpheus"
só acrescento que $subject é uma das colunas escolhidas anteriormente com o (*), logo, não seria
$subject = extract($row)
, porque iria eliminar o escolhido anteriormente.

não tinha percebido, thx :D
Offline

morpheus 
Membro
Mensagens 1199 Gostos 0
Troféus totais: 28
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1 1000 Posts

:thumbupmil:
Offline

fpware 
Fundador
Mensagens 15318 Gostos 7
Troféus totais: 38
Trófeus: (Ver todos)
Linux User Mobile User Level 6 Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Poll Starter Level 5

Grandes malucos! :D
Offline

icaro 
Membro
Mensagens 128 Gostos 0
Troféus totais: 26
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1 100 Posts

Muito obrigado!

amanhã vou digerir o código e depois dou notícias :dance: