Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
Big-D

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

Recommended Posts

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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites
Big-D

Eu vou dar uma vista de olhos, e depois dou um pequeno feedback.

E desde já obrigado.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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>";
	}
}

?>

Share this post


Link to post
Share on other 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?

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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 ..

Share this post


Link to post
Share on other 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).

Share this post


Link to post
Share on other sites
bioshock

Também tentei algo do género:

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

Mas sem exito, não funciona.

Share this post


Link to post
Share on other 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

?>

Share this post


Link to post
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
Sign in to follow this  

×

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.