Ir para conteúdo

POWERED BY:

Arquivado

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

Ricardo Amaral_35870

"Preencher" foreign keys

Recommended Posts

Olá senhores,

 

Estou quebrando a cabeça aqui com algumas páginas que estou tentando montar. Vou fazer uma espécie de teste, ondem o usuário se cadastra e responde algumas perguntas. Vou resumir mais ou menos qual é minha intenção:

 

  • O usuário se cadastra (nome, data de nascimento, sexo, etc), através de um formulário simples e que depois vai ser inserido num banco mysql (estou usando o phpmyadmin).
  • Após fazer o cadastro, o usuário já é direcionado para 1ª pergunta
  • Pretendo depois fazer uma página para a visualização das respostas

 

O banco já esta criado, com as seguintes tabelas: aluno (id_aluno(PK),nome, datadenasc,sexo,serie) e respostas (id_aluno(FK), resposta1, resposta2 [...] resposta10).

 

A parte do cadastro esta ok, esta inserindo os dados normalmente, criando as linhas da tabela e tal, e o autoincrement do id_aluno esta ok.

 

O Problema esta na segunda parte: após se cadastrar ele já é direcionado a 1ª pergunta, onde a resposta deve ser inserida na tabela com o id_aluno do cadastro que acabou de ser feito. A questão é: como fazer para essa FK ser "importada"? .

 

Bom minha dúvida é essa. Peço desculpas pelos termos que provavelmente estão incorretos, meu entendimento é até que razoável, mas não sei colocar nos termos apropriados :D .

 

Desde já agradeço aos que ajudarem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se eu entendi direito, o valor do primeiro campo, no primeiro INSERT, será o último ID inserido no cadastro do aluno.

 

Sendo assim, o próprio PHP informa, através das bibliotecas de conexão nativas, tal informação. Entretanto isso muda de driver para driver, de biblioteca para biblioteca.

 

Por exemplo: Com as funções mysql_* (as quais não devem mais ser utilizadas), você usaria mysql_insert_id()

 

A partir da segunda resposta te diversas formas de manter esse ID. Você pode passá-lo no action do formulário como perguntas?.php?id=X&user=Y, sendo X o ID da próxima pergnta e Y o ID do usuário.

 

Pode passar através de um hidden field. Como eu imagino que usário deva estar logado para respoder pode passar por sessão e por aí vai.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom obrigado pela resposta. Infelizmente não estou num nível a entender tudo que você explicou, mas vou fazer um esforço.

 

Sim é bem isso mesmo: eu me cadastrei (1-Ricardo-13/03/1991-Masculino). Ai a seguir, ao iniciar o teste, na minha pergunta deve ser inserido o id=1 e a resposta que dei.

 

Não sei se ajuda, mas esses são os códigos que fiz:

 

doCadastro.php

<?php
$con = mysql_connect("localhost","root","");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("banco", $con);

mysql_query("INSERT INTO aluno(nome, data_nasc, escola, serie, classe, sexo)
VALUES
('$_POST[nome]','$_POST[data_nasc]','$_POST[escola]','$_POST[serie]','$_POST[classe]','$_POST[sexo]')");

header('Location: plate2.php');
?>

 

doPlate2.php(que insere a resposta)

<?php
$con = mysql_connect("localhost","root","");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("banco", $con);

[b]mysql_query("INSERT INTO respostas (plate2)
VALUES ('$_POST[resposta2]')");
[/b]
header('Location: plate3.php');
?>

 

Minha dúvida é a parte em negrito: é só colocar o insert da resposta e o ID vai automático? Se sim como faço pra ele continuar nas próximas perguntas?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não.

 

Do jeito que está você só está inserindo o valor da primeira resposta porque no primeiro par de parênteses você deixou bem claro que somente aquela coluna estará recebendo valor.

 

E como uma chave primária não pode ser nula você vai ter um erro.

 

Um jeito mole, mole de você fazer (mesmo que não seja a melhor pedida) seria no header() do doCadastro.php passar uma vriável GET a qual você receberia via $_GET em doPlate2.php e usuria como valor do primeiro campo:

 

doCadastro.php

// ...

header( 'doPlate2.php?id=' . mysql_insert_id() );

doPlate2.php

<?php

// Conexão...

$studentID = ( isset( $_GET['id'] ) ? (int) $_GET['id'] : NULL );

if( is_null( $studentID ) || $studentID <= 0 ) {

   // Erro!
}

mysql_query(

    sprintf(

         'INSERT INTO `respostas` ( `id_aluno`, `resposta_1` ) VALUES ( %d, %s )',

         $studentID, $_POST['resposta2']
    )
);

// FAÇA O mysql_affected_rows() ANTES DE REDIRECIONAR

header( 'Location: plate3.php?id=' . $studentID );

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.