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

bioshock

Detectar categoria{resolvido}

Mensagens Recomendadas

bioshock

Viva!

Estou a tentar criar páginas dinâmicas, com isto tenho o seguinte código:

Página index.php

<?php
include ("connection.inc");
$query2 = mysql_query("SELECT nome FROM categorias")or die("error:" .mysql_error());
while($rows = mysql_fetch_array($query2)) {
        // Mostra os detalhas nas linhas
        $nome = $rows['nome'];
       echo "<li><a href=\"".$rows["nome"].".php"."\" id=\"link_".$rows["id"]."\">".$rows["nome"]."</a></li>";
fopen($rows['nome'].".php", "a");
$myFile = $rows['nome'].".php";
$fh = fopen($myFile, 'w') or die("can't open file");
fwrite($fh, '<?php include("insertPages.php")?>');
fclose($fh);
}
?>

Página InsertPages.php (insere os parâmetros definidos por mim para cada página)

<?php
include ("connection.inc");
   $query2 = mysql_query("SELECT nome FROM categorias")or die("error:" .mysql_error());        
           while($rows2 = mysql_fetch_array($query2)) {
        // Mostra os detalhas nas linhas
        $id = $rows2['id'];
        $nome2 = $rows2['nome'];
        $categoria = $rows2['categoria'];
       echo "<li><a href=\"".$rows2["nome"].".php"."\" id=\"link_".$rows2["id"]."\">".$rows2["nome"]."</a></li>";
          fopen($rows2['nome'].".php", "a");
        }

$query = mysql_query("SELECT * FROM produtos WHERE categoria = '" . $nome2 . "'")or die("Error: " .mysql_error());
while($rows = mysql_fetch_array($query)){
$id = $rows['id'];
    $nome = $rows['nome'];
$preco = $rows['preco'];
    $promocao = $rows['promocao'];
$descricao = $rows['descricao'];
    $imagem = $rows['imagem'];
$categoria = $rows['categoria'];

// cria as linhas
echo "<tr><td><b>Nome:</b></td> $nome<br></th>";
    echo "<input type='image' name='imageField' id='imageField' src='images/thumbs/$imagem'>";
echo "<b>Descrição:</b> $descricao<br>";
    echo "<b>Preço:</b> $preco €<br>";
echo "<b>Promoção:</b> $promocao %<br><br><br></tr>";
}
?>

Nesta página eu preciso que na linha onde diz:

$query = mysql_query("SELECT * FROM produtos WHERE categoria = '" . $nome2 . "'")

ele detecte qual é a categoria que eu cliquei na página Index.php e me faça um list dos produtos dessa categoria.

Alguma ideia?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

Hum, estás-te a referir a algo do género?

index:

<?php
session_start();
session_register($rows['nome']);
?>

insertPages:

$query = mysql_query("SELECT * FROM produtos WHERE categoria = '" . $_SESSION[$rows['nome']] . "'")

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
KiNgPiTo

Sim mas eu cá não usava o session_register (está deprecated) mas sim $_SESSION['nome'] = "categoria"

Algo tipo:

index:

<?php

session_start();

$_SESSION['nome'] = "categoria";

?>

insertPages:

session_start(); // Nao te esqueças de iniciar a sessão aqui também senão não lê a variavel de sessão 'nome'

$query = mysql_query("SELECT * FROM produtos WHERE categoria = '" . $_SESSION['nome'] . "'")

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

Eu tentei e não deu. Mas porque meteste $_session.... = "Categoria" ?? (Devo por aqui o $nome (?))

index:

<?php

session_start();

$_SESSION['nome'] = "categoria";

?>

inserpages:

<?php

session_start();

$_SESSION['nome'] = "categoria";

?>

+++

$query = mysql_query("SELECT * FROM produtos WHERE categoria = '" . $_SESSION['nome'] . "'")

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
KiNgPiTo

o = "categoria" era só para dizeres onde ias inserir a categora... obviamente deverás substituir pela categoria em questão que pelo que me parece é $rows["nome"]. Logo no index metes:

session_start();

$_SESSION['nome'] = $rows["nome"];

e na insertpages tiras a atribuição do valor, pois só queres ler o que lá está e que vem do index...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

Fiz como disseste:

index:

session_start();

$_SESSION['nome'] = $rows["nome"];

insertpages:

<?php

session_start();

?>

+++

$query = mysql_query("SELECT * FROM produtos WHERE categoria = '" . $_SESSION['nome'] . "'")

E não mostra..mostra sempre os cereais, esteja eu em que página estiver.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
KiNgPiTo

$_SESSION['nome'] = $nome; isto metes só depois da atribuição a variavel, ou seja no final do script...

e mete um echo antes disto para confirmar se estás a atribuir o valor que queres que se não estiveres o problema está na recepção da categoria da BD...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

Tens razão, o problema está na recepção da categoria.

Fiz o echo, e ele só está a buscar a última categoria adicionada.

Só possuo este simples código para listar as categorias:

include ("connection.inc");
$query2 = mysql_query("SELECT * FROM categorias")or die("error:" .mysql_error());
while($rows = mysql_fetch_array($query2)) {
        // Mostra os detalhas nas linhas
	$id = $rows['id'];
        $nome = $rows['nome'];
	       echo "<li><a href=\"".$rows["nome"].".php"."\" id=\"link_".$rows["id"]."\">".$rows["nome"]."</a></li>";
fopen($rows['nome'].".php", "a");
$myFile = $rows['nome'].".php";
$fh = fopen($myFile, 'w') or die("can't open file");
fwrite($fh, '<?php include("insertPages.php")?>');
fclose($fh);
}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
KiNgPiTo

onde tens $myFile não é a categoria que queres usar? se for atribuis o $_SESSION['nome'] = $myFile; e metes isto no final do script...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

Não, o myFile é uma variavel que criei para receber o valor do nome + extensão, para criar as páginas sempre que hajam categorias.

A categoria que quero usar é $rows['nome'] ou $nome e continua a não dar.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

index:

<?php
session_start();
?>
<?php
include ("connection.inc");
$query2 = mysql_query("SELECT * FROM categorias")or die("error:" .mysql_error());
while($rows = mysql_fetch_array($query2)) {
        // Mostra os detalhas nas linhas
	$id = $rows['id'];
        $nome = $rows['nome'];
	       echo "<li><a href=\"".$rows['nome'].".php"."\" id=\"link_".$rows['id']."\">".$rows['nome']."</a></li>";
fopen($rows['nome'].".php", "a");
$myFile = $rows['nome'].".php";
$fh = fopen($myFile, 'w') or die("can't open file");
fwrite($fh, '<?php include("insertPages.php")?>');
fclose($fh);
$_SESSION['nome'] = $nome;
}
?>

insertPage:

<?php 
session_start();
?>
<?php
include ("connection.inc");
   $query2 = mysql_query("SELECT nome,id FROM categorias")or die("error:" .mysql_error());        
           while($rows = mysql_fetch_array($query2)) {
        // Mostra os detalhas nas linhas
       $nome = $rows['nome'];
       echo "<li><a href=\"".$rows["nome"].".php"."\" id=\"link_".$rows["id"]."\">".$rows["nome"]."</a></li>";
          fopen($rows['nome'].".php", "a");
        }

$query = mysql_query("SELECT * FROM produtos WHERE categoria = '" . $_SESSION['nome'] . "'")or die("Error: " .mysql_error());
while($rows = mysql_fetch_array($query)){
$id = $rows['id'];
    $nome = $rows['nome'];
$preco = $rows['preco'];
    $promocao = $rows['promocao'];
$descricao = $rows['descricao'];
    $imagem = $rows['imagem'];
$categoria = $rows['categoria'];

// cria as linhas
echo "<tr><td><b>Nome:</b></td> $nome2<br></th>";
    echo "<input type='image' name='imageField' id='imageField' src='images/thumbs/$imagem'>";
echo "<b>Descrição:</b> $descricao<br>";
    echo "<b>Preço:</b> $preco €<br>";
echo "<b>Promoção:</b> $promocao %<br><br><br></tr>";
}
?>

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

Se eu fizer:

<?php

session_start();

echo $_SESSION['nome'];

?>

Ele só detecta a ultima categoria, e o problema deve advir daqui.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
KiNgPiTo

Ele só detecta a ultima categoria pois estás a atribuir o valor da categoria em consequência do ciclo onde por sua vês estás a passar para o row['nome'].. ou seja, no final do ciclo o row['nome'] fica com o valor da ultima categoria e por sua vez passas esse ultimo valor para a sessão...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
KiNgPiTo

Podes simplesmente utilizar o stringquery para passar a categoria...

Onde inseres o link adicionas a categoria:

echo "<li><a href=\"".$rows['nome'].".php?d=".$rows['nome']."\" id=\"link_".$rows['id']."\">".$rows['nome']."</a></li>";

e depois no pesquisar:

$query = mysql_query("SELECT * FROM produtos WHERE categoria = '" . $_GET['d'] . "'")or die("Error: " .mysql_error());

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
helt

Cá pra mim usavas é um input (<input type="hidden" name="categoria" value="$categoria"/>) que é para isso que eles servem.. apanhas o valor da mesma maneira que os outros, por $_POST.

E não metas variáveis vindas de user input directamente nos querys, para saber mais pesquisa por SQL injection.


––––•(-• [ ђєlt ] •-)•––––

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.