Jump to content

[Resolvido] Página só para a categoria=x e id=x


Recommended Posts

Posted

Boas noites, tenho aqui uma duvida, quero criar uma página onde possa definir a categoria = x e o id = x, e obter resultados sobre os mesmos...

Gostava de saber se tenho de fazer if, else. ou por aí.

Obrigado....

Posted

eu consigo passa-los, mas queria determinar que se a variavel tipo = $tipo for igual á $row['nomedocampo'] então mostra isto, senão se for igual a $row['nomedocampo2'] mostra aquilo..

é mais ou menos isto, mas fiz com o else if e deu erro no else.

Posted

eu consigo passa-los, mas queria determinar que se a variavel tipo = $tipo for igual á $row['nomedocampo'] então mostra isto, senão se for igual a $row['nomedocampo2'] mostra aquilo..

é mais ou menos isto, mas fiz com o else if e deu erro no else.

Hmm... presumo que estejas a falar de informação numa base de dados...

Se tiveres a informação organizada por categorias na base de dados, basta fazeres tipo "SELECT ... WHERE categoria_id =" . (int) $_GET['categoria_id']. (Por questões de segurança claro que tens que filtrar esses parametros de $_GET).

Desta forma não precisas de IF..ELSE porque a condição ocorre na base de dados com o WHERE.

Posted

agora não estou no meu pc, portanto lá pelas 14h00 venho aqui e posto o q tenho.

Mas é que ontem dava-me erro no elseif.. nao entendi bem o q se passava.

tinha algo deste género, e por cima do if tinha uma query com UNION e INNER JOIN, não está aqui tudo.. mas fica uma parte de que me lembro.



if ($tipo == $row['electricidade_empresa']) {

echo $row['electricidade_empresa'];
echo $row['electricidade'];

}
elseif ($tipo == $row['combustiveis_marca']) {

echo $row['combustiveis_marca'];
echo $row['combustiveis'];

}

peço desculpa por não ter o codigo todo.

Posted

aqui está o codigo total.


<?php
include "config.php";
session_start();
$id = (int)$_GET['id'];
$tipo = $_GET['tipo'];

$query = mysql_query("SELECT tabaco.id, tabaco.tabaco, tabaco.id_utilizador,
tabaco_select.tabaco_marca FROM tabaco
INNER JOIN tabaco_select ON
tabaco.id_referente_tabaco = tabaco_select.id WHERE tabaco.id='$id'
UNION
SELECT quilometros.id, quilometros.quilometros_, quilometros.id_utilizador,
quilometros_select.quilometros FROM quilometros
INNER JOIN quilometros_select ON
quilometros.id_referente_quilometros = quilometros_select.id WHERE quilometros.id='$id'
UNION
SELECT bebidas.id, bebidas.bebidas_, bebidas.id_utilizador,
bebidas_select.bebidas FROM bebidas
INNER JOIN bebidas_select ON
bebidas.id_referente_bebidas = bebidas_select.id WHERE bebidas.id = '$id'
UNION
SELECT electricidade.id, electricidade.electricidade, electricidade.id_utilizador,
electricidade_select.electricidade_empresa FROM electricidade
INNER JOIN electricidade_select ON
electricidade.id_referente_electricidade = electricidade_select.id WHERE electricidade.id = '$id'
UNION
SELECT combustiveis.id, combustiveis.combustiveis, combustiveis.id_utilizador,
combustiveis_select.combustiveis_marca FROM combustiveis
INNER JOIN combustiveis_select ON
combustiveis.id_referente_combustiveis = combustiveis_select.id WHERE combustiveis.id = '$id'");

while ($row = mysql_fetch_array($query)) { 

if ($tipo == $row['electricidade_empresa']) {

echo $row['electricidade_empresa'];
echo $row['electricidade'];

}
elseif ($tipo == $row['combustiveis_marca']) {

echo $row['combustiveis_marca'];
echo $row['combustiveis'];

}
elseif ($tipo == $row['quilometros']) {

echo $row['quilometros'];
echo $row['quilometros_'];

}
elseif ($tipo == $row['bebidas']) {

echo $row['bebidas'];
echo $row['bebidas_'];

}
elseif ($tipo == $row['tabaco_marca']) {

echo $row['tabaco_marca'];
echo $row['tabaco'];

}
}

?>

estes são os erros:

Notice: Undefined index: electricidade_empresa in C:\wamp\www\site contabilidade\editar_consumido_mim.php on line 34

Notice: Undefined index: combustiveis_marca in C:\wamp\www\site contabilidade\editar_consumido_mim.php on line 40

Notice: Undefined index: quilometros in C:\wamp\www\site contabilidade\editar_consumido_mim.php on line 46

Notice: Undefined index: bebidas in C:\wamp\www\site contabilidade\editar_consumido_mim.php on line 52

Notice: Undefined index: electricidade_empresa in C:\wamp\www\site contabilidade\editar_consumido_mim.php on line 34

Notice: Undefined index: combustiveis_marca in C:\wamp\www\site contabilidade\editar_consumido_mim.php on line 40

Notice: Undefined index: quilometros in C:\wamp\www\site contabilidade\editar_consumido_mim.php on line 46

Notice: Undefined index: bebidas in C:\wamp\www\site contabilidade\editar_consumido_mim.php on line 52

Notice: Undefined index: electricidade_empresa in C:\wamp\www\site contabilidade\editar_consumido_mim.php on line 34

Notice: Undefined index: combustiveis_marca in C:\wamp\www\site contabilidade\editar_consumido_mim.php on line 40

Notice: Undefined index: quilometros in C:\wamp\www\site contabilidade\editar_consumido_mim.php on line 46

Notice: Undefined index: bebidas in C:\wamp\www\site contabilidade\editar_consumido_mim.php on line 52

Notice: Undefined index: electricidade_empresa in C:\wamp\www\site contabilidade\editar_consumido_mim.php on line 34

Notice: Undefined index: combustiveis_marca in C:\wamp\www\site contabilidade\editar_consumido_mim.php on line 40

Notice: Undefined index: quilometros in C:\wamp\www\site contabilidade\editar_consumido_mim.php on line 46

Notice: Undefined index: bebidas in C:\wamp\www\site contabilidade\editar_consumido_mim.php on line 52

Notice: Undefined index: electricidade_empresa in C:\wamp\www\site contabilidade\editar_consumido_mim.php on line 34

Notice: Undefined index: combustiveis_marca in C:\wamp\www\site contabilidade\editar_consumido_mim.php on line 40

Notice: Undefined index: quilometros in C:\wamp\www\site contabilidade\editar_consumido_mim.php on line 46

Notice: Undefined index: bebidas in C:\wamp\www\site contabilidade\editar_consumido_mim.php on line 52

Posted (edited)

o nome dos campos retornados são os nomes da primeira tabela da "union".

se pretendes distinguir os registos do local em que vieram necessitas de adicionar um campo com essa informação. este adicionar não é adicionar na tabela mas sim na query.

exemplo para a primeira union:

SELECT tabaco.id,
      tabaco.tabaco,
      tabaco.id_utilizador,
      tabaco_select.tabaco_marca,
      "tabaco" as tipo
 FROM tabaco INNER JOIN tabaco_select ON tabaco.id_referente_tabaco = tabaco_select.id WHERE tabaco.id='1'
UNION
SELECT quilometros.id,
      quilometros.quilometros_,
      quilometros.id_utilizador,
      quilometros_select.quilometros,
      "quilometros" as tipo
 FROM quilometros INNER JOIN quilometros_select ON quilometros.id_referente_quilometros = quilometros_select.id WHERE quilometros.id='1'

desta forma, o resultado da query contem um campo com o nome tipo com a informação que pretendes filtrar

PS : e sim, essa base de dados parece muito amanhada

Edited by HappyHippyHippo
IRC : sim, é algo que ainda existe >> #p@p
Posted

Descreve, o que queres mostrar ao utilizador? Quais os tipos que o utilizador pode escolher?

Se queres mostrar ao utilizador um tipo de cada vez, não precisas dessa query... escolhes (select) apenas informação relacionada com aquele tipo.

Posted (edited)
<?php
include "config.php";
session_start();
$id = (int)$_GET['id'];
$tipo = $_GET['tipo'];

$query = mysql_query("SELECT tabaco.id,
   tabaco.tabaco,
   tabaco.id_utilizador,
   tabaco_select.tabaco_marca,
   'tabaco' AS tipo
 FROM tabaco INNER JOIN tabaco_select ON tabaco.id_referente_tabaco = tabaco_select.id WHERE tabaco.id='1'
 UNION
 SELECT quilometros.id,
   quilometros.quilometros_,
   quilometros.id_utilizador,
   quilometros_select.quilometros,
   'quilometros' AS tipo
 FROM quilometros INNER JOIN quilometros_select ON quilometros.id_referente_quilometros = quilometros_select.id WHERE quilometros.id='1'
 UNION
SELECT bebidas.id, bebidas.bebidas_, bebidas.id_utilizador,
bebidas_select.bebidas
'bebidas' AS tipo
FROM bebidas
INNER JOIN bebidas_select ON
bebidas.id_referente_bebidas = bebidas_select.id WHERE bebidas.id = '$id'
UNION
SELECT electricidade.id, electricidade.electricidade, electricidade.id_utilizador,
electricidade_select.electricidade_empresa
'electricidade_empresa' AS tipo
FROM electricidade
INNER JOIN electricidade_select ON
electricidade.id_referente_electricidade = electricidade_select.id WHERE electricidade.id = '$id'
UNION
SELECT combustiveis.id, combustiveis.combustiveis, combustiveis.id_utilizador,
combustiveis_select.combustiveis_marca
'combustiveis_marca' AS tipo
FROM combustiveis
INNER JOIN combustiveis_select ON
combustiveis.id_referente_combustiveis = combustiveis_select.id WHERE combustiveis.id = '$id'");

while ($row = mysql_fetch_array($query)) {

if ($tipo == $row['tipo']) {

echo $row['tabaco_marca'] . ' ';
echo $row['tabaco'];
}
else ($tipo == $row['tipo']) {

echo $row['combustiveis_marca'] . ' ';
echo $row['combustiveis'];
}
}
?>

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\wamp\www\site contabilidade\editar_consumido_mim.php on line 42

PS: por exemplo editar_consumido_mim.php?tipo=Camel&id=1 algo assim e só mostrava a marca de tabaco camel e os cigarros usados com id 1.

Edited by joaocasta
Posted (edited)

e que tal meter as virgulas a separar os campos no SQL ???

já percebeste porque formatei o teu SQL de uma forma diferente ? é exactamente para se ver pequenos erros de sintaxe

PS : ok, tenho me abstido de dizer o quando de "error prone" o teu código é e como mal organizado está. mas acho que este ponto está no limite:

if ($tipo == 'tabaco') {
 $sql = "...";
} elseif($tipo == 'coisitas') {
 $sql = "...";
} elseif($tipo == 'traquitanas') {
 $sql = "...";
}

$rs = mysql_query($sql);
//..
Edited by HappyHippyHippo
IRC : sim, é algo que ainda existe >> #p@p
Posted

PS: por exemplo editar_consumido_mim.php?tipo=Camel&id=1 algo assim e só mostrava a marca de tabaco camel e os cigarros usados com id 1.

Então tens consumidores, neste caso utilizadores. E tens recursos consumidos (bebidas, electricidade, tabaco, quilometros, etc...)

E tu queres saber os dados dos recursos consumidos por utilizador?

Posted

Vai dar trabalho... não te vou fazer o desenho mas deixo umas dicas...

Tens pelo menos estas entidades:

  • Consumidor
  • Recurso
  • Tipo de Recurso
  • Marca do Recurso
  • Consumo

Para cada entidade deves ter uma tabela, depois, a tabela consumo relaciona o consumidor com o recurso. É a tabela da relação N para M entre consumidor e recurso.

A tabela Recurso terá uma chave externa "tiporecurso_id" para relacionar com o tipo de recurso; e ainda uma chave externa marcarecurso_id para relacionar com a Marca do Recurso.

É um desenho simples que pode resolver o teu problema.

Com este esquema, para selecionares os consumos de um determinado consumidor, poder fazer:

SELECT
   t2.consumidor,
   t3.recurso
   t4.marca
   t1.valor
FROM consumo t1
LEFT JOIN consumidor t2 ON t2.id = t1.consumidor_id
LEFT JOIN recurso t3 ON t3.id = t1.recurso_id
LEFT JOIN marca t4 ON t4.id = t3.marca_id
WHERE
   t1.consumidor_id = 1

Para selecionares por utilizador e por marca, basta adicionares a condição no WHERE.

SELECT 
   t2.consumidor, 
   t3.recurso
   t4.marca 
   t1.valor
FROM consumo t1
LEFT JOIN consumidor t2 ON t2.id = t1.consumidor_id
LEFT JOIN recurso t3 ON t3.id = t1.recurso_id
LEFT JOIN marca t4 ON t4.id = t3.marca_id
WHERE
   t1.consumidor_id = 1
   and t4.marca = 'Camel'

O campo valor será o que contem o valor consumido. Provavelmente nos consumos podes ter datas que indicam os consumos do utilizador ao longo do tempo.

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
×
×
  • Create New...

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.