Jump to content
alphasil

Ajuda numa dúvida

Recommended Posts

alphasil

Boa noite

Tenho aqui uma dúvida que gostaria de tirar já que nunca fui confrontado com uma situação dessas.

Tenho um formulário que me manda as variáveis para esta função.

public function novaAula($atividade, $turmas, $local, $dataAula, $inicio, $fim, $fundamentacao, $observacoes, $id_professor){
    try{
	    $stmt = $this->db->prepare("INSERT INTO `aulas_exterior` (`atividade`,`id_turma`,`local`,`data_aula`,`inicio`,`fim`,`fundamentacao`,`observacoes`)
						    VALUES (:atividade,:id_turma,:local,:data_aula,:inicio,:fim,:fundamentacao,:observacoes);");
	    $stmt->bindparam(":atividade", $atividade);
	    $stmt->bindparam(":local", $local);
	    $stmt->bindparam(":data_aula", $dataAula);
	    $stmt->bindparam(":inicio", $inicio);
	    $stmt->bindparam(":fim", $fim);
	    $stmt->bindparam(":fundamentacao", $fundamentacao);
	    $stmt->bindparam(":observacoes", $observacoes);
	    $turma = explode(',', $turmas);
	    foreach ($turma as $id_turma) {
		    $stmt->bindParam(':id_turma', $id_turma, PDO::PARAM_INT);
		    $result = $stmt->execute();
		    $idAula = $this->db->lastInsertId(); //Como pode ser escolhida mais do que uma turma está num ciclo
		    $this->insertPedidoByLastId($idAula,$id_professor, $id_turma); //Guarda na tabela relacional o id_aula, id_prof, id_turma
		    $nome_turma = $this->getTurmaById($id_turma); // Vai buscar o nome da turma pelo ID
		    $nome_professor = $this->getNomeById($id_professor);// Vai buscar o nome do professor pelo ID
		    $this->setTurma($nome_turma); //Uso set para definir noma da turma usando o Setter
		    $this->setProfessor(($nome_professor));//Uso set para definir noma do professor usando o Setter
		    $this->getTurmaeProfessor(); //Chamo a funcao para ter os nomes
	    }
	    if (!$result) {
		    print_r($stmt->errorInfo());
		    return array('status' => 'error', 'message' => 'Problema ao gravar esta nova atividade...');
	    }
	    else{
		    return array('status' => 'success', 'message' => 'O pedido foi criado com sucesso...');
	    }
    } catch (Exception $ex) {
	    echo $ex->getMessage();
    }
   }

Passando para a última função comentada pretendo ter aqui o nomes através do "Getter"

public function getTurmaeProfessor(){
    $professor = $this->getProfessor(); //Receber o nome do professor através do Getter
    $turma = $this->getTurma(); //Receber o nome da turma através do Getter
    $arr = array($professor, $turma); //Cria um array para guardar os dados
    print_r($arr);
   }

O print_r dá-me

Array ( [0] => Nome do professor [1] => 5ºA )

Até aqui tudo funciona bem....agora a dúvida é como passar isso quando esta última função é chamada noutro ficheiro.

Isto é, quero num ficheiro receber os dados desta função public function getTurmaeProfessor()

Estou a tentar fazer assim mas não dá

$dados = $esmaior->getTurmaeProfessor();
if(!$dados){
 echo "sem dados";
}
print_r($dados);

Não me batam muito sff :cheesygrin: :cheesygrin:

Obrigado

Edited by alphasil

Share this post


Link to post
Share on other sites
acao

boas

grava o array numa sessão

ou

como está a utilizar classe, numa propriedade publica.

cumps

acao

Edited by acao

Share this post


Link to post
Share on other sites
HappyHippyHippo

quando dizes noutro ficheiro estás a referir-te a outro pedido ou simplesmente outro ficheiro que chama a função ?


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
alphasil

Oi Happy

O outro ficheiro que digo é um ficheiro que vai ser PDF, mas tenho de recolher o nome do professor e a turma em string não em int através da função function getTurmaeProfessor()

Tinha começado assim

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
include_once '../db/dbconfig.php';
$esmaior = new ESMAIOR($DB_con);
require_once __DIR__ . '/../vendor/autoload.php';
set_include_path('../src/' . PATH_SEPARATOR . get_include_path());
$dados = $esmaior->getTurmaeProfessor();
   if(!$dados){
    echo "sem dados";
   }
   print_r($dados);

mas o array aparece vazio quando esta função é chamada dentro deste novo ficheiro

Share this post


Link to post
Share on other sites
HappyHippyHippo

qual o código de retorno da função ?

por outras palavras : em que parte do teu código estás a retornar os dados da função ?


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
alphasil

Uppsss

Esqueci de o pôr...

Eu tinha isso

$professor = $this->getProfessor(); //Receber o nome do professor através do Getter
	    $turma = $this->getTurma(); //Receber o nome da turma através do Getter
	    $arr = array($professor, $turma); //Cria um array para guardar os dados
return $arr;

Share this post


Link to post
Share on other sites
HappyHippyHippo

pois ... mas agora eu não sei o que tens agora e se já seuqer testaste depois de fazeres essa alteração ...


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
alphasil

Eu tinha assim, mas segui o conselho do acao em que usei $_SESSION e funciona mas gostava de aprender como poderia fazer da forma como tinha inicialmente

Que me aconselhas?

Share this post


Link to post
Share on other sites
HappyHippyHippo

pois ... mas agora eu não sei o que tens agora e se já seuqer testaste depois de fazeres essa alteração ...


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
alphasil

O que tenho agora

public function novaAula($atividade, $turmas, $local, $dataAula, $inicio, $fim, $fundamentacao, $observacoes, $id_professor){
    try{
	    $stmt = $this->db->prepare("INSERT INTO `aulas_exterior` (`atividade`,`id_turma`,`local`,`data_aula`,`inicio`,`fim`,`fundamentacao`,`observacoes`)
													    VALUES (:atividade,:id_turma,:local,:data_aula,:inicio,:fim,:fundamentacao,:observacoes);");
	    $stmt->bindparam(":atividade", $atividade);
	    $stmt->bindparam(":local", $local);
	    $stmt->bindparam(":data_aula", $dataAula);
	    $stmt->bindparam(":inicio", $inicio);
	    $stmt->bindparam(":fim", $fim);
	    $stmt->bindparam(":fundamentacao", $fundamentacao);
	    $stmt->bindparam(":observacoes", $observacoes);
	    $turma = explode(',', $turmas);
	    foreach ($turma as $id_turma) {
		    $stmt->bindParam(':id_turma', $id_turma, PDO::PARAM_INT);
		    $result = $stmt->execute();
		    $idAula = $this->db->lastInsertId(); //Como pode ser escolhida mais do que uma turma está num ciclo
		    $this->insertPedidoByLastId($idAula,$id_professor, $id_turma); //Guarda na tabela relacional o id_aula, id_prof, id_turma
		    $nome_turma = $this->getTurmaById($id_turma); // Vai buscar o nome da turma pelo ID
		    $nome_professor = $this->getNomeById($id_professor);// Vai buscar o nome do professor pelo ID
		    $this->getTurmaeProfessor($idAula, $nome_professor, $nome_turma, $atividade, $local, $dataAula,$inicio, $fim, $fundamentacao, $observacoes); //Chamo a funcao para ter os nomes
	    }
	    if (!$result) {
		    print_r($stmt->errorInfo());
		    return array('status' => 'error', 'message' => 'Problema ao gravar esta nova atividade...');
	    }
	    else{
		    return array('status' => 'success', 'message' => 'O pedido foi criado com sucesso...');
	    }
    } catch (Exception $ex) {
	    echo $ex->getMessage();
    }
   }

public function getTurmaeProfessor($idAula, $nome_professor, $nome_turma, $atividade, $local, $dataAula,$inicio, $fim, $fundamentacao, $observacoes){
    $professor = $this->getProfessor(); //Receber o nome do professor através do Getter
    $turma = $this->getTurma(); //Receber o nome da turma através do Getter
    $_SESSION['professor'] = $nome_professor;
    $_SESSION['turma'] = $nome_turma;
    $_SESSION['idAula'] = $idAula;
    $_SESSION['atividade'] = $atividade;
    $_SESSION['local'] = $local;
    $_SESSION['data'] = $dataAula;
    $_SESSION['inicio'] = $inicio;
    $_SESSION['fim'] = $fim;
    $_SESSION['fundamentacao'] = $fundamentacao;
    $_SESSION['observacoes'] = $observacoes;
    return true;
   }

E o ficheiro onde quero receber está assim

error_reporting(E_ALL);
ini_set('display_errors', 1);
include_once '../db/dbconfig.php';
$esmaior = new ESMAIOR($DB_con);
require_once __DIR__ . '/../vendor/autoload.php';
set_include_path('../src/' . PATH_SEPARATOR . get_include_path());
$professor = $_SESSION['professor'];
$turma = $_SESSION['turma'];
$idAula = $_SESSION['idAula'];
$atividade = $_SESSION['atividade'];
$local = $_SESSION['local'];
$inicio = $_SESSION['inicio'];
$fim = $_SESSION['fim'];
$fundamentacao = $_SESSION['fundamentacao'];
$observacoes = $_SESSION['observacoes'];
$data_aula = $_SESSION['data'];

Dentro do html...depois do ajax success, chamo a página onde vou receber essas variaveis

<script type="application/javascript">
   function pedidoAulaExterna() {
    window.open("http://esmaior.pt/miga/pdf/pdfAulas.php","_blank");
   }
</script>

Que achas??

E agora estou com um problema que não foi pensado que me surgisse, mas primeiro diz-me o que achas?

Share this post


Link to post
Share on other sites
HappyHippyHippo

quando dizes noutro ficheiro estás a referir-te a outro pedido ou simplesmente outro ficheiro que chama a função ?

responde a isto, porque ainda não deu para perceber o que tens/estás a fazer


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
alphasil

ok vou tentar explicar

Como tinha, o outro ficheiro chamava a funcão, mas o array vinha vazio apesar de dentro da função estar com dados, estava assim o outro ficheiro que chamaria a função

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
include_once '../db/dbconfig.php';
$esmaior = new ESMAIOR($DB_con);
require_once __DIR__ . '/../vendor/autoload.php';
set_include_path('../src/' . PATH_SEPARATOR . get_include_path());
$dados = $esmaior->getTurmaeProfessor();
   if(!$dados){
    echo "sem dados";
   }
   print_r($dados);
//print_r($dados) gives me - Array ( [0] => [1] => )
Como tenho agora recebo os dados que estão armazenados na função mas não a chama visto que os dados estão guardados em sessão.

Este é um exemplo do meu ficheiro pdf

http://esmaior.pt//miga/pdf/2016-06-27_7%C2%BAB.pdf

Este é o meu ficheiro de gravação no ficheiro pdf

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
include_once '../db/dbconfig.php';
$esmaior = new ESMAIOR($DB_con);
require_once __DIR__ . '/../vendor/autoload.php';
set_include_path('../src/' . PATH_SEPARATOR . get_include_path());
$professor = $_SESSION['professor'];
$turma = $_SESSION['turma'];
$idAula = $_SESSION['idAula'];
$atividade = $_SESSION['atividade'];
$local = $_SESSION['local'];
$inicio = $_SESSION['inicio'];
$fim = $_SESSION['fim'];
$fundamentacao = $_SESSION['fundamentacao'];
$observacoes = $_SESSION['observacoes'];
$data_aula = $_SESSION['data'];
$center = array('', '', '', 'justification' => 'center');
$pdf = new Cezpdf('a4', 'portrait');
$pdf->ezSetMargins(20, 20, 20, 20);
$pdf->ezStartPageNumbers(320, 20, 10, 'right', 'Página {PAGENUM} de {TOTALPAGENUM}');
$mainFont = 'Times-Roman';
$codeFont = 'fonts/Helvetica';
$pdf->selectFont($mainFont);
$pdf->openHere('Fit');
$escola = utf8_decode("<b>N.º do Código do Estabelecimento de Ensino 151567 </b>\n");
$contatos = utf8_decode("<b>N.º de Telefone: 258800020 / Fax: 258800029</b>\n");
$info = utf8_decode("<b>AVALIAÇÃO DA VISITA DE ESTUDO </b>\n");
$pdf->ezImage("../img/logo_esmaior.jpg", 0, 500, 'none', 'left');
$pdf->selectFont("fonts/Helvetica-Bold.afm");
$pdf->ezText($escola, 11, $center);
$pdf->ezText($contatos, 11, $center);
$pdf->setLineStyle(1, '', '', array());
$pdf->line(30, 700, 550, 700);
$pdf->ezText('Atividade no Exterior – Pedido de Autorização', 11, $center);
$pdf->rectangle(50, 30, 480, 625);
if ($atividade == "") {
   $pdf->setColor(1, 0, 0);
   $sem = "<b>Não existem pedidos</b>\n";
   $pdf->ezText($sem, 12, $center);;
} else {
   $pdf->addText(70, 635, 11, "Atividade:");
   $pdf->addText(70, 620, 11, "Turma:");
   $pdf->addText(70, 605, 11, "Local:");
   $pdf->addText(70, 590, 11, "Docente:");
   $pdf->addText(70, 575, 11, "Data:");
   $pdf->addText(70, 560, 11, "Início:");
   $pdf->addText(70, 545, 11, "Fim:");
   $pdf->addText(70, 530, 11, "Fundamentação:");
   $pdf->addText(70, 400, 11, "Observações:");
   $pdf->selectFont($codeFont);
   $pdf->addText(130, 635, 11, $atividade);
   $pdf->addText(115, 620, 11, $turma);
   $pdf->addText(110, 605, 11, $local);
   $pdf->addText(120, 590, 11, $professor);
   $pdf->addText(105, 575, 11, $data_aula);
   $pdf->addText(105, 560, 11, $inicio);
   $pdf->addText(95, 545, 11, $fim);
   $pdf->rectangle(100, 420, 375, 100);
   $pdf->addTextWrap(105, 510, 11, $fundamentacao, 350, 'full');
   $pdf->rectangle(100, 290, 375, 100);
   $pdf->addTextWrap(105, 380, 11, $observacoes, 350, 'full');
   $pdf->selectFont("fonts/Helvetica-Bold.afm");
   $pdf->addText(70, 250, 11, "Diretor:");
   $pdf->setColor(0.9,0.9,0.9);
   $pdf->filledRectangle(100, 180, 375, 60);
   $pdf->setColor(0, 0, 0);
   $pdf->selectFont($codeFont);
   $pdf->addText(105, 225, 11, "Despacho:");
   $pdf->addText(105, 200, 11, "Data: ___/___/______");
   $pdf->addText(280, 200, 11, "Assinatura: ______________________");
   $impresso = "<b>Impresso em:</b> " . date("d/m/Y - H:i");
   $pdf->addText(400, 35, 8, $impresso);
}
$pdfcode = $pdf->ezOutput();
$pdf_name = $data_aula . "_" . $turma . ".pdf";
$fp = fopen($pdf_name, 'wb');
fwrite($fp, $pdfcode);
fclose($fp);
$uploaddir = $_SERVER['DOCUMENT_ROOT'] . '/miga/pdf/';
$target_path = "/miga/pdf/" . basename($pdf_name);
try {
   $stmt = $DB_con->prepare("UPDATE `rel_turma_prof_aula` SET `path` = :path WHERE `id_aula` = :id_aula");
   $stmt->bindparam(":path", $target_path, PDO::PARAM_STR);
   $stmt->bindparam(":id_aula", $idAula, PDO::PARAM_INT);
   if (!$stmt->execute()) {
    print_r($stmt->errorInfo());
   } else {
    print_r("Tudo ok");
   }
} catch (PDOException $e) {
   echo $e->getMessage();
}
$pdf->ezStream();
 

Como vês está tudo em sessão agora

Share this post


Link to post
Share on other sites
HappyHippyHippo

responde sómente à pergunta :

afinal é outro pedido ao servidor ou não ?


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
alphasil

Boas

Se fosse como tinha inicialmente sim, era outro pedido.

Estava a fazer tudo mal da forma como quis implementar. A questão da Base de Dados estava certa, o problema é que ao depois de gravar na BD tinha uma função para ir buscar o nome do professor e a a turma em vez do id para preencher o pdf. Como é que ia abrir o pdf? Através deste código

$.ajax({
		    url: xxxxx',
		    type: 'POST',
		    data: $form.serialize(),
		    success: function (data) {
			    var result = data.status;
			    console.log(result);
			    if (result === 'success') {
				    $("#myModalAvaliacaoProjetos").modal('hide');
				    $('#success .modal-body').html('Informação: ' + data.message);
				    $('#success').modal('show');
				    criaPdfAtividades();
				    $('#success').on('hidden.bs.modal', function () {
					    window.location.reload(true);
				    });
			    }
			    else {
				    $("#myModalAvaliacaoProjetos").modal('hide');
				    $('#danger .modal-body').html('Informação: ' + data.message);
				    $('#danger').modal('show');
			    }
		    }
	    });

E isso estava errado por causa do ciclo, se fosse só um registo funcionava, como pode haver mais do que um, só fazia um pdf

Não sei se é isso que perguntas... :cheesygrin:

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.