PHP-Seleção de campos com SQL SERVER

17/01/2017

0

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

Chromusmaster

Responder

Post mais votado

18/01/2017

Tenta isso:

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.

Wilson Neto

Wilson Neto
Responder

Mais Posts

17/01/2017

Wilson Neto

Não conheço phPlot, mas vi que ele gera uma imagem e nesse trecho:

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?
Responder

17/01/2017

Wilson Neto

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. :)
Responder

17/01/2017

Chromusmaster

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.
Responder

17/01/2017

Wilson Neto

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();
Responder

17/01/2017

Chromusmaster

Continuou a não plotar. Talvez possa ser algum erro na busca dos campos não ?
Responder

17/01/2017

Wilson Neto

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.
Responder

18/01/2017

Chromusmaster

Está habilitada.
Responder

18/01/2017

Chromusmaster

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 ?
Responder

18/01/2017

Chromusmaster

Tenta isso:

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;
 }
 

 ?>
Responder

18/01/2017

Wilson Neto

tente acessar assim:

$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().
Responder

18/01/2017

Chromusmaster

Agora surgiu várias mensagem repetidas de erro (utilizando
$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

e uma de time limit exception
Fatal error: Maximum execution time of 360 seconds exceeded
Responder

18/01/2017

Wilson Neto

Se possível, posta o valor retornado no seu $result, por favor.
Tira ele de dentro do while e posta o valor.
Responder

18/01/2017

Chromusmaster

O resultado usando o var_dump foi:
[diretorio do site]\\\\grafico2.php:31:string '''' (length=0)
Responder

18/01/2017

Wilson Neto

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.
Responder

18/01/2017

Chromusmaster

A conexão está correta, apenas modifiquei aqui:
 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
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar