Guest User

phpfeiao

a guest
Jan 14th, 2016
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 43.44 KB | None | 0 0
  1. <?php
  2. #######################################################################################################################
  3. # Programa....: protviasphp03.php
  4. # Descricao...: Manuten??o Geral dos dados de rotas_viarias
  5. # Autor.......: Jo?o Maur?cio Hyp?lito
  6. # Objetivo....: Montar: P?gina de Abertura e as fun??es ICAEL (Inc/Con/Alt/Exc/Listar) dos dados da tabela.
  7. #               As a??es s?o controladas pela var $acao e os trechos recursivos escolhidos na var $passo
  8. # Cria??o....: 2009-03-27
  9. # Atualiza??o: Diego Augusto Gonçalves de Paula
  10. # Atualiza??o: 2013-06-14
  11. #######################################################################################################################
  12. # Algoritmo do programa
  13. # Define a fun??o consulta_rotas_viarias
  14. # Carrega o toolskit.
  15. # define valores para as vari?veis $acao, $passo e $salto
  16. # $acao vai definir as fun??es ICAEL que ser? carregado pelo programa categoriphp02.php
  17. # $passo define que trecho de cada acao ser? executado
  18. # $salto define quantos bot?es foram clicados em cada passo de cada fun??o e permite montar os bot?es de volta para a tela de abertura.
  19. # define valor para $cordefundo (Se $acao==Listagem e $passo==3 assume WHITE sen?o NAVAJOWHITE).
  20. # Inicia o SWITCH CASE com base no valor de $acao. S?o seis valores (todos :
  21. # 'Abertura' - atribuido a cada primeira vez que se acessa o programa e
  22. # 'Incluir' / 'Consultar' / 'Alterar' / 'Excluir' e 'Listagem' (todos atribuido pelo programa de menu (superior) categoriphp02.php)
  23. # Para $acao='Abertura'
  24. #    Monta uma tela com mensagem de orienta??o ao usu?rio. Cada linha deve ser seguida de uma linha em branco.
  25. #    A mensagem deve ser alinhada um TAB para a direita.
  26. #    Mensagem:
  27. #    Painel de Abertura (em vermelho alinhado a esquerda)
  28. #    Este ? o sistema de manuten??o da tabela departamentos de rotas_viarias para Loca??o
  29. #    Use o menu acima para escolher a a??o que deseja efetuar!
  30. #    Fa?a bom uso dos dados!
  31. #    Depois desta mensagem deve ser emitida a mensagem da fun??o bottomline().
  32. # Para $acao=='Incluir'
  33. #    Inicia a vari?vel $prg com 'categoriphp03-I' e $texto com 'Incluir' e carrega a fun??o paginainicio($cordefundo,$texto,$prg);
  34. #    Inicia SWITCH com valor da vari?vel $passo.
  35. #        Para $passo=='1'
  36. #             Monta o form para entrada dos valores a incluir
  37. #             $passo='2' hidden
  38. #        Para $passo=='2'
  39. #             monta o comando de INSERT e executa a fun??o que trata a transa??o
  40. #    FIM_DO_CASE_$PASSO
  41. # Para $acao=='Consultar'
  42. #    Inicia a vari?vel $prg com 'categoriphp03-C' e $texto com 'Consultar' e carrega a fun??o paginainicio($cordefundo,$texto,$prg);
  43. #    Inicia SWITCH com valor da vari?vel $passo.
  44. #        Para $passo=='1'
  45. #             monta a tela de detalhe com os dados do registro que foi procurado
  46. #    FIM_DO_CASE_$PASSO
  47. # Para $acao=='Alterar'
  48. #    Inicia a vari?vel $prg com 'categoriphp03-A' e $texto com 'Alterar' e carrega a fun??o paginainicio($cordefundo,$texto,$prg);
  49. #    Inicia SWITCH com valor da vari?vel $passo.
  50. #        Para $passo=='1'
  51. #             Monta o form para entrada dos valores a alterar
  52. #             $passo='2' hidden
  53. #        Para $passo=='2'
  54. #             monta o comando de UPDATE e executa a fun??o que trata a transa??o
  55. #    FIM_DO_CASE_$PASSO
  56. # Para $acao=='Excluir'
  57. #    Inicia a vari?vel $prg com 'categoriphp03-E' e $texto com 'Excluir' e carrega a fun??o paginainicio($cordefundo,$texto,$prg);
  58. #    Inicia SWITCH com valor da vari?vel $passo.
  59. #        Para $passo=='1'
  60. #             monta a tela de detalhe com os dados do registro que foi procurado e um form para confirmar a exclus?o com $passo=2 hidden
  61. #        Para $passo=='2'
  62. #             monta o comando de DELETE e executa a fun??o que trata a transa??o
  63. #    FIM_DO_CASE_$PASSO
  64. # Para $acao=='Listagem'
  65. #    Inicia a vari?vel $prg com 'categoriphp03-L' e $texto com 'Listagem' e carrega a fun??o paginainicio($cordefundo,$texto,$prg);
  66. #    Inicia SWITCH com valor da vari?vel $passo.
  67. #        Para $passo=='1'
  68. #             monta um form com escolha da ordena??o dos dados
  69. #             $passo='2' hidden
  70. #        Para $passo=='2' ou $passo=='3'
  71. #             monta o relat?rio lendo os dados com a ordena??o escolhida no form anterior
  72. #             Se $passo==2
  73. #                entao
  74. #                    monta um form para escolha de vers?o a imprimir abrindo a emissao em uma nova aba do navegador.
  75. #                    $passo='3' hidden (escolhendo emitir para impressao a cor de fundo fica WHITE)
  76. #
  77. #    FIM_DO_CASE_$PASSO
  78. # FIM_DO_CASE_$ACAO
  79. #######################################################################################################################
  80. function consulta_rotas_viarias($PK)
  81. {
  82.     ##########################################################################################################
  83.    # Executando a conex?o com o Banco de Dados. O Status da Conex?o deve ficar em uma vari?vel que ser? usada
  84.    # na avalia??o do erro do comando. Portanto, criam-se as vari?veis $db e $banco
  85.         # Atribuicao de: - Nome de servidor, Nome do usuario, Senha do usuario e Base de dados
  86.         # Conex?o com o SGBD e determina??o da Base de Dados.
  87.        $SERVERNAME = 'localhost';
  88.     $USERNAME = 'postgres';
  89.     $SENHA = 'postgres';
  90.     $BASENAME = 'adm_exerc_sql';
  91.     $con_string = "host=".$SERVERNAME." port=5432 dbname=".$BASENAME." user=".$USERNAME." password=".$SENHA." connect_timeout=200";
  92.         $db = pg_connect($con_string) or die("Problemas ao escolher a base de dados");
  93.          #pg_query('SET character_set_connection=utf8');
  94.         #pg_query('SET character_set_client=utf8');
  95.         #pg_query('SET character_set_results=utf8');
  96.    # Termina aqui o trecho que estabelece e conex?o com o Banco de Dados.
  97.    # Se trocar o pg pelo PostgreSQL ALTERE ESTE TRECHO DO PROGRAMA
  98.    ##########################################################################################################
  99.  # Executando o comando de leitura do registro com a PK escolhido e a seguir pegando o valor do campo tx_nome.
  100.  $L1 = pg_fetch_array( pg_query( "SELECT * FROM rotas_viarias WHERE rotas_viarias.id_rota='$PK'") );
  101.   $tx_nomeOrigem = pg_result(pg_query("SELECT tx_nome FROM cidades WHERE id_cidade='$L1[id_cidade_origem]'"), 0, 'tx_nome');
  102.   $tx_nomeDestino = pg_result(pg_query("SELECT tx_nome FROM cidades WHERE id_cidade='$L1[id_cidade_destino]'"), 0, 'tx_nome');
  103.  
  104.  
  105.  
  106.   $dtcad=explode("-",$L1['dt_cadastro']);
  107.   # Montando a tabela com os dados da Consulta
  108.  printf("<table border=0>\n");
  109.   printf("<tr><td>C&oacute;digo:</td>                   <td>$L1[id_rota]</td></tr>\n");
  110.   printf("<tr><td>Nome da Rota:</td>                    <td>$L1[tx_nome_rota]</td></tr>\n");
  111.   printf("<tr><td>Descriçao do Periodo:</td>            <td>$L1[tx_descr_periodo]</td></tr>\n");
  112.   printf("<tr><td>Cidade Origem:</td>                   <td>$tx_nomeOrigem</td></tr>\n");
  113.  
  114.   printf("<tr><td>Cidade Destino:</td>                   <td>$tx_nomeDestino</td></tr>\n");
  115.  
  116.   printf("<tr><td>Cadastrado em:</td>                   <td>$dtcad[2]/$dtcad[1]/$dtcad[0]</td></tr>\n");
  117.   printf(" </table> \n");
  118. }
  119. # Carregando o kit de ferramentas  
  120. include("../../fncs/toolskit.php");
  121. $acao=(isset($_POST['acao'])? trim($_POST['acao']):'Abertura'); // $acao recebe $_POST['acao'] (se houver), sen?o 'Abertura'
  122. $passo=(isset($_POST['passo']) ? $_POST['passo'] : '1');  // $passo recebe $_POST['passo'] (se houver), sen?o 1
  123. $salto=(isset($_POST['salto'])? $_POST['salto']+1:'1');   // $salto recebe $_POST['salto']+1 (se houver), sen?o 1
  124. # printf("Acao: $acao<br>Passo: $passo<br>Salto: $salto<br>");
  125.  
  126.  
  127. $SERVERNAME = 'localhost';
  128. $USERNAME = 'postgres';
  129. $SENHA = 'postgres';
  130. $BASENAME = 'adm_exerc_sql';
  131. $con_string = "host=".$SERVERNAME." port=5432 dbname=".$BASENAME." user=".$USERNAME." password=".$SENHA." connect_timeout=5";
  132.  
  133.  
  134.  
  135. $cordefundo = ($acao=='Listagem' AND $passo==3) ? "WHITE" : "NAVAJOWHITE" ;
  136. # SWITCH CASE com a variavel $acao determinando o bloco (AICAEL) que ser? executado
  137. SWITCH (TRUE)
  138. { # 1 - Grande Seletor de Blocos de execu??o de comandos
  139.  #####################################################################################################################
  140.  case ($acao=='Abertura'):
  141.   { # 1.1 - Abertura
  142.    $texto="Abertura"; // Este ser? o texto que aparecer? no Topo da p?gina.
  143.     $prg="protviasphp03-Ab";
  144.     # J? est? dispon?vel o montador de p?gina inicial (inicpagina($cordefundo,$texto)) recebendo dois argumentos.
  145.    # Inicio da p?gina
  146.    paginainicio($cordefundo,$texto,$prg);
  147.     printf("Este &eacute; o sistema de manuten&ccedil;&atilde;o da tabela rotas_viarias<br><br>\n");
  148.     printf("Use o menu acima para escolher a a&ccedil;&atilde;o que deseja efetuar!<br><br>\n");
  149.     printf("Fa&ccedil;a bom uso dos dados!<br>\n");
  150.     paginafinal();
  151.     break;
  152.   } # 1.1 - Final Abertura
  153.  #####################################################################################################################
  154.  case ($acao=='Incluir'):
  155.   { # 1.2 - Incluir
  156.    $texto="Incluir"; // Este ser? o texto que aparecer? no Topo da p?gina.
  157.     $prg="protviasphp03-I";
  158.     paginainicio($cordefundo,$texto,$prg);
  159.       ##########################################################################################################
  160.      # Executando a conex?o com o Banco de Dados. O Status da Conex?o deve ficar em uma vari?vel que ser? usada
  161.      # na avalia??o do erro do comando. Portanto, criam-se as vari?veis $db e $banco
  162.           # Atribuicao de: - Nome de servidor, Nome do usuario, Senha do usuario e Base de dados
  163.           # Conex?o com o SGBD e determina??o da Base de Dados.
  164.          $db = pg_connect($con_string) or die("Problemas ao escolher a base de dados");
  165.            #$banco=pg_select_db('projetosql',$db) or die ("Problemas ao escolher a base de dados");
  166.           # Acertando a tabela de caracteres que sera usada no pg (e na base escolhida).
  167.           pg_query( $db,"SET NAMES 'utf8'");
  168.            #pg_query('SET character_set_connection=utf8');
  169.           #pg_query('SET character_set_client=utf8');
  170.           #pg_query('SET character_set_results=utf8');
  171.      # Termina aqui o trecho que estabelece e conex?o com o Banco de Dados.
  172.      # Se trocar o pg pelo PostgreSQL ALTERE ESTE TRECHO DO PROGRAMA
  173.      ##########################################################################################################
  174.    # SWITCH CASE com a vari?vel $passo
  175.    SWITCH (TRUE)
  176.     { # 1.2.1
  177.      case ($passo=='1'):
  178.       { # 1.2.1.1
  179.        # Vamos montar o formulario para entrada de dados da categoria de rotas_viarias
  180.        # o formulario faz uma chamada recursiva do programa protviasphp03.php
  181.        # alimenta os valores das variaveis passo=1 e salto=$salto
  182.        printf("<form action='./protviasphp03.php' method='POST'>\n");
  183.         # Passando em modo escondido a variavel $acao para valor $acao
  184.        printf("<input type='hidden' name='acao' value='$acao'>\n");
  185.         # Passando em modo escondido a variavel $passo para valor 2
  186.        printf("<input type='hidden' name='passo' value='2'>\n");
  187.         # Passando em modo escondido a variavel $salto para valor de $salto
  188.        printf("<input type='hidden' name='salto' value='$salto'>\n");
  189.         # monta uma tabela com duas colunas e na linhas monta o texto e o campo de input para cada campo da tabela
  190.        printf("<table  border = 0 >\n");
  191.         # O codigo do rotas_viarias (id_rota) sera gerado pelo programa
  192.        printf("<tr><td>Codigo:</td>   <td>Ser&aacute; gerado pelo sistema</td></tr>\n");
  193.         # id_rota ser? escolhido na caixa de sele??o montada a seguir
  194.     #   $cmd_sql=pg_query("SELECT * FROM rotas_viarias ORDER BY tx_nome_rota");
  195.      #  printf("<tr><td>rotas_viarias</td><td>\n<select name=funcionario>\n");
  196.     #   while ( $linha=pg_fetch_array($cmd_sql) )
  197.     #   { #
  198.      #    printf("<option value='$linha[id_rota]'>$linha[id_rota] - $linha[tx_nome_rota]</option>\n");
  199.     #   } #
  200.    #    printf("</select>\n</td></tr>\n");
  201.        
  202.          # id_funcao ser? escolhido na caixa de selecaoo montada a seguir
  203.        #$cmd_sql=pg_query("SELECT id_funcao, tx_nome_funcao FROM funcoes ORDER BY tx_nome_funcao");
  204.        #printf("<tr><td>Funcao do Funcionario</td><td>\n<select name=id_funcao>\n");
  205.        #while ( $linhafunc=pg_fetch_array($cmd_sql) )
  206.        #{ #
  207.         # printf("<option value='$linhafunc[id_funcao]'>$linhafunc[id_funcao] - $linhafunc[tx_nome_funcao]</option>\n");
  208.        #} #
  209.        #printf("</select>\n</td></tr>\n");
  210.          # id_nivel_educacao ser? escolhido na caixa de sele??o montada a seguir
  211.        #$cmd_sql=pg_query("SELECT id_nivel_educacao, tx_nome_comum FROM niveis_de_educacao ORDER BY tx_nome_comum");
  212.        #printf("<tr><td>Nivel Educa??o</td><td>\n<select name=id_nivel_educacao>\n");
  213.        #while ( $linhanivel=pg_fetch_array($cmd_sql) )
  214.        #{ #
  215.        #  printf("<option value='$linhanivel[id_nivel_educacao]'>$linhanivel[id_nivel_educacao] - $linhanivel[tx_nome_comum]</option>\n");
  216.        #} #
  217.        #printf("</select>\n</td></tr>\n");
  218.        # campo tx_nome_rota deve ter tamanho de 60 caracteres e comprimento maximo de 250          
  219.        printf("<tr><td>Nome da Rota:</td><td><input type='text' name='tx_nomeRota' size=60 maxlength=60></td></tr>\n");
  220.         # campo tx_descr_periodo deve ter tamanho de 250 caracteres e comprimento maximo de 300
  221.        printf("<tr><td>Descricao:</td><td><input type='text' name='tx_descr_periodoVar' size=60 maxlength=250></td></tr>\n");
  222.         # campo tx_nome deve ter tamanho de 250 caracteres e comprimento maximo de 250
  223.        
  224.         # id_cidade sera escolhido na caixa de selecao montada a seguir
  225.        $cmd_sql=pg_query("SELECT id_cidade, tx_nome FROM cidades ORDER BY tx_nome");
  226.         printf("<tr><td>Cidade Origem</td><td>\n<select name=id_cidadeOrigem>\n");
  227.         while ( $linhacidade=pg_fetch_array($cmd_sql) )
  228.         { #
  229.          printf("<option value='$linhacidade[id_cidade]'>$linhacidade[id_cidade] - $linhacidade[tx_nome]</option>\n");
  230.         } #
  231.        printf("</select>\n</td></tr>\n");
  232.        
  233.         # id_cidade sera escolhido na caixa de selecao montada a seguir
  234.        $cmd_sql=pg_query("SELECT id_cidade, tx_nome FROM cidades ORDER BY tx_nome");
  235.         printf("<tr><td>Cidade Destino</td><td>\n<select name=id_cidadeDestino>\n");
  236.         while ( $linhacidade=pg_fetch_array($cmd_sql) )
  237.         { #
  238.          printf("<option value='$linhacidade[id_cidade]'>$linhacidade[id_cidade] - $linhacidade[tx_nome]</option>\n");
  239.         } #
  240.        printf("</select>\n</td></tr>\n");
  241.        
  242.    
  243.         printf("<tr><td>Data Contratacao:</td><td><input type='text' name='dtdiacont' size=2 maxlength=2>/
  244.                                              <input type='text' name='dtmescont' size=2 maxlength=2>/
  245.                                              <input type='text' name='dtanocont' size=4 maxlength=4></td></tr>\n");
  246.                                                  
  247.         printf("</table>\n");
  248.         # montar o bot?o de conclus?o da INCLUS?O
  249.        printf("<input type='submit' value='Incluir'>");
  250.         # montar o bot?o de voltar UMA p?gina
  251.        printf("<input type='button' value='< P&aacute;gina' onclick='history.go(-1)'>");
  252.         # montar o bot?o de voltar para p?gina de ABERTURA
  253.        printf("<input type='button' value='< Painel de Abertura' onclick='history.go(-$salto)'>");
  254.         # os bot?es de "limpar" (RESET dos campos do form)
  255.        printf("<input type='reset' value='Limpar'>");
  256.         printf("</form>\n");
  257.         # terminar o case com valor do passo = 1
  258.        break;
  259.       } # 1.2.1.1
  260.      case ($passo=='2'):
  261.       { # 1.2.1.2
  262.        # Vamos atualizar a tabela com os dados que foram digitados
  263.        # Vamos chamar a Fun??o de Tratamento de Transa??o com o comando INSERT no quarto parametro da fun??o
  264.        $dt_contratacao=$_POST['dtanocont'].'-'.$_POST['dtmescont'].'-'.$_POST['dtdiacont'];
  265.         $cmd = "INSERT INTO rotas_viarias (
  266.                                 id_rota,
  267.                                 tx_nome_rota,
  268.                                 tx_descr_periodo,
  269.                                 id_cidade_origem,
  270.                                 id_cidade_destino,
  271.                                 dt_cadastro
  272.                             ) VALUES ('999999',
  273.                                
  274.                                              '$_POST[tx_nomeRota]',
  275.                                              '$_POST[tx_descr_periodoVar]',
  276.                                              '$_POST[id_cidadeOrigem]',
  277.                                              '$_POST[id_cidadeDestino]',
  278.                                              '$dt_contratacao')";
  279.                         $textoini = "Incluindo Registro...";
  280.                         $textofim = "Inclu&iacute;do";
  281.                         $textoope = "Inclus&atilde;o";
  282.                         printf("$textoini<br>\n");
  283.        
  284.        
  285.        
  286.        
  287.        
  288.        
  289.      
  290.         ###############################################################################################################
  291.        # Colocando o valor 999999 no lugar da PK pode-se, quando se executar a transa??o, controlar o incremento do
  292.        # valor do campo. ? importante que a pesquisa do maior valor aconte?a 'dentro' da transa??o.
  293.        #
  294.        # O comando a seguir era a chamada da Fun??o que trata a transa??o
  295.        ###############################################################################################################
  296.        # Aqui eu vou colocar o trecho de tratamento da Transa??o
  297.             # As pr?ximas vari?veis s?o usadas nos textos de acompanhamento da transa??o.
  298.             $textoini="Incluindo Registro...";
  299.              $textofim="Inclu&iacute;do";
  300.              $textoope="Inclus&atilde;o";
  301.              # exibindo a vari?vel $texto
  302.             printf("$textoini<br>\n");
  303.              ##########################################################################################################
  304.             # Iniciando o la?o que vai controlar as tentativas de executar a transa??o.
  305.             # Se a Transa??o receber um DEADLOCK ela deve ser executada novamente.
  306.             $tentativa=1;
  307.              while ( $tentativa == 1 )
  308.              { # 1.1 - O la?o se repete enquanto a vari?vel de controle $tentativa valer 1 (TRUE)
  309.               # Iniciando a transa??o.
  310.               $query=pg_query("START TRANSACTION");
  311.                # printf("Comando 249: $cmd<br>\n"); # Mostrando o comando para ver o que est? sendo processado.
  312.               $pos = strpos($cmd,"999999");
  313.                # Se a opera??o for de INCLUS?O , temos que pegar o m?ximo valor da PK e somar 1
  314.               # Este trecho pode ser retirado caso se adote na Base de Dados os campos AUTOINCREMENT para as PK.
  315.               if ( $pos )
  316.                { # 1.1.2 - Desvio para tratamento de inclusao
  317.                 # Vamos Pegar o ultimo valor do codigo cadastrado e somar uma unidade
  318.                 # Esta sequencia deve ser realizada DENTRO da Transacao!!
  319.                 $max="SELECT max(id_rota) as CodMax FROM rotas_viarias";
  320.                  # printf("Comando 258: $max<br>\n"); # Mostrando o comando para ver o que est? sendo processado.
  321.                 $ultcod = pg_query($max);
  322.                  # Em $cp colocamos o maximo valor do campo PK da tabela
  323.                 $cp = ( pg_num_rows($ultcod) ==0 ) ? "0" : (pg_result($ultcod, 0, "CodMax"));
  324.                  # soma 1 ao codigo
  325.                 $PK=$cp + 1;
  326.                } # 1.1.2 - Fim
  327.               # Este pr?ximo comando tem efeito para a opera??o de inclus?o, na escrita do comando o ANALISTA deve colocar a
  328.               # sequencia de 999999 (seis noves) no lugar do valor da PK da tabela. O comando str_replace vai trocar o valor
  329.               # informado em $cmd pelo valor determinado no segmento de c?digo acima (que determinou o pr?ximo valor de PK).
  330.               $cmd=str_replace("999999",$PK,$cmd);
  331.                # A variavel $cmd tem o comando que deve ser executado no pg (e ter seu resultado monitorado na aplica??o).
  332.               # Executando o comando
  333.               # printf("Comando 271: $cmd<br>\n"); # Mostrando o comando para ver o que est? sendo processado.
  334.               $result=pg_query($cmd);
  335.                # Aqui pode-se trocar o comando para pg_query caso seja o SGBD PostgreSQL.
  336.               # O Pr?ximo SWITCH trata as situa??es de erro. A fun??o pg_errno($db) retorna o n?mero do erro do pg.
  337.               switch (TRUE)
  338.                { # 1.1.3 - Avalia??o da situa??o de erro (se existir).
  339.                 case pg_errormessage($db) == 1213 :
  340.                  { # 1.1.3.1 - Erro de DeadLock - Cancelar e Reiniciar a transacao
  341.                   $query=pg_query("ROLLBACK");
  342.                    $tentativa=1;
  343.                    break;
  344.                  } # 1.1.3.1
  345.                 case pg_errormessage($db) > 0 :
  346.                  { # 1.1.3.2 - Erro! N?O por deadlock. AVISAR o usuario. CANCELAR A transacao
  347.                   printf("<b>Erro na tentativa de $textoope!</b><br>\n");
  348.                    $mens=pg_errno($db)." : ".pg_error($db);
  349.                    printf("Mensagem: $mens<br>\n");
  350.                    $query=pg_query("ROLLBACK");
  351.                    $tentativa=0;
  352.                    break;
  353.                  } # 1.1.3.2
  354.                 case pg_errormessage($db) == 0 :
  355.                  { # 1.1.3.3 - Nao tem erro! Concluir a transacao e Avisar o usuario.
  356.                   $query=pg_query("COMMIT");
  357.                    printf("Registro <b>$textofim</b> com sucesso!<br>\n");
  358.                    $tentativa=0;
  359.                    break;
  360.                  } # 1.1.3.3
  361.               } # 1.1.3 - Fim do SWITCH tratando os status da transa??o
  362.             } # 1.1 - Fim do la?o de repeti??o
  363.        ###############################################################################################################
  364.        ###############################################################################################################
  365.        if (pg_errormessage($db)==0 )
  366.         { # Podemos mostrar o registro que foi gravado
  367.          consulta_rotas_viarias($PK);
  368.         }
  369.         # montar o bot?o de voltar para p?gina de ABERTURA
  370.        continuar("protvias");
  371.         break;
  372.       } # 1.2.1.2
  373.    } # 1.2.1
  374.    paginafinal();
  375.     break;
  376.   } # 1.2 - Final Incluir
  377.  #####################################################################################################################
  378.  case ($acao=='Consultar'):
  379.   { # 1.3 - Consultar
  380.    $texto="Consultar"; // Este ser? o texto que aparecer? no Topo da p?gina.
  381.     $prg="protviasphp03-C";
  382.     paginainicio($cordefundo,$texto,$prg);
  383.     # Chamando a fun??o que monta a tela de consulta
  384.    $PK=$_POST['id_rota'];
  385.     consulta_rotas_viarias($PK);
  386.     # montar o bot?o de voltar para p?gina de ABERTURA
  387.    printf("<input type='button' value='< Painel de Abertura' onclick='history.go(-$salto)'>");
  388.     paginafinal();
  389.     break;
  390.   } # 1.3 - Final Consultar
  391.  #####################################################################################################################
  392.  case ($acao=='Alterar'):
  393.   { # 1.4 - Alterar
  394.    $texto="Alterar"; // Este ser? o texto que aparecer? no Topo da p?gina.
  395.     $prg="protviasphp03-A";
  396.     paginainicio($cordefundo,$texto,$prg);
  397.          ################################################################################################################
  398.         # O trecho de conex?o ? comum para a parte que vai ler o registro e para a transa??o.
  399.         # Por isso vem ANTES do Switch.
  400.         ###############################
  401.         # Fazendo a conex?o com o banco de dados.
  402.         # Atribuicao de: - Nome de servidor, Nome do usuario, Senha do usuario e Base de dados
  403.         $db = pg_connect($con_string) or die("Problemas ao escolher a base de dados");
  404.          #$banco=pg_select_db('projetosql',$db) or die ("Problemas ao escolher a base de dados");
  405.         # Acertando a tabela de caracteres que sera usada no pg
  406.         pg_query($db,"SET NAMES 'utf8'");
  407.          #pg_query('SET character_set_connection=utf8');
  408.         #pg_query('SET character_set_client=utf8');
  409.         #pg_query('SET character_set_results=utf8');
  410.         # aqui termina o trecho de conex?o com o banco de dados
  411.         ################################################################################################################
  412.    # SWITCH CASE com a vari?vel $passo
  413.    SWITCH (TRUE)
  414.     { # 1.4.1
  415.      case ($passo=='1'):
  416.       { # 1.4.1.1 - Montando a tela com os dados do registro para altera??o
  417.        printf("<form action='./protviasphp03.php' method='POST'>\n");
  418.         printf("<input type='hidden' name='id_rota' value='$_POST[id_rota]'>\n");
  419.         printf("<input type='hidden' name='acao'          value='Alterar'>\n");
  420.         printf("<input type='hidden' name='passo'         value='2'>\n");
  421.         printf("<input type='hidden' name='salto'         value='$salto'>\n");
  422.         $le = pg_fetch_array( pg_query( "SELECT * FROM rotas_viarias WHERE rotas_viarias.id_rota='$_POST[id_rota]'") );
  423.         # Montando a tabela com os dados da Consulta
  424.        $dtcad=explode("-",$le['dt_cadastro']);
  425.         # Montando a tabela com os dados da Consulta
  426.        printf("<table  border = 0 >\n");
  427.         # O codigo do rotas_viarias (id_rota) NAO deve ser Alterado
  428.        printf("<tr><td>Código:</td>   <td>$le[id_rota] (N&atilde;o &eacute; alterado)</td></tr>\n");
  429.         # id_cidade deve ter tamanho de 3 caracteres e comprimento maximo de 3 caracteres
  430.        $cmd_sql=pg_query("SELECT * FROM cidades ORDER BY tx_nome");
  431.         printf("<tr><td>Cidade Origem</td><td>\n<select name=id_cidadeOrigem>\n");
  432.         while ( $linha=pg_fetch_array($cmd_sql) )
  433.         { #
  434.          $selected=( $linha['id_cidade']==$le['id_cidade'] ) ? "selected" : "";
  435.           printf("<option value='$linha[id_cidade]' $selected>$linha[id_cidade] - $linha[tx_nome]</option>\n");
  436.         } #
  437.        
  438.         $cmd_sql=pg_query("SELECT * FROM cidades ORDER BY tx_nome");
  439.         printf("<tr><td>Cidade Destino</td><td>\n<select name=id_cidadeDestino>\n");
  440.         while ( $linha=pg_fetch_array($cmd_sql) )
  441.         { #
  442.          $selected=( $linha['id_cidade']==$le['id_cidade'] ) ? "selected" : "";
  443.           printf("<option value='$linha[id_cidade]' $selected>$linha[id_cidade] - $linha[tx_nome]</option>\n");
  444.         } #
  445.        printf("</select>\n</td></tr>\n");
  446.      
  447.         # campo tx_nome_rota deve ter tamanho de 30 caracteres e comprimento maximo de 30
  448.        printf("<tr><td>Nome Rota:</td><td><input type='text' name='tx_nome_rota' value='$le[tx_nome_rota]' size=30 maxlength=60></td></tr>\n");
  449.         # campo tx_descr_periodo deve ter tamanho de 60 caracteres e comprimento maximo de 250
  450.        printf("<tr><td>Descriçao:</td><td><input type='text' name='tx_descr_periodo' value='$le[tx_descr_periodo]' size=60 maxlength=250></td></tr>\n");
  451.        
  452.          # id_cidade deve ter tamanho de 3 caracteres e comprimento maximo de 3 caracteres
  453.        
  454.        
  455.        
  456.         # dt_cadastro deve ser apresentado em tr?s campos dtdianasc, dtmesnasc, dtanonasc
  457.        printf("<tr><td>Data de Cadastro:</td><td><input type='text' name='dtdiacad' value='$dtcad[2]' size=2 maxlength=2>/<input type='text' name='dtmescad' value='$dtcad[1]' size=2 maxlength=2>/<input type='text' name='dtanocad' value='$dtcad[0]' size=4 maxlength=4></td></tr>\n");
  458.        printf("</table>\n");
  459.         # os bot?es de conclus?o da ALTERA??O
  460.        printf("<input type='submit' value='Alterar'>");
  461.         # montar o bot?o de voltar UMA p?gina
  462.        printf("<input type='button' value='< P&aacute;gina' onclick='history.go(-1)'>");
  463.         # montar o bot?o de voltar para p?gina de ABERTURA
  464.        printf("<input type='button' value='< Painel de Abertura' onclick='history.go(-$salto)'>");
  465.         # os bot?es de "limpar" (RESET dos campos do form)
  466.        printf("<input type='reset' value='Limpar'>");
  467.         printf("</form>\n");
  468.         break;
  469.       } # 1.4.1.1
  470.      case ($passo=='2'):
  471.       { # 1.4.1.2 - Alterando o registro, executa-se a Fun??o de Tratamento de Transa??o com o comando UPDATE no quarto parametro
  472.        $cmd = "UPDATE rotas_viarias
  473.                        SET id_cidade_origem     ='$_POST[id_cidadeOrigem]',
  474.                            id_cidade_destino        ='$_POST[id_cidadeDestino]',
  475.                           tx_nome_rota     ='$_POST[tx_nome_rota]',
  476.                           tx_descr_periodo ='$_POST[tx_descr_periodo]',
  477.                           dt_cadastro      = '$_POST[dtanocad]-$_POST[dtmescad]-$_POST[dtdiacad]'
  478.                       WHERE id_rota='$_POST[id_rota]'";
  479.         ###############################################################################################################
  480.        ###############################################################################################################
  481.             $textoini="Alterando o Registro Escolhido...";
  482.              $textofim="Alterado";
  483.              $textoope="Altera&ccedil;&atilde;o";
  484.              # exibindo a vari?vel $textoini
  485.             printf("$textoini<br>\n");
  486.              # Iniciando o la?o que vai controlar as tentativas de executar a transa??o.
  487.             # Se a Transa??o receber um DEADLOCK ela deve ser re-tentada.
  488.             $tentativa=1;
  489.              while ( $tentativa == 1 )
  490.              { # 1.1 - O la?o se repete enquanto a vari?vel de controle $tentativa valer 1 (TRUE)
  491.               # Iniciando a transa??o.
  492.              $query = pg_query ($db, "begin");
  493.                             //rodar o comando agora
  494.                             pg_send_query($db, $cmd);
  495.                 $result = pg_get_result($db);
  496.                            
  497.  
  498.                # O Pr?ximo SWITCH trata as situa??es de erro. A fun??o pg_errno($db) retorna o n?mero do erro do pg.
  499.               switch (TRUE)
  500.                { # 1.1.3 - Avalia??o da situa??o de erro (se existir).
  501.                 case pg_errormessage($db) == 1213 :
  502.                  { # 1.1.3.1 - Erro de DeadLock - Cancelar e Reiniciar a transacao
  503.                   $query = pg_query($db, "rollback");
  504.                    $tentativa=1;
  505.                    break;
  506.                  } # 1.1.3.1
  507.                 case pg_errormessage($db) > 0 :
  508.                  { # 1.1.3.2 - Erro! N?O por deadlock. AVISAR o usuario. CANCELAR A transacao
  509.                   printf("<b>Erro na tentativa de $textoope!</b><br>\n");
  510.                    $mens=pg_errno($db)." : ".pg_error($db);
  511.                    printf("Mensagem: $mens<br>\n");
  512.                   $query = pg_query($db, "rollback");
  513.                    $tentativa=0;
  514.                    break;
  515.                  } # 1.1.3.2
  516.                 case pg_errormessage($db) == 0 :
  517.                  { # 1.1.3.3 - Nao tem erro! Concluir a transacao e Avisar o usuario.
  518.                  $query = pg_query($db, "commit");
  519.                    printf("Registro <b>$textofim</b> com sucesso!<br>\n");
  520.                    $tentativa=0;
  521.                    break;
  522.                  } # 1.1.3.3
  523.               } # 1.1.3 - Fim do SWITCH tratando os status da transa??o
  524.             } # 1.1 - Fim do la?o de repeti??o
  525.        ###############################################################################################################
  526.        ###############################################################################################################
  527.        continuar("protvias");
  528.         break;
  529.       } # 1.4.1.2
  530.    } # 1.4.1
  531.    paginafinal();
  532.     break;
  533.   } # 1.4 - Final Alterar
  534.  #####################################################################################################################
  535.  case ($acao=='Excluir'):
  536.   { # 1.5 - Excluir
  537.    $texto="Excluir"; // Este ser? o texto que aparecer? no Topo da p?gina.
  538.     $prg="protviasphp03-A";
  539.     paginainicio($cordefundo,$texto,$prg);
  540.          ################################################################################################################
  541.         # O trecho de conex?o ? comum para a parte que vai ler o registro e para a transa??o.
  542.         # Por isso vem ANTES do Switch.
  543.         ###############################
  544.         # Fazendo a conex?o com o banco de dados.
  545.         # Atribuicao de: - Nome de servidor, Nome do usuario, Senha do usuario e Base de dados
  546.        $db = pg_connect($con_string) or die("Problemas ao escolher a base de dados");
  547.          #$banco=pg_select_db('projetosql',$db) or die ("Problemas ao escolher a base de dados");
  548.         # Acertando a tabela de caracteres que sera usada no pg
  549.         pg_query($db,"SET NAMES 'utf8'");
  550.          #pg_query('SET character_set_connection=utf8');
  551.         #pg_query('SET character_set_client=utf8');
  552.         #pg_query('SET character_set_results=utf8');
  553.         # aqui termina o trecho de conex?o com o banco de dados
  554.         ################################################################################################################
  555.    # SWITCH CASE com a vari?vel $passo
  556.    SWITCH (TRUE)
  557.     { # 1.5.1 - Monta a tela com o registro e o form para confirmar a exclus?o
  558.      case ($passo=='1'):
  559.       { # Chamando a fun??o que monta a tela de consulta
  560.        $PK=$_POST['id_rota'];
  561.         consulta_rotas_viarias($PK);
  562.         # Montagem do formul&aacute;rio com passagem escondida do valor da sigla
  563.        # Para dele&ccedil;&atilde;o do registro do Banco de Dados
  564.        printf("<form action='./protviasphp03.php' method='post'>\n");
  565.         printf("<input type='hidden' name='id_rota' value='$_POST[id_rota]'>\n");
  566.         printf("<input type='hidden' name='acao'          value='$acao'>\n");
  567.         printf("<input type='hidden' name='passo'         value='2'>\n");
  568.         printf("<input type='hidden' name='salto'         value='$salto'>\n");
  569.         # montar o bot?o de conclus?o da EXCLUS?O
  570.        printf("<input type=submit value='Confirmar a Exclus&atilde;o'>");
  571.         # montar o bot?o de voltar UMA p?gina
  572.        printf("<input type='button' value='< P&aacute;gina' onclick='history.go(-1)'>");
  573.         # montar o bot?o de voltar para p?gina de ABERTURA
  574.        printf("<input type='button' value='< Painel de Abertura' onclick='history.go(-$salto)'>");
  575.         # os bot?es de "limpar" (RESET dos campos do form)
  576.        printf("<input type='reset' value='Limpar'>");
  577.         printf("</form>");
  578.         break;
  579.       } # 1.5.1
  580.      case ($passo=='2'):
  581.       { # 1.5.2 - Chamando a fun??o que executa a exclus?o
  582.        # Montando o comando que ser? executado na transa??o
  583.        $cmd="DELETE FROM rotas_viarias WHERE id_rota='$_POST[id_rota]'";
  584.         ###############################################################################################################
  585.        ###############################################################################################################
  586.             $textoini="Excluindo o Registro Escolhido...";
  587.              $textofim="Exclu&iacute;do";
  588.              $textoope="Exclus&atilde;o";
  589.              # exibindo a vari?vel $textoini
  590.             printf("$textoini<br>\n");
  591.              # Iniciando o la?o que vai controlar as tentativas de executar a transa??o.
  592.             # Se a Transa??o receber um DEADLOCK ela deve ser re-tentada.
  593.             $tentativa=1;
  594.              while ( $tentativa == 1 )
  595.              { # 1.1 - O la?o se repete enquanto a vari?vel de controle $tentativa valer 1 (TRUE)
  596.               # Iniciando a transa??o.
  597.               $query = pg_query ($db, "begin");
  598.                             pg_send_query($db, $cmd);
  599.                             $result = pg_get_result($db);
  600.                # O Pr?ximo SWITCH trata as situa??es de erro. A fun??o pg_errno($db) retorna o n?mero do erro do pg.
  601.               switch (TRUE)
  602.                { # 1.1.3 - Avalia??o da situa??o de erro (se existir).
  603.                 case pg_errormessage($db) == 1213 :
  604.                  { # 1.1.3.1 - Erro de DeadLock - Cancelar e Reiniciar a transacao
  605.                   $query = pg_query($db, "rollback");
  606.                    $tentativa=1;
  607.                    break;
  608.                  } # 1.1.3.1
  609.                 case pg_errormessage($db) > 0 :
  610.                  { # 1.1.3.2 - Erro! N?O por deadlock. AVISAR o usuario. CANCELAR A transacao
  611.                   printf("<b>Erro na tentativa de $textoope!</b><br>\n");
  612.                    $mens=pg_errno($db)." : ".pg_error($db);
  613.                    printf("Mensagem: $mens<br>\n");
  614.                     $query = pg_query($db, "rollback");
  615.                    $tentativa=0;
  616.                    break;
  617.                  } # 1.1.3.2
  618.                 case pg_errormessage($db) == 0 :
  619.                  { # 1.1.3.3 - Nao tem erro! Concluir a transacao e Avisar o usuario.
  620.                   $query = pg_query($db, "commit");
  621.                    printf("Registro <b>$textofim</b> com sucesso!<br>\n");
  622.                    $tentativa=0;
  623.                    break;
  624.                  } # 1.1.3.3
  625.               } # 1.1.3 - Fim do SWITCH tratando os status da transa??o
  626.             } # 1.1 - Fim do la?o de repeti??o
  627.        ###############################################################################################################
  628.        ###############################################################################################################
  629.        continuar("protvias");
  630.         break;
  631.       }
  632.     } # 1.5.2
  633.    paginafinal();
  634.     break;
  635.   } # 1.5 - Final Excluir
  636.  #####################################################################################################################
  637.  case ($acao=='Listagem'):
  638.   { # 1.6 - Listagem
  639.    $texto="Listagem: rotas_viarias"; // Este ser? o texto que aparecer? no Topo da p?gina.
  640.     $prg="protviasphp03-L";
  641.     paginainicio($cordefundo,$texto,$prg);
  642.          ################################################################################################################
  643.         # O trecho de conex?o ? comum para a parte que vai ler o registro e para a transa??o.
  644.         # Por isso vem ANTES do Switch.
  645.         ###############################
  646.         # Fazendo a conex?o com o banco de dados.
  647.         # Atribuicao de: - Nome de servidor, Nome do usuario, Senha do usuario e Base de dados
  648.         $db = pg_connect($con_string) or die("Problemas ao escolher a base de dados");
  649.          #$banco=pg_select_db('projetosql',$db) or die ("Problemas ao escolher a base de dados");
  650.         # Acertando a tabela de caracteres que sera usada no pg
  651.         pg_query($db,"SET NAMES 'utf8'");
  652.          #pg_query('SET character_set_connection=utf8');
  653.         #pg_query('SET character_set_client=utf8');
  654.         #pg_query('SET character_set_results=utf8');
  655.         # aqui termina o trecho de conex?o com o banco de dados
  656.         ################################################################################################################
  657.    # SWITCH CASE com a vari?vel $passo
  658.    SWITCH (TRUE)
  659.     { # 1.6.1
  660.      case ($passo==1):
  661.       { # 1.6.1.1 Vamos montar o formulario para escolha da ordena??o dos dados no relat?rio
  662.        printf("<form action='./protviasphp03.php' method='post'>\n");
  663.         printf("<input type='hidden' name='acao'  value='$acao'>\n");
  664.         printf("<input type='hidden' name='passo' value='2'>\n");
  665.         printf("<input type='hidden' name='salto' value='$salto'>\n");
  666.         printf("Escolha a ordena&ccedil;&atilde;o dos dados do relat&oacute;rio marcando um dos campos<br>\n");
  667.         printf("<table>\n");
  668.         printf("<tr><td>Codigo Rota:</td>                       <td><INPUT TYPE=RADIO NAME='ordem' VALUE='r.id_rota' CHECKED></td></tr>\n");
  669.         printf("<tr><td>Nome da Rota:</td>                      <td><INPUT TYPE=RADIO NAME='ordem' VALUE='r.tx_nome_rota'></td></tr>\n");
  670.         printf("<tr><td>Descricao:</td>             <td><INPUT TYPE=RADIO NAME='ordem' VALUE='r.tx_descr_periodo'></td></tr>\n");
  671.     printf("<tr><td>ID Cidade:</td>                            <td><INPUT TYPE=RADIO NAME='ordem' VALUE='c.id_cidade'></td></tr>\n");
  672.         printf("<tr><td>Nome da Cidade:</td>            <td><INPUT TYPE=RADIO NAME='ordem' VALUE='c.tx_nome'></td></tr>\n");
  673.         printf("<tr><td>Data de Cadastro</td>                   <td><INPUT TYPE=RADIO NAME='ordem' VALUE='r.dt_cadastro'></td></tr>\n");
  674.        
  675.         # Montar o bot?o para Gerar a Listagem
  676.        printf("<tr><td colspan=2><input type=submit value='Gerar Listagem'>");
  677.         # montar o bot?o de voltar UMA p?gina
  678.        printf("<input type='button' value='< P&aacute;gina' onclick='history.go(-1)'>");
  679.         # montar o bot?o de voltar para p?gina de ABERTURA
  680.        printf("<input type='button' value='< Painel de Abertura' onclick='history.go(-$salto)'>");
  681.         # os bot?es de "limpar" (RESET dos campos do form)
  682.        printf("<input type='reset' value='Limpar'></td></tr>\n");
  683.         printf("</table>\n");
  684.         printf("</form>\n");
  685.         # Aqui montamos o final de p?gina
  686.        paginafinal();
  687.         break;
  688.       } # 1.6.1.1
  689.      case ($passo==2 or $passo==3):
  690.       { # 1.6.1.2 - pegando o valor da variavel $ordena do formulario anterior
  691.        $ordem=$_POST['ordem'];
  692.         # O proximo comando le a tabela de usuarios ordenando os dados pela escolha indicada na variavel $ordem
  693.  
  694.        
  695.          $cmd = "SELECT r.*, c.id_cidade, c.tx_nome
  696.                          FROM rotas_viarias r LEFT JOIN cidades c ON r.id_cidade_origem = c.id_cidade
  697.                          ORDER BY $ordem";
  698.        
  699.  
  700.         # printf("$cmd<br>");
  701.        $sql = pg_query($cmd);
  702.         printf("<table border=1>\n");
  703.         printf("<tr bgcolor='LIGHTGREEN'><td>Id Rota</td>
  704.                                        <td>Nome da Rota</td>
  705.                                        <td>Descricao</td>
  706.                                        <td>ID Cidade Origem</td>
  707.                                        <td>ID Cidade Destino</td>
  708.                                        <td>Dt Cadastro</td></tr>\n");
  709.         $cor="WHITE";
  710.         while ($le = pg_fetch_array($sql))
  711.         {
  712.           printf("<tr bgcolor='$cor'><td>$le[id_rota]</td>
  713.                                      <td> $le[tx_nome_rota]</td>
  714.                                     <td>$le[tx_descr_periodo]</td>
  715.                                      <td>$le[id_cidade_origem]
  716.                                      <td>$le[id_cidade_destino]
  717.                       <td>$le[dt_cadastro]</td>
  718.                                     </tr>\n");
  719.           $cor=( $cor == "WHITE" ) ? "LIGHTGREEN" : "WHITE";
  720.         }
  721.         printf("</table>\n");
  722.         if ( $passo==2 )
  723.         { # 1.2.2 vamos montar o bot?o para impress?o
  724.          printf("<form action='./protviasphp03.php' method='POST' target='_NEW'>\n");
  725.           printf("<input type='hidden' name='acao'  value='$acao'>\n");
  726.           printf("<input type='hidden' name='passo' value='3'>\n");
  727.           printf("<input type='hidden' name='ordem' value='$ordem'>\n");
  728.           # Aqui montamos o bot?o de voltar
  729.          printf("<input type='submit' value='Gerar c&oacute;pia para Impress&atilde;o'><input type='button' value='< UMA P&aacute;g.' onclick='history.go(-1)'><input type='button' value='< Painel de Abertura' onclick='history.go(-$salto)'><br>\n");
  730.           printf("O mesmo relat&oacute;rio ser&aacute; montado em uma janela!<br>Depois voc&ecirc; pode escolher a impress&atilde;o pelo navegador.\n");
  731.           printf("</form>\n");
  732.           continuar("protvias");
  733.           paginafinal();
  734.         } # 1.2.2
  735.        else
  736.         { # 1.2.3
  737.          printf("<hr>\nDepois de Imprimir rasgue na linha acima<br>\n");
  738.           printf("<input type='submit' value='Imprimir' onclick='javascript:window.print();'>");
  739.         } # 1.2.3
  740.        break;
  741.       } # 1.6.1.2
  742.    } # 1.6.1
  743.    break;
  744.   } # 1.6 - Final Listar
  745.  #####################################################################################################################
  746. } # - Final do Grande Switch Case
  747. ?>
Add Comment
Please, Sign In to add comment