Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sergio Murilo Cabral

Migração do Mysql para o PostgreSQL

Recommended Posts

Olá amigos,

estou aqui para solicitar um HELP para vocês.

 

É o seguinte, eu tenho um agendamento de consulta medica que esta funcionando no MYSQL, e estou tentando migrar para o PostgreSql (onde ainda sou muito inexperiente), já consegui criar as tabelas e até mesmo cadastrar no PgSQL algumas consultar para dois médicos através do formulário.

 

Meu problema começa quando eu tento entrar na página que seleciona os médicos (sel_prof.php), como faço para quando selecionado DRº. Pedro seja direcionado para somente os agendamentos referente a ele e se possível relacionando todos os registros em ordem de data e horário agendados.

 

No MYSQL eu tenho o seguinte código para essa função:

 

<? if(isset($_POST['enter'])){

$dp = $_POST['prof'];
echo "<script language='javascript'>window.location='agenda_prof.php?prof=$dp'</script>";
}?>

Selecionando o profissional, sou direcionado à página referente à ele, e me mostra todas os agendamentos já ordenado por data e hora, e deletando as datas anterior à data atual.


Estou relacionando os códigos referente ao MYSQL que esta funcionando, pois eu não tenho ideia de como criar o código para funcionar no PostgreSql.

 

Endereço de acesso ao que não esta funcionando:

http://www.sljvirtua...da/sel_prof.php

 

Code em MYSQL da página sel_prof.php________________________________________

 

<? if(isset($_POST['enter'])){

$dp = $_POST['prof'];
echo "<script language='javascript'>window.location='agenda_prof.php?prof=$dp'</script>";
}?>
<form name="enter" method="post" action="" enctype="multipart/form-data">
<table>
<tr>
<td>Selecione o Profissional:</td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td><select name="prof">
<?
include '../conexao.php';
$select = mysql_query("SELECT * FROM profissionais");
while($res = mysql_fetch_array($select)){
?>
<option value="<? echo $profissionais = $res['prof'];?>"><? echo $profissionais = $res['prof'];?></option>
<? } ?>
</select></td>
</tr>
<td><input class="input" type="submit" name="enter" value="Avançar"/></td>
</tr>
</table>
</form>
___________________________________Fim do Code____________________________________
CODE em MYSQL da página agenda_prof.php____________________________________________
<?
$prof = $_GET['prof'];
include '../conexao.php';
$select_agenda = mysql_query("SELECT * FROM agendar WHERE prof = '$prof' order by data, horas ");
$count = mysql_num_rows($select_agenda);
if($count == ''){
}?>
<table align="center">
<tr>
<td width="470" colspan="3">Existe <? echo $count; ?> Cliente(s) Agendado(s) para o Profissinal <? echo $prof; ?></td>
<td><a href="http://www.rfclinica...da/sel_prof.php"</a>Voltar</td><td width="30"></td><td width="100"><a href="sel_prof.php">Sair da Agenda</a></td></tr></table><br />
<?
while($res = mysql_fetch_array($select_agenda)){
$id = $res['id'];
$nome = $res['nome'];
$tel = $res['tel'];
$cel = $res['cel'];
$email = $res['email'];
$plano = $res['plano'];
$data = $res['data'];
$horas = $res['horas'];
$tempo = date("d/m/Y H:i:s",time()-86400);
$sql = mysql_query("DELETE FROM agendar WHERE data < '$tempo'");
?>
<div align="center">
<div align="center" id="rel" style="width:600px; height:auto; border-top:1px solid #000; background:#fff;">
<table align="center">
<tr>
<td><span style="font:17px 'Arial Black', Gadget, sans-serif; color:#000">Data Agendada: </span>
<span style="font:17px 'Arial Black', Gadget, sans-serif; color:#f00"><? echo $data; ?></span>
<span style="font:17px 'Arial Black', Gadget, sans-serif; color:#000"> - Horário: </span>
<span style="font:17px 'Arial Black', Gadget, sans-serif; color:#f00"><? echo $horas; ?></span>
</span></td>
</tr>
</table>
<table align="center">
<tr>
<td align="right">Nome do Cliente: </td>
<td align="left"><span style="font:12px 'Arial Black', Gadget, sans-serif; color:#090"><? echo $nome; ?></span></td>
</tr>
<tr>
<td align="right">Tel. Residêncial: </td>
<td align="left"><span style="font:12px 'Arial Black', Gadget, sans-serif; color:#090"><? echo $tel; ?></span></td>
</tr>
<tr>
<td align="right">Tel. Celular: </td>
<td align="left"><span style="font:12px 'Arial Black', Gadget, sans-serif; color:#090"><? echo $cel; ?></span></td>
</tr>
<tr>
<td align="right">E-mail: </td>
<td align="left"><span style="font:12px 'Arial Black', Gadget, sans-serif; color:#090"><? echo $email; ?></span></td>
</tr>
<tr>
<td align="right">Plano: </td>
<td align="left"><span style="font:12px 'Arial Black', Gadget, sans-serif; color:#090"><? echo $plano; ?></span></td>
</tr>
</table>
<table align="center">
<td>
<?
include '../conexao.php';
$sql = mysql_query("SELECT * FROM agendar order by id asc");
while ($exibe = mysql_fetch_assoc($sql));
echo "<a href='delete.php?&id=$id".$exibe['id']."'>Excluir</a> <br>";
?>
</td>
</table>
</div><!-- rel -->
<? } ?>
</div>
________________________________Fim de Código_____________________________________
Se os amigos puderem me dar esse Help de como eu crio os código que funcione no PostgreSql ficarei muito agradecido.

Um grande abraço a todos, e contando com boas resposta vindo dos amigos.

Murilo Cabral

Compartilhar este post


Link para o post
Compartilhar em outros sites

na verdade, o 1º passo é verificar se a extensão ao Postgres está ativada (ou habilitada).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá vou responder aos amigos.


Primeiro ao Masi, só tenho a dizer que mais claro do que fui no post, somente explicando pessoalmente, pois coloquei toda a minha dúvida e a minha inexperiência em relação ao PostgreSQL, no post.
Mais vou tentar ser mais claro ainda, obrigado pela a sua atenção, valeu Masi.

 

Ao Damon, só tenho a agradecer pela atenção, mas eu já tentei fazer a troca das funções mas não deu certo, pois acho que por minha inexperiência esta faltando algo mais para funcionar.

Tem como vc. mandar um exemplo de como poderia ficar o código para funcionar no PostgreSql, baseado no código do MYSQL abaixo:

 

<?
$prof = $_GET['prof'];
include '../conexao.php';
$select_agenda = mysql_query("SELECT * FROM agendar WHERE prof = '$prof' order by data, horas ");
$count = mysql_num_rows($select_agenda);
if($count == ''){
}?>

 

Mas vou entrar no endereço do manual para aprender um pouco mais, valeu mesmo!!!!!

 

Ao Fernando C, acredito que a extensão esteja habilitada, eu já comecei a criar o formulário em PHP e gravando no BD PostgreSql, inclusive já consegui fazer cadastramento, porém quando entro na pagina sel_prof.php que me proporciona o acesso aos agendamentos de cada profissional é que eu estou tendo problema, pois o código que eu uso no MYSQL não funciona no PostgreSQL. se quise dar uma olhada no que esta acontecendo entre no endereço:


http://www.sljvirtual.com.br/agenda/sel_prof.php

 

Quem sabe vc. consegue me mostrar onde estou errando.

Grande abraço a todos, e mais uma vez obrigado pela atenção.

 

Murilo Cabral

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?
Invés de ser assim tenta da outra forma 

$prof = $_GET['prof'];
include '../conexao.php';
$select_agenda = mysql_query("SELECT * FROM agendar WHERE prof = '$prof' order by data, horas ");
$count = mysql_num_rows($select_agenda);
 
if($count == ''){
 
}?>

Tenta assim 
$prof = $_GET['prof'];
include '../conexao.php';
$select_agenda= "select * from egenda where prof= '$prof'
order by data,hora";
$count = pg_query($select_agenda, $db_conexao);//sua variável que esta recebendo sua conexao.
 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara você temque ver que os drivers para mysql e postgresql

 

são diferentes

 

nunca trabalhei com postgre

mais pelo que li nos comentarios não muda muita coisa

Compartilhar este post


Link para o post
Compartilhar em outros sites

porém quando entro na pagina sel_prof.php que me proporciona o acesso aos agendamentos de cada profissional é que eu estou tendo problema

 

ola.. olha, eu verifiquei esse link:

http://www.sljvirtua...da/sel_prof.php

 

informa que há dois erros na pg Agenda.class.php (linhas 76 e 79 - claro, 1 pode ser ocasionado por outro).

 

bom, aparentemente, o problema está na passagem do parâmetro

(se vc já está cadastrando é claro q a conexão e a extensão estão ok).

 

verifique o charset (infelizmente, d fato o Postgres é meio chato c/ isso)

e de um var_dump ou echo p/ verificar como está chegando ao banco a variável.

 

ou poste essa pg (Agenda.class) aqui

 

agora, de boa cara.. se vc está cadastrando seus nomes assim: ("Dr. Fulano", "Dra. Fulana").. reveja isso, ok?

 

e não é por nada não, mas tente evitar essas short tags:

 

<?

 

use a completa:

 

<?php

 

obs: código do post #7 ok, só ajuste o nome da tabela;

qqer coisa retorne.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fernando, envie os arquivos das páginas para o seu E-mail.
Desculpe pela a liberdade tomada para te enviar os arquivos, mas é estou no desespero mesmo.
Espero que ajude.

Abraços e obrigado pela a atenção.



Fernando, al voltar as configurações iniciais e fazer as alterações que vc. sugeriu, funcionou em parte, pois consegui fazer com que ele conte, e liste os agendamentos, porém ele esta listando todos os agendamentos com os mesmos dados, dados esses do promeiro da lista de agendamento do BD.

Como te enviei os arquivos, espero que vc. consiga descobrir onde estou errando.

Obrigado mais uma vez.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.. vi sim seus arquivos e como vc já está usando OO,

concordo q PDO deve ser mesmo a melhor solução,

inclusive é bem mais seguro.

 

caso precise de algumas dicas básicas aqui tem umas ótimas:

http://www.rafaelwendel.com/2011/12/tutorial-pdo-php-data-object/

 

obs: a propósito, acabei de acessar sua pg agora há pouco (10h35)

e aparentemente agora o probleminha q ainda persiste seria como vc passar

os parametros

 

na "combo" eu costumo passar o id do profissional;

1 exemplo bem simples:

<select name="seleciona_id">
    <option value="1">dr. fulano</option>
    <option value="2">dra. fulana</option>
    <option value="3">dr. beltrano</option>
</select>

na pg de busca

declare uma variavel p/ armazenar esse id escolhida na "combo"

ex:

$idselecionado=$_POST['seleciona_id'];

consulta sql:

select dados from tabela where id='$idselecionado'

sucesso ahe... :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites
Não vou te explicar muito a fundo o PDO, pois tem muito material na internet ensinando. É só pesquisar PDO no google que tu acha.
Mas posso te explicar para que serve o PDO.
PDO foi feito para abstrair justamente estes (SGDB = mysql, mssql, pgsql, firebird e outros). Vamos dizer que o seu sistema foi feito por mysql, então cada pagina que faz (conexão, consultas) no BD tenha essa sintaxe:
$id = mysql_connect("localhost","",""); 
$con=mysql_select_db("",$id);
$res = mysql_query('SELECT nome, idade FROM alunos',$id);
while ($row = mysql_fetch_array($res)) {
    echo "<strong>Nome:</strong> " . $row["nome"] . "<br />";
    echo "<strong>Idade:</strong> " . $row["idade"] . "<br /><br />";
}

Num belo dia você resolve migrar para o PostgreSQL. Um exemplo de conexão e consulta com PostgreSQL:

$conn = pg_pconnect("dbname=mydatabase");
$result = pg_query($conn, 'SELECT nome, idade FROM alunos');
while ($row = pg_fetch_array($res)) {
  echo "<strong>Nome:</strong> " . $row["nome"] . "<br />";
  echo "<strong>Idade:</strong> " . $row["idade"] . "<br /><br />";
}

aee vem a dóóóóó de cabeça, pois você terá que alterar toda a sintaxe que estava em mysql em todas as paginas que tiver ( conexão, consultas e etc ..) para PostgreSql. Chato nééé

 

A solução para isso é PDO, pois se você optar em fazer conexão com PDO, consultas com PDO e etc ... nunca mas (NUNCA MAS) vai se preocupar em ficar alterando a sintaxe de MySql para PostgreSql e vice versa. Agora fica fácil migrar de SGDB para outro, pois o PDO tem toda a abstração (mysql, PostgreSql e outros), sabendo disso você só avisa ao PDO qual SGDB vai usar no começo da conexão com o Banco de Dados, o resto ele se vira.

 

Veja um exemplo PDO com msyql:

$dsn = 'mysql:host=localhost;port=3306;dbname=teste';
//$dsn = 'pgsql:host=localhost;port=3306;dbname=teste;' # se optar por uma conexão com PostgreSql
$usuario = 'root'; 
$senha = ''; 
$opcoes = array(PDO::ATTR_PERSISTENT => true, PDO::ATTR_CASE => PDO::CASE_LOWER);

$pdo = new PDO($dsn, $usuario, $senha, $opcoes);

$aluno = $pdo->query('SELECT nome, idade FROM alunos');
 
// Percorrendo sobre o resultado da Query
 
while ($obj = $aluno->fetchObject()) {
  echo "<strong>Nome:</strong> " . $obj->nome . "<br />";
  echo "<strong>Idade:</strong> " . $obj->idade . "<br /><br />";
}

Só uma dica Sergio Murilo, sai da programação estrutural, entre no universo da programação orientado a objeto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

olá.. sucesso e qqer coisa retorne ahe.. :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.