Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Big-D

Menu PHP (com ligaçao a BD MySql) [resolvido]

Mensagens Recomendadas

Big-D

Bom Dia,

Eu estou a tentar fazer o seguinte:

Na pagina principal (imaginemos) um dos menus vai listar todas as categorias existentes na BD e ao clicar em cada categoria ele ira para uma pagina diferente (ex.: vinhos-vinhos.php, cereais-cereais.php).

Embora já me tenham dito que é possível, pois caso eu tivesse mil categorias seria ser maluco meter a mão todas as categorias, mas o que ninguém me disse foi como o fazer, e embora já tenha pesquisado na net continua a ser-me bastante difícil encontrar algum site ou que explique como ou como começar.

Se me poderem mandar um site ou com um tutorial ou uma simples explicação seja em português (PT-PT ou PT-BR) ou inglês.

Desde já obrigado a quem responder.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
scorch

Se ainda não souberes trabalhar com MySQL:

http://php.net/manual/en/book.mysql.php

http://www.w3schools.com/PHP/php_mysql_intro.asp

Isso basta fazeres uma query à Base de Dados e buscar os nomes das categorias e os ficheiros. Com um ciclo mostras as categorias. :)


scorch_pp.png

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
scorch

Referes-te a artigos sobre Bases de Dados?


scorch_pp.png

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Big-D

Eu consigo listar todas as categorias existentes, mas não sei como atribuir uma pagina a cada uma, e sempre que cada categoria é criada.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
scorch

Vou tentar escrever tutoriais básicos desse género para a semana. Esta não posso, que não tenho tempo. :)


scorch_pp.png

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

Scorch, o teu código funciona. Contudo, quando se regista uma categoria neste caso, tem que automaticamente se inserir na tabela linksCategorias o id, id_categoria, nome e url.

Não será mais facil juntar tudo numa tabela? Desta forma, teriamos numa só tabela: id, nome e url.

O url, não seria apresentado ao utilizador. Sempre que se inserisse uma nova categoria (nome) automaticamente o url seria igual ao nome + extensão.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Big-D

Usando a sugestão do bioshock, efectuado o registo ele guarda o nome da categoria e cria o  url.

Agora a minha questão é: via PHP será possivel criar uma pagina para cada categoria registada (ex.: categoria vinhos, url vinhos. html - cria uma pagina vinhos.html)?

E mais uma vez obrigado.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
scorch

@bioshock Mas acho que não entendeste bem o tutorial. O que ele faz é ter vários menus, que dentro deles têm os links  (ex. vinhos.html, etc) :)

@Big-D Sim, mas isso é quando tu inserires o registo na BD, usas também as funções de ficheiros e crias um.


scorch_pp.png

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

Scorch, eu utilizei o teu exemplo, mas adaptei-o como queria e funcionou. Apenas fiz como te disse, na minha tabela categorias acrescentei o campo URL.

Quando insiro um novo registo, automaticamente ele insere no campo URL o NOME + extensão da página.

mysql_query("INSERT INTO categorias (nome, url)
VALUES ('".$_POST['nome']."', '".$_POST['nome'].".html"."')");

No código que puseste na wiki, adaptei-o:

<?php
include ("connection.inc");

//Executamos uma query à base de dados, em que seleccionamos os menus de links que estão na base de dados.
$query = mysql_query("SELECT id, nome FROM categorias");

//Aqui iniciamos um ciclo que irá mostrar os menus.
while ($row = mysql_fetch_array($query, MYSQL_ASSOC)) {
	//Fazemos uma query à base de dados para obter os links do actual menu
	$links = mysql_query("SELECT nome, url FROM categorias WHERE id= ".$row["id"]."");

	//Verificamos se o menu tem algum link. Se sim, mostra-mo-lo, se não, nem o menu se mostra. Não vale a pena.
	if (mysql_num_rows($links) > 0){
		//Mostramos a categoria.
		echo "<h2 id=\"menu_".$row["id"]."\">".$row["nome"]."</h2>";

		//Inicia-mos a lista de categorias.
		echo "<ul>";

		//Criamos um ciclo para imprimir as hiperligações.
		while ($link = mysql_fetch_array($links, MYSQL_ASSOC)){
			//Mostra-mos a hiperligação
			echo "<li><a href=\"".$link["url"]."\" id=\"link_".$link["id"]."\">".$link["nome"]."</a></li>";
		}

		//Fecha-se a lista HTML
		echo "</ul>";
	}
}

?>

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Big-D

Criei para experimentar uma categoria com o nome de "poi" e com sucesso criou o url poi.html, mas a questão é que se usar este codigo:

<?php
$file=fopen("$link["url"]","w") or exit("Unable to open file!");
?>

ele não cria uma nova pagina com o nome da categoria em que eu cliquei, mas se usar este código:

<?php
$file=fopen("poi.html","w") or exit("Unable to open file!");
?>

ele já cria uma nova página.

Qual poderá ser o problema?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mjamado

<?php
$file=fopen("$link["url"]","w") or exit("Unable to open file!");
?>

Qual poderá ser o problema?

Aspas a mais...

<?php
$file=fopen($link["url"],"w") or exit("Unable to open file!");
?>


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Big-D

Continua sem dar.

Eu tenho imaginemos duas categorias Vinhos e Cereais, que consegui  por ele a criar com um url diferente para cada categoria, mas para não ter que ser eu a criar as paginas para cada categoria tentei usar o código que vos mostrei para ele criar as paginas, o problema é que ele só cria a pagina se eu disser por exemplo: "vinhos.html" ou "cereais.html", ou seja teria que estar a criar duas vezes o mesmo código.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
yoda

Da maneira mais simples e directa. Crias todo o conteúdo que pretendes na base de dados, e usas o mod_rerwite do apache para dares seguimento a nomes de categorias como segmentos do url.

Ex:

http://www.oteusite.com/vinhos

ou

http://www.oteusite.com/categoria/vinhos

Isto supõe que terias apenas uma página para apresentar as categorias, que leria o que vem pelo url como um parâmetro que lhe indicaria o que seria preciso ir buscar à base de dados.

É provável que não percebas, mas pronto ..

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Big-D

Se não for pedir muito podes me arranjar um pequeno exemplo (link ou algo do género) que mostre como funciona ao certo isso. Pelo que tive a ver parece ser mais simples e faz o que quero e embora não tenha certezas vou experimentar (sempre é algo novo que se aprende e experimenta).

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

Também tentei algo do género:

<?php 
$File = $lrow['nome']; 
$Handle = fopen($File, 'w');
?>

Mas sem exito, não funciona.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
yoda

Se estiveres na raiz do domínio no servidor (public_html ou httpdocs)

.htaccess

RewriteEngine On

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule .* index.php/$0 [PT,L]

index.php

<?php

$catregorias = array();
$sql = 'SELECT id, url FROM categorias';
$query = mysql_query($sql);

while  ($r = mysql_fetch_array($query, MYSQL_ASSOC)){
      $categorias[$r['id']] = $r['url'];
}

// a partir daqui tens de ler os parametros do url, e fazer as verificações que quiseres

?>

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.