Ir ao conteúdo
  • Cadastre-se

PHP relacionamento tabelas emprestimo e livro mysql PHP


Posts recomendados

Olá Nerds tenho uma duvida com meu código, vamos la...
Estou desenvolvendo um Software para cada botao clicado em "Retira" ele efetua um emprestimo de um determinado Livro no meu banco de dados porém, ele nao sai do meu banco de dados ok?!
A duvida é sei que tenho que utilizar uma $query = "UPDATE tabela SET Condicação WHERE = '''''''''''' "; mas nao estou conseguindo fazer esse botao inserir o emprestimo gostaria de saber se minha tabela emprestimo e livros estão certos caso nao estejam por favor me ajudem vou passar o codigo do PHP e SQL ok?! vamos la

tabela Livro:

create table livro (liv_id primary key auto_increment, 
liv_titulo varchar(40), liv_autor varchar(40),
liv_isbn10 varchar(40), liv_isbn13 varchar(40),
liv_preco int);


 

create table emprestimos (id primary key auto_increment,
liv_emprestados varchar(40),
id_user int, data timestamp);



agora codigo PHP:

<?php  
$con = mysqli_connect("localhost", "root", "","systembook");
$db = mysqli_select_db($con,"systembook");
$query = mysqli_query($con,"SELECT * FROM livro");
while ($row_dados = mysqli_fetch_assoc($query)){
    echo '<tr>';
    echo '<td>' . $row_dados['liv_titulo'] . '</td>';
    echo '<td>' . $row_dados['liv_autor'] . '</td>';
    echo '<td>' . $row_dados['liv_isbn10'] . '</td>';
    echo '<td>' . $row_dados['liv_isbn13'] . '</td>';
    echo"<td>
        <form method='POST' action='retira.php'>
        <input type='submit' name='retira' value='Retirar'>
        </form>
         </td>";
    echo '</tr>';
      }
echo "</table>";
echo "<br>";
$query = "UPDATE livro SET liv_titulo = 1 WHERE liv_id = 1";
    
echo"<button onclick='goBack()'>Voltar</button>
<script>
function goBack() {
  window.history.back()
}
</script>";
?>

a duvida é como devo escrever na minha query pois eu bem sei que esta errada ela na atualiza nada no banco de dados obrigado se alguem puder dar uma luz ai

Link para o comentário
Compartilhar em outros sites

 

@GabrielSennaMs beleza Gabriel mesmo eu nao colocando ele desse jeito ele nao modifica nada na minha tabela emprestimo!!

E agora??coloquei pra ele nem entrar em outra tela como metodo post e sim no proprio script e quando eu dou um vardump pra tratar o erro ele nao faz nada no banco de dados!!

Link para o comentário
Compartilhar em outros sites

Cara ainda não entendi o seu problema porém, eu acho que isso pode te ajudar;

Fiz algumas mudação no seu SQL para criar tabelas

CREATE TABLE `livro` (
    `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    `emprestado` TINYINT(1) NOT NULL DEFAULT '0',
	`liv_titulo` VARCHAR(40), 
    `liv_autor` VARCHAR(40),
	`liv_isbn10` VARCHAR(40),
    `liv_isbn13` VARCHAR(40),
	`liv_preco` INT
);

CREATE TABLE `emprestimos` (
    `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
	`liv_emprestados` INT),
	`id_user` INT, 
    `data` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);

Depois eu criei uma página com o básico para manipular os livro de acordo com o que queria manipular.

<?php

$dadosConnect = array(
	"HOST"=>"localhost", // Local onde está o host do mysql
	"USER"=>"root", // Usuario de acesso ao mysql
	"PASS"=>"vertrigo", // Senha do usuario de acesso
	"DB"=>"systembook" // Nome do bando de dados onde está as tabelas do projeto
);

$con = mysqli_connect($dadosConnect["HOST"], $dadosConnect["USER"], $dadosConnect["PASS"]); // Criando uma conexão com o banco de dados

$db = mysqli_select_db($con, $dadosConnect["DB"]); // Selecionado o banco de dados

$msg = null; // variaval de msg definida como null

if(!$con and !$db){ // Verificando se a conexão foi bem sucedida
    die("Connection failed: " . mysqli_connect_error());
}

if($_SERVER['REQUEST_METHOD']=='POST'){ // Verificar se ocorreu uma requisição utilizando o método POST
	if(isset($_POST['action']) and !empty($_POST['action'])){ // Verificando se o pareamento de action foi incerido
		switch ($_POST['action']) { // COndicionamento de acordo com o pareamento action
			case 'emprestar': // Pareamento emprestar
				$query = "SELECT * FROM `livro` WHERE id = '".$_POST['id']."' LIMIT 1"; // Solicitação sql
				$result = mysqli_query($con, $query); // Execuntando a solicitação e salvando na variável
				if(mysqli_num_rows($result) > 0){ // Verificando se a solicitação retorno algum valor 
					$query = "INSERT INTO `emprestimos` (`id`, `liv_emprestados`, `id_user`, `data`) VALUES (NULL, ".$_POST['id'].", ".$_POST['userID'].", CURRENT_TIMESTAMP)"; // Solicitação
					if(mysqli_query($con, $query)){ // Execuntando a solicitação e verificando se a solicitação retorna algum valor
						$query = "UPDATE `livro` SET `emprestado` = '1' WHERE `id` = ".$_POST['id']; // Solicitação sql
						mysqli_query($con, $query);  // Execuntando a solicitação e salvando na variável
						$msg = ("O livro de id: ".$_POST['id']." foi emprestado para o usuario de id: ".$_POST['userID']." com sucesso.");  // retornar uma msg ao usuario se sucesso
					}else{
						$msg = ("Error: <br>".mysqli_error($con)); // retorna uma messagem de erro para o ususario caso haja algum problema
					}
				}else{
					$msg = ("O livro com o id".$_POST['id']." não foi encontrado."); // Retorna uma messagem para o usuario caso o livro não seja encontrado
				}
				break;
			case 'entregar': // Pareamento entregar
				$query = "SELECT * FROM `emprestimos` WHERE `liv_emprestados` = '".$_POST['id']."' LIMIT 1"; // Solicitação sql
				$result = mysqli_query($con, $query);  // Execuntando a solicitação e salvando na variável
				if(mysqli_num_rows($result) > 0){  // Execuntando a solicitação e verificando se a solicitação retorna algum valor
					$query = "DELETE FROM `emprestimos` WHERE `liv_emprestados` = ".$_POST['id']; // Solicitação sql
					mysqli_query($con, $query); // Execuntando a solicitação
					$query = "UPDATE `livro` SET `emprestado` = '0' WHERE `id` = ".$_POST['id']; // Solicitação sql
					mysqli_query($con, $query); // Execuntando a solicitação
					$msg = ("O livro de id:".$_POST['id']."Foi devolvido");// retornar uma msg ao usuario se sucesso
				}else{
					$msg = ("O livro com o id".$_POST['id']." não foi enprestado."); // retorna uma messagem de erro para o ususario caso o id do livro não seja encontrado
				}
				break;
			default:
				$msg = ("Ação invalida!"); // Retorna uma messagem para o usuario caso o pareamento não seja encontrado no condicionamento
				die();
		}
	}
}
?>

<!DOCTYPE html>
<html>
<head>
	<title>Livros</title>
</head>
<body>
	<div style="width: 900px; margin: 0 auto;">
		<br>
		<?php
			if($msg != null){
				echo("<h4>".$msg."</h4><hr>");
			}
			$query = "SELECT * FROM `livro`  WHERE `emprestado` = 0";
			$result = mysqli_query($con, $query);
			if(mysqli_num_rows($result) > 0){
				echo("<h4>Livros disponiveis</h4>");
				while($row = mysqli_fetch_assoc($result)){
					echo("<p>");
					echo("<span><b>ID: </b></span>".$row["id"]." <span><b>Titulo: </b></span> ".$row["liv_titulo"]." - ");
					echo("</p>");
				}
				$query = "SELECT * FROM `livro` WHERE `emprestado` = 0 ";
				$result = mysqli_query($con, $query);
			?>
				<hr>
				<h4>Formulário para emprestar um livro</h4>
				<form action="/" method="POST">
					<input type="hidden" name="action" value="emprestar">
					<label>ID do livro</label><br>
					<select name="id" style="width: 80px;">
						<?php
							while($row = mysqli_fetch_assoc($result)){
								echo('<option value="'.$row["id"].'">'.$row["id"].'</option>');
							}
						?>
					</select><br><br>
					<label>ID do Usuario que você vai emprestar</label><br>
					<input type="text" name="userID">
					<br><br>
					<input type="submit" value="Emprestar">
				</form>
				<br><hr>
			<?php	

			}else{
				echo("Nenhum livro disponivel.");
			}
			$query = "SELECT * FROM `emprestimos`";
			$result = mysqli_query($con, $query);
			if(mysqli_num_rows($result) > 0){
				echo("<h4>Livros emprestados</h4>");
				while($row = mysqli_fetch_assoc($result)){
					echo("<p><span><b>ID: </b></span>".$row["liv_emprestados"]." <span><b>ID do usuario: </b></span> ".$row["id_user"]."</p>");
				}
			?>
			<hr>
			<h4>Formulário para entragar um livro</h4>
			<form action="/" method="POST">
				<input type="hidden" name="action" value="entregar">
				<label>ID do livro</label><br>
				<select name="id" style="width: 80px;">
					<?php
						$query = "SELECT * FROM `emprestimos`";
						$result = mysqli_query($con, $query);
						while($row = mysqli_fetch_assoc($result)){
							echo('<option value="'.$row["liv_emprestados"].'">'.$row["liv_emprestados"].'</option>');
						}
					?>
				</select><br><br>
				<input type="submit" value="Entregar">
			</form>
			<br><hr>
		<?php
			}else{
				echo("Nenhum livro foi emprestado");
			}
		?>


	</div>

</body>
</html>

 

Link para o comentário
Compartilhar em outros sites

  • Moderador

@Rafajeck Basicamente, suas tabelas faltam coisas. Por isso não está funcionando do jeito que espera.

Precisa criar um relacionamento de 1:N entre a tabela livros e emprestimos.

 

Para isso, a tabela emprestimos, precisa ter um campo INT como chave estrangeira do campo ID que é chave primária na tabela livros.

Lembre-se de atribuir um índice(index) na tabela emprestimos, que é o campo que será a chave estrangeira. 

Este é o jeito mais indicado.

 

Assim dessa forma, você registra em uma linha o ID do usuário, o ID do livro, o preço e a data de locação.

Link para o comentário
Compartilhar em outros sites

@GabrielSennaMs Gabriel obrigado pelo FeedBack mas não precisava complexibilisar tanto so queria onde coloquei um botao retira como  voce pode ter visto na minha <td> e retirar o livro que ja esta na <td> apenas isso nao prescissava colocar mais um formulário nao so quero que ele entre na minha tabela emprestimos tudo que eu apertar no botao retira so isso, ai ele efetua o emprestimo e acabou.

OBS.:"Sei que esse deve ser o jeito mais certo porém nao quero deixar difícil de escrever so quero deixar ele o mais funcional possivel e basico é um trabalho de faculdade pra nota, muito obrigado gabriel de verdade!!613287367_TelaBibliotecausuario.thumb.jpg.685db9d42e38a71da4779ce322d6398f.jpg

adicionado 1 minuto depois

@DiF Dif esse é a minha dificuldade sao as Foreing key 😖 , elas me deixam um pouco confuso quando uso o workbench

Link para o comentário
Compartilhar em outros sites

@Rafajeck Cara não existe maneira mais certa e sim maneira mais funcional.

Se você quer algo simples eu recomento você a usar um elemento a(Link) passando a id do livro que você quer retirara no link utilizando o método GET.

Caso você ainda tenha duvida pode pergunta de boa.

Link para o comentário
Compartilhar em outros sites

@GabrielSennaMs nossa agora sim era isso mesmo que eu queria algo simples gabriel pode ate ser mesmo modo GET nao tem problema pois é só um livro mesmo nada que tenha que ser digamos assim "Escondido" como no metodo POST isso mesmo gabriel obrigado , vou tentar fazer pelo elemento a(Link) caso nao consiga a gente volta a se falar obrigado amigo!!

 

Obs.:"Consegui porém falta modificação na Query para update eu acredito quando eu clicar no o link ele aceitar o emprestimo e atualizar meu banco de dados tanto o livro quanto o emprestimo".

 

bom gabriel utilizei essa query nao deu erro nenhum  mas tambem nao inseriu nada no banco de dados....kkkkk

<?php 
$con = mysqli_connect("localhost", "root", "","systembook");
$db = mysqli_select_db($con,"systembook"); 
$query = "INSERT INTO emprestimos id VALUES (SELECT liv_id FROM livro)";
$query = "UPDATE livro SET liv_titulo WHERE liv_id = 1";

 

eu sei que erro de logica perdao a minha ignorância estou aprendendo ainda nao tenho nenhum 1 ano ainda em desenvolvimento..

Link para o comentário
Compartilhar em outros sites

@Rafajeck Bom tem três erros bobos, o problema é que você está escrevendo a solicitação sql porém, você não pede para o sql executar o query.

$con = mysqli_connect("localhost", "root", "","systembook");
$db = mysqli_select_db($con,"systembook"); 
$query = "INSERT INTO emprestimos id VALUES (SELECT liv_id FROM livro)"; // isso vai dar erro
mysqli_query($con, $query); // isso vai fazer a consulta ao bando de dados
$query = "UPDATE livro SET liv_titulo WHERE liv_id = 1"; // isso também
mysqli_query($con, $query); // isso vai fazer a consulta ao bando de dados

O primeiro query e o segundo não vão funcionar, você não está passando uma solicitação valida.

Isso não vai funcionar 

INSERT INTO emprestimos id VALUES (SELECT liv_id FROM livro)

Isso vai

INSERT INTO `emprestimos` (`id`, `liv_emprestados`, `id_user`, `data`) VALUES (NULL, "liv_emprestados", "id do usuario", CURRENT_TIMESTAMP)

Sem-t-tulo.png

 

E melhor você estudar mais um pouco sobre as consuntas ao sql via php.

Esse é o melhor site para aprender sobre phpsql que eu conheço.

https://www.w3schools.com

Link para o comentário
Compartilhar em outros sites

26 minutos atrás, GabrielSennaMs disse:

INSERT INTO `emprestimos` (`id`, `liv_emprestados`, `id_user`, `data`) VALUES (NULL, "liv_emprestados", "id do usuario", CURRENT_TIMESTAMP)

 

bom acho que tirando print das minhas tabelas relacionais fica melhor pra gente se entender, gabriel tentei inserir do jeito dessa query mas tb nao deu, dei uma modifica porque faltou a coluna ali de liv_id que modifiquei agora porque pensei assim tem que ter um Liv_id na tabela livro e uma na tabela emprestimo pra eles se relacionarem , no codigo quando debug ele nao da erro algum mas tb nao inseri na query ou seja nao insere no BD dados nenhum!!

tabela emprestimo.jpg

tabela livro.jpg

Link para o comentário
Compartilhar em outros sites

Quando você escreveu a consulta você fez a solicitação usando o mysqli_query($con, $query)?

Caso você tenha feito isso usando o exemplo meu acima, utilize a função "mysqli_error($con)" para verificar o possível erro.

$query = "INSERT INTO `emprestimos` (`id`, `liv_emprestados`, `id_user`, `data`) VALUES (NULL, "liv_emprestados", "id do usuario", CURRENT_TIMESTAMP)";
if (mysqli_query($con, $query)) {
    echo "A solicitação foi efetuado com exito pelo mysql";
} else {
    echo "Ocorreu um erro na solicitação: ".$query."<br>".mysqli_error($con);
}

 

Link para o comentário
Compartilhar em outros sites

@GabrielSennaMs gabriel cara quase la..kkkkk
vou mandar um print do banco pra você ver que ate foi inseriu mas ele nao sai a disponibilidade no banco livro claro porque nao entrei com uma query relacional dizendo olha você clicou no botao retirar e ele saiu da tabela livro e entrou em tabela emprestimo dizendo que nao esta mais disponivel ate o usuario devolver o mesmo beleza??ate ai eu entendo que vai outra query porém quando eu clico no a(Link) que criei que voce mesmo deu a ideia ele nao insere o emprestimo do titulo do livro tendeu?!ele fica em branco ta uma olhada no print , ou seja, ele so entra o que eu "CHUMBO" na query !!!

 

OBS.:"Lembrando que a coluna condicao é a forma que coloquei dizendo olha 1 = emprestado e 0 = disponivel posso fazer isso ne nesta tabela?!"1442918059_tabelaemprest.thumb.jpg.c754f132d3f3dff4e2b8a882d006b39b.jpg

Link para o comentário
Compartilhar em outros sites

Bom depois que você inseriu o empréstimo do livro na tabela empréstimos você deve atualizar as condições do livro

O problema é que você colocou a condição do livro na tabela erada.

No meu primeiro exemplo eu tenho na tabela livro um valor chamado emprestado, com esse valor eu verifico se ele esta disponível ou não.

SELECT * FROM `livro`  WHERE `emprestado` = 0

Com essa consulta acima eu retorno somente os livros disponíveis.

No meu exemplo quando alguém retira um livro esse valor e atualizado para 1

UPDATE `livro` SET `emprestado` = '1' WHERE `id` = id do livro

Assim na consulta acima eu só retorno os livro que o valor emprestado é 0.

E quando o livro é devolvido eu modifico esse valor para 0.

UPDATE `livro` SET `emprestado` = '0' WHERE `id` = id do livro

Assim eu disponibilizo o livro para ser emprestado novamente.

A tabela "emprestimos" só deve funcionar com um registro de saída.

 

Da maneira que você colocou o sistema teria que pegar todos os livro depois fazer uma consulta para cada livro e verificar as condições dele.

Link para o comentário
Compartilhar em outros sites

  • Moderador

@Rafajeck Então. aí está o seu problema com o código. você quer fazer as requisições com relacionamentos, mas suas tabelas não tem esse relacionamento, portanto não funcionaria  corretamente.

 

Veja este vídeo que mostro como fazer os relacionamentos:

PS: faça pelo phpmyadmin direto. o Workbench é melhor mas deixa mais complexo.

PS2:  Esta é a primeira parte do vídeo. tem uma parte 2.

 

Antes de lidar com isso, você tem que aprender o básico da criação das tabelas e relacionamentos. Pois é na tabela emprestimo que você vai manipular a entrada e saida.

 

Deixe a tabela livros, apenas para dados do livro.  Então é a tabela empréstimos que fará o controle.

 

Cada registro dessa tabela vai conter:  ID da linha,  ID do usuário, ID do livro, data de retirada, data de devolução,  pagamento(se necessário já que o usuário pode estender o tempo com o empréstimo do livro. 

 

Por regras das normas formais, se quiser um status de" locado ou disponível"  crie uma nova tabela chamada  "situacao" e mande o ID primário dessa tabela para um ID chave estrangeira na tabela de empréstimos.

 

Link para o comentário
Compartilhar em outros sites

@GabrielSennaMs @DiF Bom eu vou dar mais uma estudada aqui pra tentar resolver isso , tenho muito o que aprender ainda mas o gabriel pelo o que voce me passou ja abriu muito mesmo a minha mente , ja consegui resolver a tela de livros emprestados que quando estiverem emprestados eles nao vão aparecer na grid que montei valeu, tenho um longo caminho pra percorrer, nao vou mais ficar tomando tempo de vocês obrigado por tudo ai forte abraço e ate uma proxima 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...