• 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)

Aruba Cloud - Virtual Private Server VPS
0 głosów
1,033 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ź 878 wizyt
pytanie zadane 1 maja 2020 w SQL, bazy danych przez RavenTheReaper Początkujący (280 p.)
0 głosów
1 odpowiedź 1,054 wizyt
pytanie zadane 5 grudnia 2017 w SQL, bazy danych przez Bartess Gaduła (3,630 p.)
0 głosów
0 odpowiedzi 528 wizyt
pytanie zadane 21 stycznia 2020 w Inne języki przez manager96 Bywalec (2,050 p.)

93,335 zapytań

142,331 odpowiedzi

322,415 komentarzy

62,670 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 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...