joaocasta Posted October 3, 2012 at 09:38 PM Report #477643 Posted October 3, 2012 at 09:38 PM 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....
taviroquai Posted October 3, 2012 at 09:55 PM Report #477647 Posted October 3, 2012 at 09:55 PM O que te impede de passar esses parametros na URL e obter no $_GET?
joaocasta Posted October 4, 2012 at 08:27 AM Author Report #477684 Posted October 4, 2012 at 08:27 AM 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.
taviroquai Posted October 4, 2012 at 08:41 AM Report #477685 Posted October 4, 2012 at 08:41 AM 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.
joaocasta Posted October 4, 2012 at 09:21 AM Author Report #477693 Posted October 4, 2012 at 09:21 AM mas nao tenho organizado assim na base de dados, por isso é q pensei no elseif, e else. e if.
MASNathan Posted October 4, 2012 at 09:25 AM Report #477695 Posted October 4, 2012 at 09:25 AM que código já tens?
joaocasta Posted October 4, 2012 at 09:31 AM Author Report #477697 Posted October 4, 2012 at 09:31 AM 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.
yoda Posted October 4, 2012 at 10:32 AM Report #477714 Posted October 4, 2012 at 10:32 AM Explica bem a tua questão e deixa código relevante, não vamos conseguir resolver o problema sem isso. before you post, what have you tried? - http://filipematias.info sense, purpose, direction
joaocasta Posted October 4, 2012 at 12:33 PM Author Report #477734 Posted October 4, 2012 at 12:33 PM 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
taviroquai Posted October 4, 2012 at 12:51 PM Report #477737 Posted October 4, 2012 at 12:51 PM Ui! 😛 Acho que o problema começa no desenho da base de dados...
joaocasta Posted October 4, 2012 at 12:57 PM Author Report #477738 Posted October 4, 2012 at 12:57 PM mas tudo o q escrevi no codigo eu tenho na base de dados.
HappyHippyHippo Posted October 4, 2012 at 01:47 PM Report #477750 Posted October 4, 2012 at 01:47 PM (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 October 4, 2012 at 01:48 PM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
joaocasta Posted October 4, 2012 at 01:52 PM Author Report #477752 Posted October 4, 2012 at 01:52 PM e esse campo de nome tipo vai ser colocado aqui? elseif ($tipo == $row['tipo']) { ?
HappyHippyHippo Posted October 4, 2012 at 01:54 PM Report #477755 Posted October 4, 2012 at 01:54 PM e esse campo de nome tipo vai ser colocado aqui? elseif ($tipo == $row['tipo']) { ? será o campo usado para filtrar os registos, pela tabela de origem. foi isso que depreendi que pretendias fazer ao tentar interpretar o teu código. IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
taviroquai Posted October 4, 2012 at 01:57 PM Report #477757 Posted October 4, 2012 at 01:57 PM 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.
joaocasta Posted October 4, 2012 at 01:58 PM Author Report #477758 Posted October 4, 2012 at 01:58 PM (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 October 4, 2012 at 02:01 PM by joaocasta
HappyHippyHippo Posted October 4, 2012 at 02:05 PM Report #477759 Posted October 4, 2012 at 02:05 PM (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 October 4, 2012 at 02:08 PM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
taviroquai Posted October 4, 2012 at 02:09 PM Report #477760 Posted October 4, 2012 at 02:09 PM 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?
joaocasta Posted October 4, 2012 at 02:10 PM Author Report #477761 Posted October 4, 2012 at 02:10 PM (edited) sim por utilizador e por tipo/categoria/marca.... podem ajudar? HappyHippo tentei com isso nem apareceu nada. Edited October 4, 2012 at 02:41 PM by joaocasta
taviroquai Posted October 4, 2012 at 07:39 PM Report #477796 Posted October 4, 2012 at 07:39 PM 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.
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now