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.