omor 5 Denunciar post Postado Maio 19, 2014 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
jgustavo99 85 Denunciar post Postado Maio 19, 2014 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
Marcos_imasters 288 Denunciar post Postado Maio 19, 2014 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
omor 5 Denunciar post Postado Maio 19, 2014 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
Marcos_imasters 288 Denunciar post Postado Maio 19, 2014 como o valor é int numeros troque $query_pegaNota->bindParam para $query_pegaNota->bindValue Compartilhar este post Link para o post Compartilhar em outros sites
omor 5 Denunciar post Postado Maio 19, 2014 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
jgustavo99 85 Denunciar post Postado Maio 19, 2014 Este é todo o seu código? Compartilhar este post Link para o post Compartilhar em outros sites
omor 5 Denunciar post Postado Maio 19, 2014 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
Riberry 13 Denunciar post Postado Maio 19, 2014 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
omor 5 Denunciar post Postado Maio 19, 2014 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
Marcos_imasters 288 Denunciar post Postado Maio 20, 2014 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
omor 5 Denunciar post Postado Maio 20, 2014 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
Marcos_imasters 288 Denunciar post Postado Maio 20, 2014 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
Riberry 13 Denunciar post Postado Maio 20, 2014 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
omor 5 Denunciar post Postado Maio 20, 2014 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