capesone Posted April 24, 2015 at 07:15 PM Report Share #581815 Posted April 24, 2015 at 07:15 PM (edited) Boas, Estou a criar neste momento uma função que permite executar as querys atravez de 1 unica funcao, conteudo estou aqui com um pequeno problema, a query executa sem problemas e conforme da erro ou nao, guarda uns booleans e umas mensagens de erro caso for false dentro de um array, que no final da funcao é retornado, e no mesmo array tambem tenho o resulta do da query, ou seja devia guardar a ligação para retornar em conjunto com outras coisas. O codigo nao dá erro nenhum, conteudo tambem nao me mostra o conteudo que eu queria mostrar! page_loader : obtem a pagina aberta, obtem o nome do conteudo que está alocado na base de dados e obtem os resultados class loader{ function page_loader(){ #obtem o nome (do url) da página $cont = loader::page_get(); $page = loader::page_key_for_search($cont); #executa a query para obter os dados da pagina aberta $res_query = db::simple_query("select", "contents", array('url_name' => $page)); if($res_query['final_array'] != null || !empty($res_query['final_array'])){ $res_array = $res_query['final_array']; /** * * QUERO UTILIZAR O RESULTADO DA QUERY AQUI * * **/ while($data = mysqli_fetch_array($res_array)){ echo"<b>Nome:</b>{$data['name']}<br/> <b>Descrição:</b>{$data['desc']}<br/> <b>Tipo:</b>{$data['type']}<br/> <b>Nome url:</b>{$data['url_name']}<br/> <b>conteudo:</b>{$data['content']}<br/> <b>Template:</b>{$data['template']}<br/> <b>Escrito por:</b>{$data['writed_by']}<br/> <b>Escrito em:</b>{$data['writed_time']}<br/> <b>Ultima actualização:</b>{$data['last_update']}<br/>"; } } #Associa os dados da página em conjunto ao template escolhido //... #retorna a pagina ao utilizador //... } } simple_query: Cria e executa a query correctamente, mas nao sei se estará a retornar bem dentro do array class db{ function simple_query($query_type, $table, $fields = null){ #define variaveis a utilizar durante a funcao $con = db::__define(); $result = array(); $query_type = strtoupper($query_type); #constroi a query if($query_type == "SELECT"){ #verifica se existem clausulas de condições if(count($fields)){#se existirem numeros de linhas $where_clauses="WHERE "; foreach($fields as $key => $value){ $a_key = key($fields); $where_clauses.="{$a_key}='{$value}'"; } }else $where_clauses=""; #monta a query final $query = "SELECT * FROM {$table} {$where_clauses}"; }elseif($query_type == "INSERT"){ //.... }else echo "Erro: tipo de query nao foi bem definido"; #executa a query conforme o tipo de query if($query_type == "SELECT"){ if($exec = $con -> query($query)){ if(mysqli_num_rows($exec)){ if($data = mysqli_fetch_array($exec)){ $result['final_array'] = $exec; #aqui está a guardar na posição do array a ligacao establecida com a base de dados $result['fetch_array'] = true; $result['fetch_array_error'] = null; }else{ #define erros $result['fetch_array'] = false; $result['fetch_array_error'] = mysqli_error($con); $result['final_array'] = null; } #existem linhas $result['rows'] = true; $result['rows_error'] = null; }else{ #define erros $result['rows'] = false; $result['rows_error'] = mysqli_error($con); $result['fetch_array'] = false; $result['fetch_array_error'] = mysqli_error($con); $result['final_array'] = null; } #A query foi bem executada $result['executed'] = true; $result['executed_error'] = null; }else{ #define erros $result['executed'] = false; $result['executed_error'] = mysqli_error($con); $result['rows'] = false; $result['rows_error'] = mysqli_error($con); $result['fetch_array'] = false; $result['fetch_array_error'] = mysqli_error($con); $result['final_array'] = null; } } #retorna o resultado return $result; } } Edited April 27, 2015 at 04:22 PM by capesone geshi Link to comment Share on other sites More sharing options...
chbcl Posted April 26, 2015 at 10:46 PM Report Share #581897 Posted April 26, 2015 at 10:46 PM $con = db::__define(); Esta linha não tem nada em falta? Não querias dizer __construct(); ? ###### Esta: $a_key = key($fields); não falta o $ antes de key? ###### esta linha: if($exec = $con -> query($query)){ esse query() vem da variavel que foi declarada como: $con = db::__define(); (primeira coisa que falei) ------------------- Vi isto muito por alto, não li o código todo atentamente, mas penso que uma dessas coisas deve ser o problema developer @ filipealves.net filipealvesbcl [a] gmail.com github.com/filipealvesbcl Link to comment Share on other sites More sharing options...
capesone Posted April 27, 2015 at 12:08 AM Author Report Share #581900 Posted April 27, 2015 at 12:08 AM $con = db::__define(); -- Define a ligacao mysqli a dase de bados(funciona) $a_key = key($fields); -- Nao falta o "$" antes do key(), pois essa funcao do php, permite me obter o nome do index do array($array['nome1'], $array['nome2'], vai retornar "nome1"/"nome2") tambem funciona sem problemas if($exec = $con -> query($query)){ -- sim, o $con é a ligacao a base de dados em mysqli, que faz o retorno da ligacao, equanto que o $exec é o que eu quero colocar dentro do array $result['final_array'] = $exec; function __define(){ #define a ligação com a base de dados $con = new Mysqli(_db_server, _db_user, _db_pass, _db_name); if(mysqli_connect_errno()) die("Erro ao ligar a base de dados"); else return $con; } No entanto estive a pensar e talvez criando um array multidimensional com os resultados possa retornar bem, mas ainda nao tive tempo de aplicar isso este fim de semana! amanha vou tentar isso e depois digo aqui se funcionou ou nao! Link to comment Share on other sites More sharing options...
chbcl Posted April 27, 2015 at 09:33 AM Report Share #581909 Posted April 27, 2015 at 09:33 AM mas nao parecia teres o define a funcionar, por isso é que não estabelecia a ligação! developer @ filipealves.net filipealvesbcl [a] gmail.com github.com/filipealvesbcl Link to comment Share on other sites More sharing options...
capesone Posted April 27, 2015 at 11:51 AM Author Report Share #581920 Posted April 27, 2015 at 11:51 AM Nao, esse codigo funciona todo sem problemas, a nao ser a parte de retornar o $exec para dentro do array $result['final_array'] porque dentro da funcao ao utilizar o while, ele faz-me o fetch sem problema e a minha ideia era se faz fetch, entao passa os dados e o user faz o fetch depois da requesiçao. Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted April 27, 2015 at 12:00 PM Report Share #581921 Posted April 27, 2015 at 12:00 PM depois disto tudo, ainda nem disseste claramente o que querias ... dá um exemplo do resultado esperado pela função. (nem vou comentar a desorganização do código assim como a falta de necessidade de uma função como essa ...) IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
capesone Posted April 27, 2015 at 01:57 PM Author Report Share #581923 Posted April 27, 2015 at 01:57 PM Basicamente essa funcao vai executar todas as querys para base de dados, ou seja em vez de escrever a query em cada funcao, tenho uma so funcao, passo os dados necessários para a query, a funcao executa-a e devolve-me um array que ira conter todos os resultados da query, e se ocurreu algum erro ou nao! Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted April 27, 2015 at 02:29 PM Report Share #581928 Posted April 27, 2015 at 02:29 PM dá um exemplo do resultado esperado pela função. IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
capesone Posted April 27, 2015 at 02:48 PM Author Report Share #581931 Posted April 27, 2015 at 02:48 PM (edited) A funcao retorna o array abaixo exemplificado: #constroi, executa a query e guarda o retornado na variavel $res_query $res_query = db::simple_query("tipo_query", "db_nome_tabela", array('tbl_nome_coluna' => 'tbl_valor_coluna')); A funcao simple query deve retornar um array deste estilo #se query executou $result['executed'] = true/false; $result['executed_error'] = null/mysqli_error($con); #Se query Retornou linhas $result['rows'] = true/false; $result['rows_error'] = null/mysqli_error($con); #Se o fetch array functionou $result['fetch_array'] = true/false; $result['fetch_array_error'] = null/mysqli_error($con); $result['final_array'] = $exec #( if($exec = $con -> query(...){ } ) O utilizador usa o array retornado com todos os dados que foram enviados no array! #dados para o utilizador validar a query $res_query['executed'] $res_query['executed_error'] $res_query['rows'] $res_query['rows_error'] $res_query['fetch_array'] $res_query['fetch_array_error'] #utiliza a ligacao feita na query dentro de mysqli_fetch_array $result['final_array'] exe: while($dados = mysqli_fetch_array($result['final_array'])){ $dados['id']; $dados['name'] $dados['content'] .... } Quando a funcao retornar esse array o utilizador verifica se nao ocurreram erros, ($result['executed'],$result['rows'] ,$result['fetch_array']) se nao ocurreram, o utilizador faz um while ao $result['final_array'] com a funcao mysqli_fetch_array() do php e utiliza os dados dentro do while! espero ter-me conseguido exprimir! Edited April 27, 2015 at 04:00 PM by capesone Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted April 27, 2015 at 03:37 PM Report Share #581936 Posted April 27, 2015 at 03:37 PM $result['final_array'] = $exec ( if($exec = $con -> query(...){ } ) isto não faz sentido ... ps : não vou estár a ler o código colocado uns posts atrás porque a indentação torna tudo completamente ilegível. IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
capesone Posted April 27, 2015 at 03:59 PM Author Report Share #581939 Posted April 27, 2015 at 03:59 PM (edited) esse if dentros dos parentes era so para dizer qual era o exec, esquecime de por em comentario aqui no post Ja organizei o espacamento no 1º post Edited April 27, 2015 at 04:02 PM by capesone Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted April 27, 2015 at 04:17 PM Report Share #581942 Posted April 27, 2015 at 04:17 PM O codigo nao dá erro nenhum, conteudo tambem nao me mostra o conteudo que eu queria mostrar! o que é que mostra e o que deveria mostrar ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Solution capesone Posted April 27, 2015 at 04:20 PM Author Solution Report Share #581944 Posted April 27, 2015 at 04:20 PM (edited) o que é que mostra e o que deveria mostrar ? Devia mostrar o resultado final para cada linha da tabela como uma consulta normal, mas ja consegui por a funcionar! Ja consegui Resolver, o if($data = mysqli_fetch_array($exec)), por algum motivo nao me estava a deixar fazer outra fez o fetch da ligacao. O codigo a funcionar para os selects, falta para os outros tipos de querys: Como usar a função $tipoquery = "select, insert, update, etc..."; $tblnome = "Nome da tabela a consultar"; $valores = array('nome coluna_tabela' => 'valor coluna', 'nome coluna_tabela' => 'valor coluna',); $res_query = db::simple_query($tipoquery, $tblnome, array('url_name' => $valores)); if(!$res_query['final_array'] == null) while($data = mysqli_fetch_array($res_query['final_array'])){ echo"<b>Nome:</b>{$data['name']}<br/> <b>Descrição:</b>{$data['desc']}<br/> <b>Tipo:</b>{$data['type']}<br/> <b>Nome url:</b>{$data['url_name']}<br/> <b>conteudo:</b>{$data['content']}<br/> <b>Template:</b>{$data['template']}<br/> <b>Escrito por:</b>{$data['writed_by']}<br/> <b>Escrito em:</b>{$data['writed_time']}<br/> <b>Ultima actualização:</b>{$data['last_update']}<br/>"; } } O codigo da função class db{ function simple_query($query_type, $table, $fields = null){ #define variaveis a utilizar durante a funcao $con = db::__define(); $result = array(); $query_type = strtoupper($query_type); #constroi a query if($query_type == "SELECT"){ #verifica se existem clausulas de condições if(count($fields)){#se existirem numeros de linhas $where_clauses="WHERE "; foreach($fields as $key => $value){ $a_key = key($fields); $where_clauses.="{$a_key}='{$value}'"; } }else $where_clauses=""; #monta a query final $query = "SELECT * FROM {$table} {$where_clauses}"; }elseif($query_type == "INSERT"){ //..Outros tipos de query a construir }else echo "Erro: tipo de query nao foi bem definido"; #executa a query conforme o tipo de query if($query_type == "SELECT"){ if($exec = $con -> query($query)){ if(mysqli_num_rows($exec)){ $result['final_array'] = $exec; $result['fetch_array'] = true; $result['fetch_array_error'] = null; #existem linhas $result['rows'] = true; $result['rows_error'] = null; }else{ #define erros $result['rows'] = false; $result['rows_error'] = mysqli_error($con); $result['fetch_array'] = false; $result['fetch_array_error'] = mysqli_error($con); $result['final_array'] = null; } #A query foi bem executada $result['executed'] = true; $result['executed_error'] = null; }else{ #define erros $result['executed'] = false; $result['executed_error'] = mysqli_error($con); $result['rows'] = false; $result['rows_error'] = mysqli_error($con); $result['fetch_array'] = false; $result['fetch_array_error'] = mysqli_error($con); $result['final_array'] = null; } } #retorna o resultado return $result; } } Neste caso retorna o conteudo que pedi a base de dados, que é um post de blog, ou uma página Nome:Nome do post Descriçãoo: Descrição do post Tipo:1 Nome url: nome-unico-url conteudo:bla bla bla bla bla Template:blog_post_nosidebar Escrito por:1 Escrito em:1429901223 Ultima actualização:0 Agora é so carregar o template devolver o html final ao utilizador Edited April 27, 2015 at 04:27 PM by capesone Link to comment Share on other sites More sharing options...
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