Ir para conteúdo

POWERED BY:

Arquivado

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

Thiago Btos

[Resolvido] erro na session

Recommended Posts

Olá gente!

Estou com o seguinte problema, estou com 2 paginas. Uma de Aluno, e outra com Resposta.

Na primeira, o Aluno inseri seu nome, e na segunga responde uma pergunta.

 

Na pagina aluno, quero passar por sessão o nome do aluno, e na segunda pagina, quando ele clicar no botao GRAVAR!, ele salve no bd o nome do aluno e a resposta de uma vez.

 

Aluno.php

<html>
   <body>
       <form name='aluno' action='operacoes.php?funcao=proximo' method='POST'>
       Nome:
       <input type='text' name='nome' maxlength='50' size='50' />
       <input type='submit' value='Enviar'/>
       </form>  
   </body>
</html>

 

Pergunta.php

<html>
   <body>
       <form name="respostas" action="operacoes.php?funcao=gravar" method="POST">
       Pergunta 1:
       <input type="text" name="resposta1" maxlength="50" size="50" />
       <input type="submit" value="GRAVAR!"/>     
       </form>
   </body>
</html>

 

operacoes.php

<?php
session_start();

//verificação de erros do php, e mostrar na tela
ini_set( 'display_errors', true );
error_reporting( E_ALL );

//inclusão da conexão do banco de dados
include "conecta_mysql.inc";

$id = "";
$nome = $_POST['nome'];
$_SESSION['nome'] = $nome;

//seleciona o ultimo id da tabela alunos
$cod_alu_fk = mysql_query("SELECT last_insert_id (id_aluno) as last_id from alunos order by id_aluno desc limit 1");
$grava_fk = mysql_result($cod_alu_fk, 0, 'last_id'); //mostra o resultado da seleção
$cod_alu_certo = $grava_fk+1; //acrescenta +1 na seleção.
$resp1 = $_POST["resposta1"];

//se a funação do botão for proximo...
if ($_GET['funcao'] == "proximo")
   {   
       header("Location: respostas.php");
   }

//se a função do botão for gravar faça....
if ($_GET['funcao'] == "gravar")
{

       //GRAVA INFORMAÇÕES ALUNO
       $sql = "INSERT INTO alunos VALUES";
       $sql .= "('$id', '$nome')";
       $resultado = mysql_query ($sql) or die (mysql_error());

       //GRAVA INFOMAÇÕES PERGUNTA
       $sql = "INSERT INTO respostas VALUES";
       $sql .= "('', '$cod_alu_certo', '$resp1')";
       $resultado = mysql_query ($sql) or die (mysql_error());

       echo "Obrigado por se cadastrar!!!";

       mysql_close($conexao);       
       session_destroy();
}       
?>

 

porém quando vo gravar as informações no bd, ele grava tudo, menos o nome, passado por sessão.

e da o seguinte erro:

Notice: Undefined index: nome in C:\Program Files (x86)\EasyPHP-5.4.0RC4\www\testeRelacionamento\operacoes.php on line 11

$nome = $_POST['nome'];

mas caso eu tirar ela da erro:

 

Notice: Undefined variable: nome in C:\Program Files (x86)\EasyPHP-5.4.0RC4\www\testeRelacionament\operacoes.php on line 12

Notice: Undefined variable: nome in C:\Program Files (x86)\EasyPHP-5.4.0RC4\www\testeRelacionamento\operacoes.php on line 32

$_SESSION['nome'] = $nome;
$sql .= "('$id', '$nome')";

 

Tow apanhando...

quem puder me ajudar, agradeço desde já!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

não entendi o por que gravar isso em um session para inserir no banco de dados.

pelo que parece esse POST['nome'] não existe como se você tivesse enviado de um outro form essa informação

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vinicius, tipo o meu objetivo é o seguinte.

Tenhu um cadastro completo de aluno.

e na segunda pagina, tenhu as perguntas.

 

E no banco de dados a tabela perguntas, tem uma foreign key, do codigo do aluno.

E quando eu gravo as informações eu pego i id que acabou de gravar no aluno e gravo nas perguntas.

 

Não posso fazer a gravação separadamente porque se o aluno 1 não concluir as perguntas 1, e vier o aluno 2 e responder as perguntas 2, o aluno 2 ira ficar com o ID do 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei se eu entendi direito, mais veja se isso não resolve o seu problema:

 

<html>
   <body>
       <form name='aluno' action='operacoes.php?funcao=proximo' method='POST'>
       Nome:
       <input type='text' name='nome' maxlength='50' size='50' />
       <input type='submit' value='Enviar'/>
       </form>  
   </body>
</html>

 

Pergunta.php

<html>
   <body>
       <form name="respostas" action="operacoes.php?funcao=gravar" method="POST">
       Pergunta 1:
       <input type="hidden" name="nome" value="<? if(isset($_GET['nome'])) echo $_GET['nome']; ?>" size="50" />  
       <!-- Campo nome vindo por GET -->
       <input type="text" name="resposta1" maxlength="50" size="50" />
       <input type="submit" value="GRAVAR!"/>     
       </form>
   </body>
</html>

 

operacoes.php

<?php

//verificação de erros do php, e mostrar na tela
ini_set( 'display_errors', true );
error_reporting( E_ALL );

//inclusão da conexão do banco de dados
include "conecta_mysql.inc";

$id = "";
$nome = $_POST['nome'];

//seleciona o ultimo id da tabela alunos
$cod_alu_fk = mysql_query("SELECT last_insert_id (id_aluno) as last_id from alunos order by id_aluno desc limit 1");
$grava_fk = mysql_result($cod_alu_fk, 0, 'last_id'); //mostra o resultado da seleção
$cod_alu_certo = $grava_fk+1; //acrescenta +1 na seleção.
$resp1 = $_POST["resposta1"];

//se a funação do botão for proximo...
if ($_GET['funcao'] == "proximo")
   {   
       header("Location: pergunta.php?nome={$nome}"); /* Passa por get */
   }

//se a função do botão for gravar faça....
if ($_GET['funcao'] == "gravar")
{

       //GRAVA INFORMAÇÕES ALUNO
       $sql = "INSERT INTO alunos VALUES";
       $sql .= "('$id', '$nome')";
       $resultado = mysql_query ($sql) or die (mysql_error());

       //GRAVA INFOMAÇÕES PERGUNTA
       $sql = "INSERT INTO respostas VALUES";
       $sql .= "('', '$cod_alu_certo', '$resp1')";
       $resultado = mysql_query ($sql) or die (mysql_error());

       echo "Obrigado por se cadastrar!!!";

       mysql_close($conexao);
}       
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cade o HTML com o formulário que manda para "operacoes.php" ???

 

Não há, ou não está sendo enviado, nenhum valor, pelo menos via POST com o nome 'nome'

Compartilhar este post


Link para o post
Compartilhar em outros sites

o que parece que esta ocorrendo é um desencontro entre as informações que você esta recebendo quando acionado o get proximo.

 

Desculpem o duplo post pois bugou quando estava fazendo a requisição

Compartilhar este post


Link para o post
Compartilhar em outros sites

o que parece que esta ocorrendo é um desencontro entre as informações que você esta recebendo quando acionado o get proximo.

 

revendo seu código eu vejo que se o get função for igual a próximo ele vai redirecionar para outra página ai você pode estar perdendo alguns dados que esta tentando enviar.

 

eu não entendi muito bem o seu código mais creio ter entendido seu problema e aqui vai uma solução

 

Crie um get chamado etapa e no seu code faça

 

include "conecta_mysql.inc";
if(isset($_GET['etapa'])){
  switch($_GET['etapa']){
     case 'inicial':
        session_start();
          $_SESSION['nome'] = $_POST['nome'];
          $cod_alu_fk = mysql_query("SELECT last_insert_id (id_aluno) as last_id from alunos order by id_aluno desc limit 1");
$grava_fk = mysql_result($cod_alu_fk, 0, 'last_id'); //mostra o resultado da seleção
$cod_alu_certo = $grava_fk+1; //acrescenta +1 na seleção.
$resp1 = $_POST["resposta1"];
     break;
    case 'etapa2':
       // executa os processos da etapa 2
    break;
  }
}

assim sucessivamente pois não terá conflito entre o seu code.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vinicius, não entendi direito como implementa, vou ter q modicar o meu if ($_GET['funcao'] == "gravar") por if(isset($_GET['etapa']))?

 

mas concordo com o Evandro, quando eu do um header para a pagina de perguntas, acho que essas informações se perdem...

porem tentei colocar da maneira que o fernando me passou

 

respostas.php

<input type="hidden" name="nome" value="<? if(isset($_GET['nome'])) echo $_GET['nome']; ?>" size="50" />  
       <!-- Campo nome vindo por GET -->

 

operacoes.php

header("Location: pergunta.php?nome={$nome}"); /* Passa por get */

 

mas da o seguinte erro: Você tem um erro de sintaxe no seu SQL próximo a 'nome'])) echo $_GET['nome']; ?>')' na linha 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal achei uma solução para meu caso, porem tive que modificar todo meu código.

Bem o que eu queria no final das contas, era passar as informações entre as paginas.

E estava tentado fazer isso com session, porem não estava dando certo.

 

ai segue minha solução.

 

aluno.php

<html>
   <head>
   <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">  
       <title></title>
   </head>

   <body>
       <form name='aluno' action='respostas.php' method='POST'>
       Nome:
       <input type='text' name='nome' maxlength='50' size='50' />
       <input type='submit' value='Enviar'/>
       </form>    
   </body>
</html>

 

resposta.php

<html>
   <head>
   <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">  
       <title></title>
   </head>

   <body>
       <form name="respostas" action="operacoes.php" method="POST">
       Pergunta 1:

       <!-- Foi essa parte que modifiquei, busco as informações por aqui.! -->
       <?php
       $nome = isset($_POST["nome"])?$_POST["nome"]:"";
       if(empty($nome)){echo "O nome não foi informado!";
       exit();
       }else{
       echo '<input type="hidden" name="nome" value="' . $nome . '" />';
       }
       ?>


       <input type="text" name="resposta1" maxlength="50" size="50" />
       <input type="submit" value="Gravar!"/>

       </form>
   </body>
</html>

 

<?php

//verificação de erros do php, e mostrar na tela
ini_set( 'display_errors', true );
error_reporting( E_ALL );

//inclusão da conexão do banco de dados
include "conecta_mysql.inc";

$id = "";
//agora está buscando normalmente o nome com o post!
$nome = $_POST['nome'];

$cod_alu_fk = mysql_query("SELECT id_aluno as last_id FROM alunos ORDER BY id_aluno DESC LIMIT 1");//seleciona o ultimo id cadastrado na tabela alunos.
$grava_fk = mysql_result($cod_alu_fk, 0, 'last_id');
$cod_alu_certo = $grava_fk+1; //acrescenta +1 no id do usuario, pq senão ele pega o anterior.
$resp1 = $_POST["resposta1"];

       //GRAVA INFORMAÇÕES DO ALUNO
       $sql = "INSERT INTO alunos VALUES";
       $sql .= "('$id', '$nome')";
       $resultado = mysql_query ($sql) or die (mysql_error());

       //GRAVA INFORMAÇÕES DAS PERGUNTAS
       $sql = "INSERT INTO respostas VALUES";
       $sql .= "('', '$cod_alu_certo', '$resp1')";
       $resultado = mysql_query ($sql) or die (mysql_error());

       echo "$nome<br />";
       echo "Obrigado por se cadastrar!!!";

       mysql_close($conexao);


?>

 

Obrigado a todo mundo que tentou me ajudar!

Espero que com essa solução, consiga ajudar alguem também!

 

Valeu.

Até o proximo Tópico.

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.