Um fórum simples em PHP/MySQL
O script responsável para inserir as mensagens no fórum , é trata.php :
Para listar as mensagens em forma de corrente e só o topicos.php:
<?php include "./config.php"; $conn = mysql_connect($host, $user, $password); mysql_select_db($database); $consulta = "SELECT COUNT(*) as total FROM msg WHERE pai='0'"; $quantidade = mysql_query($consulta, $conn); $total = mysql_result($quantidade, 0, "total"); // Recebe o numeros de topicos no forum $total++; /* Se o _$POST[´topico´] tem um valor nulo ,cria um novo topico. Senão adiciona mais uma mensagem ao topico. */ if ($_POST['topico'] == "") { $topico = $total; } else { $topico = $_POST['topico']; } // Fim if $nome = $_POST['nome']; $email = $_POST['email']; $titulo = $_POST['titulo']; $mensagem = $_POST['mensagem']; $pai = $_POST['pai']; $data = date("d/m/Y H:i:s");; $str = "INSERT INTO `msg` (`autor`, `email`, `titulo`, `mensagem`, `data`, `pai`, `topico`, `resposta`) VALUES ('$nome', '$email', '$titulo', '$mensagem', '$data', '$pai', '$topico', '$resposta')"; if (!mysql_query($str,$conn)) { echo mysql_error(); } // Fim if mysql_close($conn); ?> <html><head> <meta HTTP-EQUIV="Refresh" CONTENT="0;URL=topicos.php"> </head> </html> Depois de inseridas as mensagens, você precisa listar as mensagens: A forma que eu escolhi foi na forma de correntes, igual ao fórum do PHPBrasil.com. Só que comecei a quebrar a cabeça. Como ia criar as correntes ? A idéia que eu tive foi criar uma função recursiva e array bidimensional que é passado por referência. Notei que há sete possibilidades principais para correntes, as outras são combinações: *n.gif - Mensagem inicial sem filhos. *m.gif - Mensagem com filhos *c.gif - Mensagem sem filhos. *t.gif – Filho do meio. *l.gif – Filho caçula. *i.gif – Neto de filho do meio. *trans(2).gif(Transparente) – Neto de filho caçula. %imagem% Chamei esse array de $hist. As posições $hist[0] e $hist[1], para filho do meio. $hist[2] e $hist[3] para filho caçula. Tudo isso esta no código func.php: <?php /* Função prox_nivel ,retorna uma corrente com as mensagens. $conn variavel para conexao no mysql $pai variavel que informa o pai da mensagem $topico variavel que informa o topico $irmao variavel que informa quantos irmaõs s mensagem tem $hist variavel com historia das correntes $cont variavel com a possição do array $mesg variavel contendo as mensagens */ function prox_nivel($conn, $pai, $topico, $irmao, $hist, &$cont, &$mesg) { $val = 1; //Posição em na hieraquia dos filhos if ($pai == 0) { $query = "SELECT * FROM msg WHERE (pai=\"0\" AND topico=$topico)"; } else { $query = "SELECT * FROM msg WHERE pai=\"$pai\" ORDER BY `codigo` ASC"; } $consulta = mysql_query($query, $conn); while ($linha = mysql_fetch_row($consulta)) { $consulta2 = "SELECT COUNT(*) as total FROM msg WHERE pai='$linha[0]'"; $quantidade = mysql_query($consulta2, $conn); $total = mysql_result($quantidade, 0, "total"); /* $total igual a 0 ,a mensagem não tem filhos */ $x = 0; $y = 1; /* Se $val igual $irmao ,filho caçula. */ if ($val == $irmao) { $x = 2; $y = 3; } $titulo = "Re:$linha[3]"; $xhist[0] = $hist[$x]; $xhist[1] = $hist[$y]; $mesg[$cont][1] = " <a href=\"./ler.php?pai=$linha[0]&titulo=$titulo&topico=$linha[7]&codigo=$linha[0]#mesg\">$linha[3]</a>"; $mesg[$cont][2] = $linha[1]; $mesg[$cont][3] = $linha[5]; $mesg[$cont][4] = $linha[4]; if ($total == 0) { if ($xhist[0] == "<img src=\"trans(2).gif\" width=\"12\" height=\"21\">") { $mesg[$cont][0] = "$xhist[0]<img src=\"n.gif\">"; $cont++; } else { $mesg[$cont][0] = "$xhist[0]<img src=\"c.gif\">"; $cont++; } } else { $mesg[$cont][0] = "$xhist[0]<img src=\"m.gif\">"; $cont++; /* Possibilidades de images no proximo nivel,armazenadas em $newhist */ $newhist[0] = "$xhist[1]<img src=\"t.gif\">"; $newhist[1] = "$xhist[1]<img src=\"i.gif\">"; $newhist[2] = "$xhist[1]<img src=\"l.gif\">"; $newhist[3] = "$xhist[1]<img src=\"trans(2).gif\" width=\"12\" height=\"21\">"; prox_nivel($conn, $linha[0], "", $total, $newhist, $cont, $mesg); } $val++; } } ?>
Para listar as mensagens em forma de corrente e só o topicos.php:
<?php include "./config.php"; include "./func.php"; $conn = mysql_connect($host, $user, $password); mysql_select_db($database); /* $hist isso da corrente. */ $hist[0] = "<img src=\"trans(2).gif\" width=\"12\" height=\"21\">"; $hist[1] = "<img src=\"trans(2).gif\" width=\"12\" height=\"21\">"; $hist[2] = "<img src=\"trans(2).gif\" width=\"12\" height=\"21\">"; $hist[3] = "<img src=\"trans(2).gif\" width=\"12\" height=\"21\">"; $consulta = "SELECT COUNT(*) as total FROM msg WHERE pai='0'"; $quantidade = mysql_query($consulta, $conn); $total = mysql_result($quantidade, 0, "total"); $cont = 0; /* Listas as correntes. */ for ($i = $total; $i != 0; $i--) { prox_nivel($conn, 0, $i, $total, $hist, $cont, $mesg); } // Fim for mysql_close($conn); ?> <p><a href="./form.php">Novo Tópico</a></p> <table cellSpacing="0" cellPadding="0" width="100%" border="0"> <tr> <td bgColor="#99cc99"><font color="#000000"> Tópicos</font></td> <td noWrap width="150" bgColor="#99cc99"><font color="#000000">Autor </font></td> <td noWrap width="150" bgColor="#99cc99"><font color="#000000">Data</font></td> </tr> <? $cor = 1; // Variavel responsavel pelas cores alternadas for ($i = 0; $i < $cont; $i++) { $cor = -$cor; if ($cor == -1) { $strcor = "#E6FFE6"; } else { $strcor = "#FFFFD7"; } // Fim if ?> <tr vAlign="center"> <td bgColor=<?=$strcor;?>> <table cellSpacing="0" cellPadding="0" border="0"> <tbody> <tr > <td bgColor=<?=$strcor;?>><?=$mesg[$i][0];?></td> <td bgColor=<?=$strcor;?>><font color="#000000"><?=$mesg[$i][1];?></font></td> </tr> </tbody> </table> </td> <td noWrap bgColor=<?=$strcor;?>><?=$mesg[$i][2];?></td> <td noWrap bgColor=<?=$strcor;?>><?=$mesg[$i][3];?></td> </tr> <? } // Fim for ?> </table>
oi eu sou um novato completo em php mas eu estava fazendo um site pra sala de aula do meu irmao e eles pediram se eu podia criar um forum pra eles so q eu to com poco tempo mas quero aprender mais sobre php, eu so queria saber se vc poderia mandar um forum em php pra mim ediatar pq eu n endi muito sobre isso e tbm queria saber como colocar no meu site html.valeu meu e-mail é lucas_zgoda@yahoo.com.br
14/02/2010 5:16pm
(~15 anos atrás)
O me passa essa func.php pq sem ela ñ ta dando certo o php me manda no meu email gui.valadares@narutoultimate.net
21/06/2009 7:48pm
(~15 anos atrás)
eu tentei copia e corrigir algumas coisa.
esta cadastrando no banco mas ñ quer listar no topico(coloquer a funcao q acho q faltava no func.php - proximo Nivel), veja me ajudaaaa
esta cadastrando no banco mas ñ quer listar no topico(coloquer a funcao q acho q faltava no func.php - proximo Nivel), veja me ajudaaaa
18/11/2004 9:24am
(~20 anos atrás)
Ai .. Deu um erro na linha 24 do topicos.php
o erro é esse
Warning: Supplied argument is not a valid MySQL result resource in /var/www/default/forum/topicos.php on line 24
o que pode ser?
o erro é esse
Warning: Supplied argument is not a valid MySQL result resource in /var/www/default/forum/topicos.php on line 24
o que pode ser?
30/10/2002 6:17pm
(~22 anos atrás)
coloquei seu link..... e apareceu um monte de erro...... perque.... tirou fora do ar
Valeu, romano
Valeu, romano
01/10/2002 10:57am
(~22 anos atrás)
Tem comoeu enviar por exemplo no fim do dia as novas msgs de um determinado topico para pesoas que estejam cadastradas?
Como enviar e selecionar o topico eu sei.
O problema é como fazer ele executar automático num determinado horário todo dia.
Como enviar e selecionar o topico eu sei.
O problema é como fazer ele executar automático num determinado horário todo dia.
15/09/2002 9:06pm
(~22 anos atrás)
09/09/2002 10:42pm
(~22 anos atrás)
Warning: include(./func.php): failed to open stream: No such file or directory in C:\xampp\htdocs\forum\topicos.php on line 3
Warning: include(): Failed opening './func.php' for inclusion (include_path='.;\xampp\php\PEAR') in C:\xampp\htdocs\forum\topicos.php on line 3
Fatal error: Call to undefined function prox_nivel() in C:\xampp\htdocs\forum\topicos.php on line 25