Ir para conteúdo

POWERED BY:

Arquivado

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

Luciano Martins

Insert PHP

Recommended Posts

Estou desenvolvendo um sisteminha básico pra um trabalho de faculdade mesmo, usando PHP e MySQL.
Seguem abaixo um exemplo de código e a imagem do DER, e eu gostaria de saber como vai ficar o código do INSERT ao inserir um professor.

Exemplo:

public function cadastrarProfessor($nome,$email,$especializacao){
			
			$conectar = new DB;
			$conectar = $conectar->conectar();
	
			$inserir = mysql_query("INSERT INTO `escola`.`professor` (`nome`, `idade`, `especializacao`) 
									VALUES ('$nome', '$idade','$especializacao');");
			if( isset($inserir))
				echo 'Cadastro realizado com sucesso';
			else
				echo 'Ops! Erro ao cadastrar, tente novamente depois.';
		}

 


1393126_761341413892477_342628466_n.jpg?

Compartilhar este post


Link para o post
Compartilhar em outros sites

você esta fazendo tudo na mesma pagina ??

 

INSERT INTO TABELA VALUES(NULL,VALOR1,VALOR2,ETC...)

 

manda seu banco mais especificado p gente te ajudar !!

 

Você não viu o DER? O banco está da mesma maneira q no modelo.

Eu só preciso saber o código de INSERT, já que vou inserir na tabela Pessoa e tbm na Professor

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo o que vi da sua entidade de relacionamento, você irá adicionar os dados à tabela PESSOA, a tabela professora irá pegar apenas a ESPECIALIDADE e será vinculado o ID da PESSOA para o PROFESSOR! faça os teste primeiro no seu banco, crie o seu script SQL primeiro, depois que tiver certinho você implanta ele no php.

 

tente isso:

INSERT INTO escola.pessoa, escola.professor  (pessoa.id, pessoa.nome, pessoa.email, professor.especialidade) VALUES ('valor1','valor2','valor3','valor4');

estou te dando mais ou menos como vc deverá fazer para inserir os dados. acredito já deu pra clarear a sua mente agora.

Espero ter ajudado!

 

Att.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiro:

 

$inserir = mysql_query("INSERT INTO `escola`.`professor` (`nome`, `idade`, `especializacao`)
VALUES ('$nome', '$idade','$especializacao');");
if( isset($inserir))

A variavel inserir vai estar setada, na duvida, veja a documentação para saber qual o retorno dela (http://us2.php.net/mysql_query)

 

 

Valor Retornado

Para comandos SELECT, SHOW, DESCRIBE ou EXPLAIN, mysql_query() retorna um resource em caso de sucesso, ou FALSE em caso de falha.

Para outros tipos de consultas SQL, UPDATE, DELETE, DROP, etc, mysql_query() retorna TRUE em caso de sucesso ou FALSE em caso de erro.

O recurso de resultado retornado pode ser passado para mysql_fetch_array(), e outras funções para manipular tabelas de resultados, para acessar os dados retornados.

Use mysql_num_rows() para obter quantas linhas foram retornadas para um comando SELECT ou mysql_affected_rows() para obter quantas linhas foram afetadas por um comando DELETE, INSERT, REPLACE, ou UPDATE.

mysql_query() irá também falhar e retornar FALSE se o usuário não tiver permissões para acessar a tabela(s) referenciadas pela consulta.

 

No caso do insert vc pode colocar apenas if($inserir), já que só retornará true ou false.

 

Pelo que eu entendi, você vai ter que primeiro cadastrar uma pessoa para depois dizer se é um aluno ou professor pegando o id da pessoa e cadastrando na tabela professor.

 

Para você se acostumar, recomendo usar o PDO ou o Mysqli para realizar consultas no banco de dados, já que o mysqlstd (mysql_*) sairá de vez do PHP em um futuro próximo.

 

Ficaria mais ou menos (não o código inteiro, mas a idéia dele):

<?php
......
// Cadastrando pessoa
// Ver prepared statment para entender melhor o código abaixo
// Isso vai te ajudar a proteger suas queries de alguns possiveis ataques
// No caso é um exemplo usando o PDO
$db->prepare('INSERT INTO pessoa (nome, email) VALUES (?,?)');
$db->bindParam(1, $nome);
$db->bindParam(2, $email);
$db->execute();
$idPessoa = $db->lastInsertId();

// Cadastrando o professor
$db->prepare('INSERT INTO professor (fk_id_pessoa, especializacao) VALUES (?, ?)');
$db->bindParam(1, $idPessoa);
$db->bindParam(2, $especializacao);
$db->execute();
---------

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Primeiro:

 

$inserir = mysql_query("INSERT INTO `escola`.`professor` (`nome`, `idade`, `especializacao`)
VALUES ('$nome', '$idade','$especializacao');");
if( isset($inserir))

A variavel inserir vai estar setada, na duvida, veja a documentação para saber qual o retorno dela (http://us2.php.net/mysql_query)

 

 

No caso do insert vc pode colocar apenas if($inserir), já que só retornará true ou false.

 

Pelo que eu entendi, você vai ter que primeiro cadastrar uma pessoa para depois dizer se é um aluno ou professor pegando o id da pessoa e cadastrando na tabela professor.

 

Para você se acostumar, recomendo usar o PDO ou o Mysqli para realizar consultas no banco de dados, já que o mysqlstd (mysql_*) sairá de vez do PHP em um futuro próximo.

 

Ficaria mais ou menos (não o código inteiro, mas a idéia dele):

<?php
......
// Cadastrando pessoa
// Ver prepared statment para entender melhor o código abaixo
// Isso vai te ajudar a proteger suas queries de alguns possiveis ataques
// No caso é um exemplo usando o PDO
$db->prepare('INSERT INTO pessoa (nome, email) VALUES (?,?)');
$db->bindParam(1, $nome);
$db->bindParam(2, $email);
$db->execute();
$idPessoa = $db->lastInsertId();

// Cadastrando o professor
$db->prepare('INSERT INTO professor (fk_id_pessoa, especializacao) VALUES (?, ?)');
$db->bindParam(1, $idPessoa);
$db->bindParam(2, $especializacao);
$db->execute();
---------

 

Obrigado, vou estudar como é feito em PDO e vou passar a utilizar apenas o PDO mesmo...já tinha até baixado umas video aulas mais ainda não estudei a fundo. Valeu, assim que eu conseguir eu posto como ficou!

Compartilhar este post


Link para o post
Compartilhar em outros sites

De qualquer modo, antes eu queria conseguir realizar só usando a query e tentei assim...

<?php 	
	include("DB.class.php");
	
	class Cadastro{
		
		public function cadastrarProfessor($nome,$email,$especializacao){
			
			$conectar = new DB;
			$conectar = $conectar->conectar();
	
			$inserir = mysql_query("INSERT INTO `escola`.`pessoa` (`nome`, `email`) VALUES ('$nome', '$email');");

			if( isset($inserir))
				echo 'Cadastro de Pessoa realizado com sucesso<br>';
			else
				echo 'Ops! Erro ao cadastrar Pessoa, tente novamente depois.<br>';
				
			$fk_id_pessoa = mysql_query("SELECT last_insert_id(id_pessoa) FROM escola.pessoa;");
				
			$inserirProf = mysql_query("INSERT INTO `escola`.`professor` (`fk_id_pessoa`, `especializacao`) 
										VALUES ('$fk_id_pessoa', '$especializacao');");
			
			if( isset($inserirProf))
				echo 'Cadastro de Professor (ID-'.$fk_id_pessoa.') realizado com sucesso.<br>';
			else
				echo 'Ops! Erro ao cadastrar Professor, tente novamente depois.<br>';
				
			echo '<h3><a href="home.php">Voltar - Home</a></h3>';
		}
	}
?>

Só que esta com um problema, ELE INSERE UMA PESSOA, porém NÃO insere em Professor. Eu fiz uma alteração pra retornar o valor da variavel fk_id_pessoa pra ver se ajuda a Debugar.

 

Olhá só como está ficando a saída:

 

Cadastro de Pessoa realizado com sucesso
Cadastro de Professor (ID-Resource id #6) realizado com sucesso.

Voltar - Home

 

Acredito que não está inserindo em Professor por causa desse retorno do ID. Alguém sabe oq posso fazer?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você não esta mandando retornar o id da pessoa, só esta executnado a querie, não retornando seu resultado (ver mysql_fetch_array() para isso).

 

PDO é complicado né? Rs (recomendo estudar quando tiver tempo).

 

<?php

.........
$fk_id_pessoa = mysql_insert_id();
.........

Utilize a função mysqli_insert_id() para pegar o ultimo id cadastrado no banco (http://us1.php.net/manual/pt_BR/function.mysql-insert-id.php)

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso aqui também não esta correto:

 

if( isset($inserir))

use apenas


if($inserir)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você não esta mandando retornar o id da pessoa, só esta executnado a querie, não retornando seu resultado (ver mysql_fetch_array() para isso).

 

PDO é complicado né? Rs (recomendo estudar quando tiver tempo).

 

<?php

.........
$fk_id_pessoa = mysql_insert_id();
.........

Utilize a função mysqli_insert_id() para pegar o ultimo id cadastrado no banco (http://us1.php.net/manual/pt_BR/function.mysql-insert-id.php)

 

Valeuu!!

Deu cert0 aqui. Ficou assim:

 

<?php 	
	include("DB.class.php");
	
	class Cadastro{
		
		public function cadastrarProfessor($nome,$email,$especializacao){
			
			$conectar = new DB;
			$conectar = $conectar->conectar();
	
			$inserir = mysql_query("INSERT INTO `escola`.`pessoa` (`nome`, `email`) VALUES ('$nome', '$email');");

			if( isset($inserir))
				echo 'Cadastro de Pessoa realizado com sucesso<br>';
			else
				echo 'Ops! Erro ao cadastrar Pessoa, tente novamente depois.<br>';
				
			$fk_id_pessoa = mysql_insert_id();
				
			$inserirProf = mysql_query("INSERT INTO `escola`.`professor` (`fk_id_pessoa`, `especializacao`) 
										VALUES ('$fk_id_pessoa', '$especializacao');");
			
			if( isset($inserirProf))
				echo 'Cadastro de Professor (ID-'.$fk_id_pessoa.') realizado com sucesso.<br>';
			else
				echo 'Ops! Erro ao cadastrar Professor, tente novamente depois.<br>';
			echo '<h3><a href="home.php">Voltar - Home</a></h3>';
		}
	}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Luciano, como dito nos posts #5 e #9, o seguinte trecho do seu código esta incorreto:

 

<?php
......
if( isset($inserir))
.....

O problema é:

A função isset() verifica se a variavel existe, como ela existe sempre vai retornar TRUE, assim sempre vai informar que o cadastro foi feito com sucesso.

 

Como é um INSERT, a função mysql_query() vai retornar TRUE ou FALSE, então só precisaria disso:

<?php

.....
if($inserir)
.....

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Luciano, como dito nos posts #5 e #9, o seguinte trecho do seu código esta incorreto:

 

<?php
......
if( isset($inserir))
.....

O problema é:

A função isset() verifica se a variavel existe, como ela existe sempre vai retornar TRUE, assim sempre vai informar que o cadastro foi feito com sucesso.

 

Como é um INSERT, a função mysql_query() vai retornar TRUE ou FALSE, então só precisaria disso:

<?php

.....
if($inserir)
.....

 

Blza, corrigi este problema tbm, obrigado!

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.