PHP-Seleção de campos com SQL SERVER
Boa tarde, preciso fazer a seleção dos dados de uma tabela que está no banco do sql server. A consulta aparentemente é realizada mas não é plotado o gráfico na tela. Alguém poderia auxiliar ?
<?php ob_start(); session_start(); include("conexao/conectasql.php"); ?> <!DOCTYPE html> <html lang="pt-br"> <head> <meta charset="utf-8"> <title>Login - Fundação Educacional de Lavras - Tecnologia da Informação</title> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <meta name="apple-mobile-web-app-capable" content="yes"> <link href="css/bootstrap.min.css" rel="stylesheet" type="text/css" /> <link href="css/bootstrap-responsive.min.css" rel="stylesheet" type="text/css" /> <link href="css/font-awesome.css" rel="stylesheet"> <link href="http://fonts.googleapis.com/css?family=Open+Sans:400italic,600italic,400,600" rel="stylesheet"> <link href="css/style.css" rel="stylesheet" type="text/css"> <link href="css/pages/signin.css" rel="stylesheet" type="text/css"> <link rel="shortcut icon" href="media/images/favicon.ico" type="image/x-icon"/> <link rel="apple-touch-icon" sizes="57x57" href="media/images/apple-icon-57x57.png"> <link rel="apple-touch-icon" sizes="60x60" href="media/images/apple-icon-60x60.png"> <link rel="apple-touch-icon" sizes="72x72" href="media/images/apple-icon-72x72.png"> <link rel="apple-touch-icon" sizes="76x76" href="media/images/apple-icon-76x76.png"> <link rel="apple-touch-icon" sizes="114x114" href="media/images/apple-icon-114x114.png"> <link rel="apple-touch-icon" sizes="120x120" href="media/images/apple-icon-120x120.png"> <link rel="apple-touch-icon" sizes="144x144" href="media/images/apple-icon-144x144.png"> <link rel="apple-touch-icon" sizes="152x152" href="media/images/apple-icon-152x152.png"> <link rel="apple-touch-icon" sizes="180x180" href="media/images/apple-icon-180x180.png"> <link rel="icon" type="image/png" sizes="192x192" href="media/images/android-icon-192x192.png"> <link rel="icon" type="image/png" sizes="32x32" href="media/images/favicon-32x32.png"> <link rel="icon" type="image/png" sizes="96x96" href="media/images/favicon-96x96.png"> <link rel="icon" type="image/png" sizes="16x16" href="media/images/favicon-16x16.png"> <link rel="manifest" href="/manifest.json"> <meta name="msapplication-TileColor" content="#ffffff"> <meta name="msapplication-TileImage" content="/ms-icon-144x144.png"> <meta name="theme-color" content="#ffffff" </head> <body> <div class="navbar" style="background-color:#177CAA"> <div class="navbar" style="background-color:#177CAA"> <div class="container" style="background-color:#177CAA"> <a class="brand" href="index.php"> Fundação Educacional de Lavras - Tecnologia da Informação </a> </div> <!-- /container --> </div> <!-- /navbar-inner --> </div> <!-- /navbar --> <div class="account-container"> <?php if(isset($_GET['acao'])){ if(!isset($_POST['logar'])){ $acao = $_GET['acao']; if($acao=='negado'){ echo '<div class="alert alert-danger"> <button type="button" class="close" data-dismiss="alert">×</button> <strong>Erro:</strong> Número de matrícula não existe ou está errado. </div>'; } } } if(isset($_POST['logar'])){ //RECUPERAR DADOS $usuario = trim(strip_tags($_POST['usuario'])); //SELECIONAR BANCO DE DADOS $select = " SELECT HAB.ABERTURA,HAB.FECHAMENTO,DATEDIFF(DAY,HAB.ABERTURA,HAB.FECHAMENTO) FROM HATENDIMENTOBASE HAB INNER JOIN HATENDENTE (NOLOCK) ON (HATENDENTE.CODCOLIGADA=HAB.CODCOLIGADA AND HATENDENTE.CODATENDENTE=HAB.CODATENDENTE) INNER JOIN PPESSOA ON HATENDENTE.CODPESSOA=PPESSOA.CODIGO INNER JOIN PFUNC ON PFUNC.CODPESSOA=PPESSOA.CODIGO WHERE CODSTATUS IN ('O','R','F','U') AND PFUNC.CHAPA=:usuario "; try{ $result = $conexaosql->prepare($select); $result->bindParam(':usuario',$usuario, PDO::PARAM_STR); $result->execute(); $contar = $result->fetch(); if($contar>0){ $usuario = $_POST['usuario']; $_SESSION['sessaousuario'] = $usuario; $getit = mysql_query( $select, $result ); while($row = mysql_fetch_array($getit, MYSQL_ASSOC)) { $dep="{$row['totaldep']}"; $man="{$row['totalmania']}"; $anx="{$row['totalanxiety']}"; $example_data = array( array('a',$dep,$man,$anx) ); //Include the code //Define the object $graph = new PHPlot(); $graph->SetPlotType("bars"); $legend = array(); $legend[] = "Depression"; $legend[] = "Mania"; $legend[] = "Anxiety"; $graph->SetDataValues($example_data); $graph->SetLegendPixels(1,5,false); $graph->SetLegend($legend); //Draw it $graph->DrawGraph(); header(""); }} else{ echo '<div class="alert alert-danger"> <button type="button" class="close" data-dismiss="alert">×</button> <strong>Erro:</strong>Não foi possível gerar gráfico </div>'; } }catch(PDOException $e) { echo $e; } } ?>
Chromusmaster
Curtidas 0
Melhor post
Wilson Neto
18/01/2017
Tenta isso:
E remove estas duas linhas:
Tem um erro no seu SQL também
Dois "AND"
Se estiver usando PDO, verifique esse link: PDO Query
O mssql_query() já faz a execução do SQL que você passou, logo após você está tentando passar o "resultado" para fazer uma execução via "execute". Acho que há uma mistura ai.
Notei que o seu parametro não está sendo atribuido a lugar algum (diferente o primeiro código que postou), então poderia remover as duas linhas que mencionei e testar a execução.
Se for usar PDO, use só o PDO, caso for usar mssq_* tente usar somente ele também. Tenta padronizar, fica mais fácil de compreender.
Use o var_dump() aqui:
e posta o resultado.
while($ver = mssql_fetch_array($select)) { $data[] = array($ver['ABERTURA'],$ver['FECHAMENTO'],$ver['Diferenca']); }
E remove estas duas linhas:
$result = $conexaosql->execute($select); $result->bindParam(':usuario',$usuario, PDO::PARAM_STR);
Tem um erro no seu SQL também
Dois "AND"
WHERE CODSTATUS IN ('O','R','F','U') AND AND PFUNC.CHAPA='000837'
Se estiver usando PDO, verifique esse link: PDO Query
O mssql_query() já faz a execução do SQL que você passou, logo após você está tentando passar o "resultado" para fazer uma execução via "execute". Acho que há uma mistura ai.
Notei que o seu parametro não está sendo atribuido a lugar algum (diferente o primeiro código que postou), então poderia remover as duas linhas que mencionei e testar a execução.
Se for usar PDO, use só o PDO, caso for usar mssq_* tente usar somente ele também. Tenta padronizar, fica mais fácil de compreender.
Use o var_dump() aqui:
$ver = mssql_fetch_array($result) var_dump($ver);
e posta o resultado.
GOSTEI 1
Mais Respostas
Wilson Neto
17/01/2017
Não conheço phPlot, mas vi que ele gera uma imagem e nesse trecho:
Você está pegando o resultado e já pedindo para "desenhar" o gráfico a cada iteração. Experimenta passar os dados já prontos e mandar ele desenhar o gráfico ao final.
Não obteve nenhum erro em tela? Se der um var_dump() ou print_r() nos pontos que você espera resultado, o que você recebe?
while($row = mysql_fetch_array($getit, MYSQL_ASSOC)) { $dep="{$row['totaldep']}"; $man="{$row['totalmania']}"; $anx="{$row['totalanxiety']}"; $example_data = array( array('a',$dep,$man,$anx) ); //Include the code //Define the object $graph = new PHPlot(); $graph->SetPlotType("bars"); $legend = array(); $legend[] = "Depression"; $legend[] = "Mania"; $legend[] = "Anxiety"; $graph->SetDataValues($example_data); $graph->SetLegendPixels(1,5,false); $graph->SetLegend($legend); //Draw it $graph->DrawGraph(); header(""); }
Você está pegando o resultado e já pedindo para "desenhar" o gráfico a cada iteração. Experimenta passar os dados já prontos e mandar ele desenhar o gráfico ao final.
Não obteve nenhum erro em tela? Se der um var_dump() ou print_r() nos pontos que você espera resultado, o que você recebe?
GOSTEI 0
Wilson Neto
17/01/2017
Experimenta listar os dados sem criar o gráfico, veja se está tudo ok. Depois passe para o gráfico e veja se obtem algum erro. :)
GOSTEI 0
Chromusmaster
17/01/2017
Poderia auxiliar em como fazer para ele passar os "dados prontos" ? Sou bem iniciante em php e estou fazendo essa parte de sql e gráficos para aprender.
GOSTEI 0
Wilson Neto
17/01/2017
Poderia auxiliar em como fazer para ele passar os "dados prontos" ? Sou bem iniciante em php e estou fazendo essa parte de sql e gráficos para aprender.
Tente isso aqui:
while($row = mysql_fetch_array($getit, MYSQL_ASSOC)) { $dep="{$row['totaldep']}"; $man="{$row['totalmania']}"; $anx="{$row['totalanxiety']}"; $example_data[] = array( array('a',$dep,$man,$anx) ); #montando o array $example_data } #fim do while //Include the code //Define the object $graph = new PHPlot(); $graph->SetPlotType("bars"); $legend = array(); $legend[] = "Depression"; $legend[] = "Mania"; $legend[] = "Anxiety"; $graph->SetDataValues($example_data); $graph->SetLegendPixels(1,5,false); $graph->SetLegend($legend); //Draw it $graph->DrawGraph(); header("");
Inicializa o $example_data antes. $example_data = array();
GOSTEI 0
Chromusmaster
17/01/2017
Continuou a não plotar. Talvez possa ser algum erro na busca dos campos não ?
GOSTEI 0
Wilson Neto
17/01/2017
Continuou a não plotar. Talvez possa ser algum erro na busca dos campos não ?
Veja se essa linha está habilitada no seu php.ini
display_errors = On
Outra, se você der um print_r($example_data); o que você vê?
(Só uma curiosidade, está trabalhando com dois bancos? Eu acho que para trabalhar com sql server a função correta seria mssql_* e não mysql_* .
Mas se seus erros não estiverem habilitados, vamos ficar no escuro...rs.
GOSTEI 0
Chromusmaster
17/01/2017
Está habilitada.
GOSTEI 0
Chromusmaster
17/01/2017
Continuou a não plotar. Talvez possa ser algum erro na busca dos campos não ?
Veja se essa linha está habilitada no seu php.ini
display_errors = On
Outra, se você der um print_r($example_data); o que você vê?
(Só uma curiosidade, está trabalhando com dois bancos? Eu acho que para trabalhar com sql server a função correta seria mssql_* e não mysql_* .
Mas se seus erros não estiverem habilitados, vamos ficar no escuro...rs.
Precisei refazer o php inteiro. Ficou agora assim
<?php ob_start(); session_start(); include("conexao/conectasql.php"); ?> <?php if(isset($_POST['logar'])){ //RECUPERAR DADOS $usuario = trim(strip_tags($_POST['usuario'])); //SELECIONAR BANCO DE DADOS $select = mssql_query(" SELECT HAB.ABERTURA,HAB.FECHAMENTO,DATEDIFF(DAY,HAB.ABERTURA,HAB.FECHAMENTO) AS [Diferenca] FROM HATENDIMENTOBASE HAB INNER JOIN HATENDENTE (NOLOCK) ON (HATENDENTE.CODCOLIGADA=HAB.CODCOLIGADA AND HATENDENTE.CODATENDENTE=HAB.CODATENDENTE) INNER JOIN PPESSOA ON HATENDENTE.CODPESSOA=PPESSOA.CODIGO INNER JOIN PFUNC ON PFUNC.CODPESSOA=PPESSOA.CODIGO WHERE CODSTATUS IN ('O','R','F','U') AND AND PFUNC.CHAPA='000837' "); try{ $result = $conexaosql->execute($select); $result->bindParam(':usuario',$usuario, PDO::PARAM_STR); $data = array(); while($ver = mssql_fetch_array($result)) { $data[] = array($ver['ABERTURA'],$ver['FECHAMENTO'],$ver['Diferenca']); } $graph = new PHPlot(600,200); $graph->SetDataValues($data); $graph->SetPlotType("pie"); $graph->SetImageBorderType('plain'); $graph->SetDataType('text-data-single'); $graph->DrawGraph(); header(""); }catch(PDOException $e) { echo $e; } } ?>
Pelo que notei ele não faz a consulta e por isso não apresenta erros no php. A conexão ele faz, mas apenas a consulta é que não esta realizando. Alguma sugestão ?
GOSTEI 0
Chromusmaster
17/01/2017
Tenta isso:
E remove estas duas linhas:
Tem um erro no seu SQL também
Dois "AND"
Se estiver usando PDO, verifique esse link: PDO Query
O mssql_query() já faz a execução do SQL que você passou, logo após você está tentando passar o "resultado" para fazer uma execução via "execute". Acho que há uma mistura ai.
Notei que o seu parametro não está sendo atribuido a lugar algum (diferente o primeiro código que postou), então poderia remover as duas linhas que mencionei e testar a execução.
Se for usar PDO, use só o PDO, caso for usar mssq_* tente usar somente ele também. Tenta padronizar, fica mais fácil de compreender.
Use o var_dump() aqui:
e posta o resultado.
while($ver = mssql_fetch_array($select)) { $data[] = array($ver['ABERTURA'],$ver['FECHAMENTO'],$ver['Diferenca']); }
E remove estas duas linhas:
$result = $conexaosql->execute($select); $result->bindParam(':usuario',$usuario, PDO::PARAM_STR);
Tem um erro no seu SQL também
Dois "AND"
WHERE CODSTATUS IN ('O','R','F','U') AND AND PFUNC.CHAPA='000837'
Se estiver usando PDO, verifique esse link: PDO Query
O mssql_query() já faz a execução do SQL que você passou, logo após você está tentando passar o "resultado" para fazer uma execução via "execute". Acho que há uma mistura ai.
Notei que o seu parametro não está sendo atribuido a lugar algum (diferente o primeiro código que postou), então poderia remover as duas linhas que mencionei e testar a execução.
Se for usar PDO, use só o PDO, caso for usar mssq_* tente usar somente ele também. Tenta padronizar, fica mais fácil de compreender.
Use o var_dump() aqui:
$ver = mssql_fetch_array($result) var_dump($ver);
e posta o resultado.
Bom vamos lá. As suas modificações judaram bastante. Agora porém aparece oseguinte erro "Cannot use object of type PDOStatement as array". E mais uma vez precise fazer modificações no código, porém dessa vez foram menores a smudanças e já estamos bem encaminhados:
<?php ob_start(); session_start(); include("conexao/conectasql.php"); require_once("phplot.php") ?> <?php //SELECIONAR BANCO DE DADOS $select =(" SELECT HAB.ABERTURA,HAB.FECHAMENTO,DATEDIFF(DAY,HAB.ABERTURA,HAB.FECHAMENTO) AS [Diferenca] FROM HATENDIMENTOBASE HAB (NOLOCK) INNER JOIN HATENDENTE (NOLOCK) ON (HATENDENTE.CODCOLIGADA=HAB.CODCOLIGADA AND HATENDENTE.CODATENDENTE=HAB.CODATENDENTE) INNER JOIN PPESSOA ON HATENDENTE.CODPESSOA=PPESSOA.CODIGO INNER JOIN PFUNC ON PFUNC.CODPESSOA=PPESSOA.CODIGO WHERE CODSTATUS IN ('O','R','F','U') AND PFUNC.CHAPA='000837' "); try{ $data = array(); while($result = $conexaosql->query($select)) { $data[] = array($result['ABERTURA'],$result['FECHAMENTO'],$result['Diferenca']); } $graph = new PHPlot(600,200); $graph->SetDataValues($data); $graph->SetPlotType("pie"); $graph->SetImageBorderType('plain'); $graph->SetDataType('text-data-single'); $graph->DrawGraph(); header(""); }catch(PDOException $e) { echo $e; } ?>
GOSTEI 0
Wilson Neto
17/01/2017
tente acessar assim:
caso de algum erro de offset ou de acesso:
Caso fique na duvida do retorno, imprima o $result usando print_r() ou var_dump().
$result->abertura, $result->fechamento, $result->diferenca
caso de algum erro de offset ou de acesso:
$result[0]->abertura, $result[0]->fechamento, $result[0]->diferenca
Caso fique na duvida do retorno, imprima o $result usando print_r() ou var_dump().
GOSTEI 0
Chromusmaster
17/01/2017
Agora surgiu várias mensagem repetidas de erro (utilizando
e uma de time limit exception
$result[0]->abertura, $result[0]->fechamento, $result[0]->diferenca OU $result->abertura, $result->fechamento, $result->diferenca
Undefined property: PDOStatement::$diferenca
Undefined property: PDOStatement::$fechamento
Undefined property: PDOStatement::$abertura
Undefined property: PDOStatement::$fechamento
Undefined property: PDOStatement::$abertura
e uma de time limit exception
Fatal error: Maximum execution time of 360 seconds exceeded
GOSTEI 0
Wilson Neto
17/01/2017
Se possível, posta o valor retornado no seu $result, por favor.
Tira ele de dentro do while e posta o valor.
Tira ele de dentro do while e posta o valor.
GOSTEI 0
Chromusmaster
17/01/2017
O resultado usando o var_dump foi:
[diretorio do site]\\\\grafico2.php:31:string '''' (length=0)
GOSTEI 0
Wilson Neto
17/01/2017
Se esse foi o resultado, então não está fazendo a consulta.
Esse $result tinha que ser um object. Verifique a sua conexão com o banco.
Esse $result tinha que ser um object. Verifique a sua conexão com o banco.
GOSTEI 0
Chromusmaster
17/01/2017
A conexão está correta, apenas modifiquei aqui:
E o var_dump me trouxe todos os dados
foreach ($conexaosql->query($select) as $row) { print $row[''ABERTURA''] . "\\\\t"; print $row[''FECHAMENTO''] . "\\\\t"; print $row[''Diferenca''] . "\\\\n"; }
E o var_dump me trouxe todos os dados
2012-09-10 10:29:50.000 2012-09-10 11:05:25.000 2012-09-11 08:48:08.000 2012-09-11 09:52:17.000 2012-09-11 13:02:18.000 2012-09-12 08:10:35.000 2012-09-13 09:27:54.000 2012-09-13 13:18:55.000 2012-09-14 09:00:27.000 2012-09-14 13:07:54.000 2012-09-17 07:06:38.000 2012-09-17 07:43:56.000 2012-09-17 08:09:15.000 2012-09-17 13:14:57.000 2012-09-18 14:24:12.000 2012-09-18 16:19:10.000 2012-09-19 14:10:53.000 2012-09-19 14:14:37.000 2012-09-20 07:19:20.000 2012-09-20 09:15:40.000 2012-09-20 14:32:34.000 2012-09-20 14:44:50.000 2012-09-20 14:52:39.000 2012-09-20 15:32:57.000 2012-09-21 07:38:37.000 2012-09-21 15:24:41.000 2012-09-24 07:28:23.000 2012-09-24 08:40:38.000 2012-09-24 09:05:29.000 2012-09-24 10:37:30.000 2012-09-25 16:32:15.000 2012-09-26 07:10:14.000 2012-09-26 13:37:06.000 2012-09-27 13:01:48.000 2012-10-01 07:12:07.000 2012-10-01 07:42:46.000 2012-10-01 09:22:07.000 2012-10-01 13:58:30.000 2012-10-02 08:58:05.000 2012-10-04 07:38:47.000 2012-10-04 16:27:38.000 2012-10-15 08:19:42.000 2012-10-15 14:13:26.000 2012-10-16 07:08:48.000 2012-10-16 09:22:48.000 2012-10-17 13:44:04.000 2012-10-17 15:15:02.000 2012-10-18 08:02:44.000 2012-10-18 13:30:20.000 2012-10-18 13:35:04.000 2012-10-18 15:41:38.000 2012-10-19 07:18:02.000 2012-10-19 07:21:25.000 2012-10-19 10:15:17.000 2012-10-22 07:36:05.000 2012-10-23 16:54:55.000 2012-10-23 17:00:54.000 2012-10-23 17:04:25.000 2012-10-25 07:29:45.000 2012-10-25 15:15:05.000
GOSTEI 0
Wilson Neto
17/01/2017
Certo. Então agora não vai ser mais necessário mexer com essa parte, agora é só passar os dados para gerar o gráfico.
(Nossa, nem ajudei nesse ponto. haha!)
(Nossa, nem ajudei nesse ponto. haha!)
GOSTEI 1
Chromusmaster
17/01/2017
Obrigado, correu tudo certo! Como finalizar o post ?
GOSTEI 0