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

Object Storage Arubacloud
0 głosów
838 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ź 704 wizyt
pytanie zadane 1 maja 2020 w SQL, bazy danych przez RavenTheReaper Początkujący (280 p.)
0 głosów
1 odpowiedź 1,008 wizyt
pytanie zadane 5 grudnia 2017 w SQL, bazy danych przez Bartess Gaduła (3,630 p.)
0 głosów
0 odpowiedzi 437 wizyt
pytanie zadane 21 stycznia 2020 w Inne języki przez manager96 Bywalec (2,050 p.)

92,632 zapytań

141,502 odpowiedzi

319,882 komentarzy

62,015 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...