• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Insert a klucz obcy (Nie mogę dodać rekordów do bazy via php)

VPS Starter Arubacloud
0 głosów
870 wizyt
pytanie zadane 19 grudnia 2017 w SQL, bazy danych przez Kaloski Nowicjusz (120 p.)

Cześć, chciałbym prosić o radę, co robię nie tak. Nie będę oszukiwał programowanie to nie jest moja domena, ale zdarzają się takie projekty, w których trzeba trochę się tym zająć. 

Do bazy z formularza mam wprowadzić następujące dane:

		if ($link->query("INSERT INTO websiteusers(Id, IdPracownika ,Login, Haslo, Email) VALUES (NULL, '$IdPracownika' , '$login', '$haslo_hash', '$email')"))
					{
						$_SESSION['success']=true;
						header('Location: start.php');
					}
					else
					{
						throw new Exception($link->error);
					}
					
				}
				
				$link->close();
			}

IdPracownika odwołuję się do bazy pracownicy, gdzie mam już mam dodane 3 przykładowe rekordy odpowiednio o ID 1-3.

ID 1 ma już przypisane do siebie konto (wszystko zrobione z poziomu bazy (phpmyadmin)

Dane wprowadzam za pomocą takiego formularza:

<!DOTCTYPE HTML>
<html lang="pl">
<head>
	<meta charset="utf-8" />
	<title>Tworzenie konta dostępu dla pracownika</title>
	<meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1" />
	<style>
		.error
		{
			color:darkred;
			margin-top: 10px;
			margin-bottom: 10px;
		}
	</style>
</head>	
<body>
	<CENTER>Rejestracja
	<form method="post">
	
		Login: <br /> <input type="text" name="Login" /><br />
		
		<?php
			if (isset($_SESSION['e_nick']))
			{
				echo '<div class="error">'.$_SESSION['e_nick'].'</div>';
				unset($_SESSION['e_nick']);
			}
		?>
		
		IdPracownika: <br /> <input type="text" name="IdPracownika" /><br />
			<?php
			if (isset($_SESSION['e_idp']))
			{
				echo '<div class="error">'.$_SESSION['e_idp'].'</div>';
				unset($_SESSION['e_idp']);
			}
		?>
		
		E-mail: <br /> <input type="text" name="email"/><br />
		
		<?php
			if (isset($_SESSION['e_email']))
			{
				echo '<div class="error">'.$_SESSION['e_email'].'</div>';
				unset($_SESSION['e_email']);
			}
		?>
		
				
		Hasło: <br /> <input type="password" name="haslo1" /> <br />
		
		<?php
			if (isset($_SESSION['e_haslo']))
			{
				echo '<div class="error">'.$_SESSION['e_haslo'].'</div>';
				unset($_SESSION['e_haslo']);
			}
		?>
		
		Potwierdź hasło: <br /> <input type="password" name="haslo2" /> <br />
		
			<?php
			if (isset($_SESSION['e_haslo']))
			{
				echo '<div class="error">'.$_SESSION['e_haslo'].'</div>';
				unset($_SESSION['e_haslo']);
			}
		?>
	 
	 <input type="submit" value="Utwórz Konto"/>

Najlepiej byłoby pewnie jakbym mógł IdPracownika, wybrać z rozwijanej listy( która byłaby zgodna ze stanem Tabeli pracownicy) 

Próba przesłania formularza do bazy kończy się niepowodzeniem i zwraca następujący błąd:

 Exception: Cannot add or update a child row: a foreign key constraint fails (`zpi`.`websiteusers`, CONSTRAINT `WebSiteUsers_ibfk_1` FOREIGN KEY (`IdPracownika`) REFERENCES `pracownicy` (`Id`)) 

Jak szukałem informacji na ten temat to nie wiem czy do końca dobrze zrozumiałem, że jeżeli podam klucz obcy to musiałbym wprowadzić pełen rekord, który by się zawierał w tabeli, do której odwołują się ten klucz? Jeżeli tak to jest to dosyć dziwne, ponieważ moim zdaniem nie byłoby sensu robienia jednego wielkiego formularza z dodawaniem danych pracowników oraz danych do konta, ponieważ nie chcę tworzyć zbyt złożonych zapytań, bo jak tak tamta tabela zawiera klucze obce to trochę idea baz danych dla mnie traci sens. 

 

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 736 wizyt
pytanie zadane 1 maja 2020 w SQL, bazy danych przez RavenTheReaper Początkujący (280 p.)
0 głosów
1 odpowiedź 1,018 wizyt
pytanie zadane 5 grudnia 2017 w SQL, bazy danych przez Bartess Gaduła (3,630 p.)
0 głosów
0 odpowiedzi 447 wizyt
pytanie zadane 21 stycznia 2020 w Inne języki przez manager96 Bywalec (2,050 p.)

92,843 zapytań

141,782 odpowiedzi

320,858 komentarzy

62,174 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...