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  
bioshock

Detectar categoria{resolvido}

Recommended Posts

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?

Share this post


Link to post
Share on other sites
KiNgPiTo

Passas a categoria através de um hidden ou uma session do index e lês no InsertPages...

Share this post


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

Share this post


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

Share this post


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

Share this post


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

Share this post


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

Share this post


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

Share this post


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

Share this post


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

Share this post


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

Share this post


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

Share this post


Link to post
Share on other sites
bioshock

Se eu fizer:

<?php

session_start();

echo $_SESSION['nome'];

?>

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

Share this post


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

Share this post


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

Share this post


Link to post
Share on other 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 ] •-)•––––

Share this post


Link to post
Share on other sites
bioshock

Kingpito, obrigado funcionou perfeitamente!

Helt, não testei a tua maneira, mas obrigado na mesma!

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.