Ir para conteúdo

POWERED BY:

Arquivado

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

omor

Função PDO

Recommended Posts

ola gentes sou iniciante em php e orientação a objetos, alguém poderia me dizer o que há de errado nesse codigo?

 

não dá nenunhum erro, mas também não imprime nada

 

<?php
include "config.php";
function mediaAluno($portugues, $matematica, $biologia, $filosofia, $fisica, $geografia, $historia){
$media = ($portugues + $matematica + $biologia + $filosofia + $fisica + $geografia + $historia)/7;
return $media;
$sql_pegaNota = 'SELECT * FROM aluno where alunoId = :alunoId AND disciplina = :disciplinaId';
try{
$query_pegaNota = $conecta->prepare($sql_pegaNota);
$query_pegaNota->bindValue(':alunoId ',$alunoId,PDO::PARAM_STR);
$query_pegaNota->bindValue(':disciplina',$disciplina,PDO::PARAM_STR);
$query_pegaNota->execute();
$resultado_pegaNota = $query_pegaNota->fetscAll(PDO::FETCH_ASSOC);
}catch(PDOexception $error_pegaNota){
echo 'Erro ao pegar nota do aluno '.$error_pegaNota->getMessage();
}
foreach($resultado_pegaNota as $res_pegaNota){
$alunoId = $res_pegaNota['alunoId'];
$disciplinaId = $res_pegaNota['disciplinaId'];
$portugues = $res_pegaNota['portugues'];
$matematica = $res_pegaNota['matematica'];
$biologia = $res_pegaNota['biologia'];
$filosofia = $res_pegaNota['filosofia'];
$fisica = $res_pegaNota['fisica'];
$geografia = $res_pegaNota['geografia'];
$historia = $res_pegaNota['historia '];
}
$aluno = mediaAluno($portugues, $matematica, $biologia, $filosofia, $fisica, $geografia, $historia);
echo $aluno;
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá! Nesse código que postou você criou uma Função, mas onde a declarou com as notas dos alunos?

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente assim

<?php
include "config.php";
function mediaAluno($portugues, $matematica, $biologia, $filosofia, $fisica, $geografia, $historia){
$media = ($portugues + $matematica + $biologia + $filosofia + $fisica + $geografia + $historia)/7;
return $media;
}
try{
 $query_pegaNota = $conecta->prepare('SELECT * FROM aluno where alunoId = :alunoId AND disciplina = :disciplinaId');
 $query_pegaNota->bindParam(':alunoId ',$alunoId,PDO::PARAM_STR);
 $query_pegaNota->bindParam(':disciplina',$disciplina,PDO::PARAM_STR);
 $query_pegaNota->execute();
 $resultado_pegaNota = $query_pegaNota->fetscAll(PDO::FETCH_ASSOC);  
 }catch(PDOexception $error_pegaNota){
echo 'Erro ao pegar nota do aluno '.$error_pegaNota->getMessage();   
 }
foreach($resultado_pegaNota as $res_pegaNota){ 
  $alunoId      = $res_pegaNota['alunoId'];
  $disciplinaId = $res_pegaNota['disciplinaId'];
  $portugues    = $res_pegaNota['portugues'];
  $matematica   = $res_pegaNota['matematica'];
  $biologia     = $res_pegaNota['biologia'];
  $filosofia    = $res_pegaNota['filosofia'];
  $fisica       = $res_pegaNota['fisica'];
  $geografia    = $res_pegaNota['geografia'];
  $historia     = $res_pegaNota['historia '];
} 
echo $aluno = mediaAluno($portugues, $matematica, $biologia, $filosofia, $fisica, $geografia, $historia);
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

as notas está vindo do banco de dados

 

na verdade acho que estou errando na montagem do banco de dados, tenho a tabela aluno e a tabela disciplinas, consigo pegar as notas das disciplinas somente pelo disciplinaId?

mudei o codigo para

<?php
include "config.php";
$sql_pegaNota = 'SELECT * FROM disciplinas where disciplina = :disciplinaId AND alunoId = :alunoId';
try{
$query_pegaNota = $conecta->prepare($sql_pegaNota);
$query_pegaNota->bindParam(':alunoId ',$alunoId,PDO::PARAM_STR);
$query_pegaNota->bindParam(':disciplina',$disciplina,PDO::PARAM_STR);
$query_pegaNota->execute();
$resultado_pegaNota = $query_pegaNota->fetscAll(PDO::FETCH_ASSOC);
}catch(PDOexception $error_pegaNota){
echo 'Erro ao pegar nota do aluno '.$error_pegaNota->getMessage();
}
foreach($resultado_pegaNota as $res_pegaNota){
$alunoId = $res_pegaNota['alunoId'];
$disciplinaId = $res_pegaNota['disciplinaId'];
$portugues = $res_pegaNota['portugues'];
$matematica = $res_pegaNota['matematica'];
$biologia = $res_pegaNota['biologia'];
$filosofia = $res_pegaNota['filosofia'];
$fisica = $res_pegaNota['fisica'];
$geografia = $res_pegaNota['geografia'];
$historia = $res_pegaNota['historia '];
function mediaAluno($portugues, $matematica, $biologia, $filosofia, $fisica, $geografia, $historia){
$media = ($portugues + $matematica + $biologia + $filosofia + $fisica + $geografia + $historia)/7;
return $media;
}
echo $aluno = mediaAluno($portugues, $matematica, $biologia, $filosofia, $fisica, $geografia, $historia);
}
?>
mas está dando o seguinte erro
Erro ao pegar nota do aluno SQLSTATE[HY093]: Invalid parameter number: parameter was not defined

Compartilhar este post


Link para o post
Compartilhar em outros sites

como o valor é int numeros troque $query_pegaNota->bindParam para $query_pegaNota->bindValue

continua dando esse erro

 

Erro ao pegar nota do aluno SQLSTATE[HY093]: Invalid parameter number: parameter was not defined

Compartilhar este post


Link para o post
Compartilhar em outros sites

Este é todo o seu código?

Sim

Tabela alunos
alunoId
disciplinaId
alunoNome
AlunoSerie
AlunoProfessor
tabela disciplinas
disciplinaId
alunoId
portugues
matematica
biologia
filosofia
fisica
geografia
historia
media

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você leu o erro? Os erros do PHP são tão didáticos... Se um dia vier a trabalhar com Java e ver um NullPointerException na tela, vai chorar...

 

veja este trecho:

 

$sql_pegaNota = 'SELECT * FROM disciplinas where disciplina = :disciplinaId AND alunoId = :alunoId';


try{
 $query_pegaNota = $conecta->prepare($sql_pegaNota);
 $query_pegaNota->bindParam(':alunoId ',$alunoId,PDO::PARAM_STR);
 $query_pegaNota->bindParam(':disciplina',$disciplina,PDO::PARAM_STR);

Repare que na sua query você usa dois parâmetros nomeados: alunoId e disciplinaId, mas na hora de "bindar" os valores, você usa o nome do parâmetro errado para a disciplina... Deveria ser assim:

$query_pegaNota = $conecta->prepare($sql_pegaNota);
$query_pegaNota->bindParam(':alunoId ',$alunoId,PDO::PARAM_STR);
$query_pegaNota->bindParam(':disciplinaId',$disciplina,PDO::PARAM_STR);

Compartilhar este post


Link para o post
Compartilhar em outros sites

mesmo assim continua dando esses erros

Undefined variable: alunoId in D:\Program Files\wamp\www\PHP POO\functions.php on line 13

Undefined variable: disciplinaId in D:\Program Files\wamp\www\PHP POO\functions.php on line 14

Compartilhar este post


Link para o post
Compartilhar em outros sites

não entedir sua logica maniw você esta querendo fazer uma pesquisar ou uma listagem de alunos? por veja se você for fazer uma pesquisar esta faltado tu enviar o que busca se você quer fazer uma listagem dos alunos de onde estao vindos os valores $alunoId e disciplina via POST?e pq ta enviado as materias? $portugues, $matematica, $biologia, $filosofia, $fisica, $geografia, $historia ?

tente um teste simples

<?php
include "config.php";
function mediaAluno($alunoId, $disciplina){
try{
 $query_pegaNota = $conecta->prepare('SELECT * FROM disciplinas where  alunoId = :alunoId AND disciplina= :disciplina');
 $query_pegaNota->bindvalue(':alunoId ',$alunoId,PDO::PARAM_STR);
 $query_pegaNota->bindParam(':disciplina ',$disciplina,PDO::PARAM_STR);
 $query_pegaNota->execute();
 $resultado_pegaNota = $query_pegaNota->fetscAll(PDO::FETCH_ASSOC);  
 }catch(PDOexception $error_pegaNota){
echo 'Erro ao pegar nota do aluno '.$error_pegaNota->getMessage();   
 }
foreach($resultado_pegaNota as $res_pegaNota){ 
  $alunoId      = $res_pegaNota['alunoId'];
  $disciplinaId = $res_pegaNota['disciplinaId'];
  $portugues    = $res_pegaNota['portugues'];
  $matematica   = $res_pegaNota['matematica'];
  $biologia     = $res_pegaNota['biologia'];
  $filosofia    = $res_pegaNota['filosofia'];
  $fisica       = $res_pegaNota['fisica'];
  $geografia    = $res_pegaNota['geografia'];
  $historia     = $res_pegaNota['historia '];
} 
$media = ($portugues + $matematica + $biologia + $filosofia + $fisica + $geografia + $historia)/7;
return $media;
}
if(isset($_POST['enviar'])){
echo mediaAluno($_POST['id'],$_POST['disciplina']);
}
} 
?>
<form method="post" action="">
<input type="text" name="id"  placeholder="Usuario">
<input type="text" name="disciplina"  placeholder="Disciplina">
<input type="submit" value="Procurar" name="enviar">
</form>

Compartilhar este post


Link para o post
Compartilhar em outros sites

uma listagem



mas a principio nesse codigo queria apenas imprimir o valor da media do aluno cadastrado no banco de dados, essas variáveis de disciplinas pegam as notas no banco de dados pra ver se a função está correta


meu vc tá complicando uma coisa simples, quero saber apenas porque tá dando esses erros
Undefined variable: alunoId in D:\Program Files\wamp\www\PHP POO\functions.php on line 13
Undefined variable: disciplinaId in D:\Program Files\wamp\www\PHP POO\functions.php on line 14

 



Compartilhar este post


Link para o post
Compartilhar em outros sites

o jeito é testado maniw tenta assim..

<?php
include "config.php";
function mediaAluno($alunoId){
try{
 $query_pegaNota = $conecta->prepare("SELECT * FROM disciplinas WHERE id_aluno='".$alunoId."'");
 $query_pegaNota->execute();
 $rows = $query_pegaNota->fetscAll(PDO::FETCH_ASSOC);  
 }catch(PDOexception $error_pegaNota){
echo 'Erro ao pegar nota do aluno '.$error_pegaNota->getMessage();   
 }
foreach($rows as $x){ 
  $alunoId      = $x['alunoId'];
  $disciplinaId = $x['disciplinaId'];
  $portugues    = $x['portugues'];
  $matematica   = $x['matematica'];
  $biologia     = $x['biologia'];
  $filosofia    = $x['filosofia'];
  $fisica       = $x['fisica'];
  $geografia    = $x['geografia'];
  $historia     = $x['historia '];
  $media = ($portugues + $matematica + $biologia + $filosofia + $fisica + $geografia + $historia)/7;
  return $media;
} 
}
if(isset($_POST['enviar'])){
echo mediaAluno($_POST['id']);
}
?>
<form method="post" action="">
<input type="text" name="id"  placeholder="Id Usuario">
<input type="submit" value="Listar" name="enviar">
</form>

Compartilhar este post


Link para o post
Compartilhar em outros sites
Mas vai dar erro mesmo... Veja o trecho de código:



$query_pegaNota->bindParam(':alunoId ',$alunoId,PDO::PARAM_STR);
$query_pegaNota->bindParam(':disciplina',$disciplina,PDO::PARAM_STR);


Agora me diga, de onde vem os valores para as variáveis $alunoId e $disciplina ? Onde elas estão declaradas? Você não fez nada disso, por isso o erro. Perceba que é um erro diferente do anterior...


de onde esses valores devem vir? Se for GET, abaixo do seu include, coloque isto:



$alunoId = isset($_GET['alunoId']) ? $_GET['alunoId'] : '';
$disciplina = isset($_GET['disciplina']) ? $_GET['disciplina'] : '';


Se for POST:



$alunoId = isset($_POST['alunoId']) ? $_POST['alunoId'] : '';
$disciplina = isset($_POST['disciplina']) ? $_POST['disciplina'] : '';

Compartilhar este post


Link para o post
Compartilhar em outros sites

agora sim entendi, obrigado Riberry e a você também Marcos

 

 


Resolvi o problema dos erros agora não está imprimindo a media, os valores vindo do banco estão todos certos mas não imprime

 

 


agora deu tudo certo, alguém sabe como arredondar os valores? a media tá imprimindo assim 8.428571...

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.