Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][SQL][MySQL]Relacja pomiedzy dwoma tabelami i inserty
viamarimar
post
Post #1





Grupa: Zarejestrowani
Postów: 303
Pomógł: 1
Dołączył: 24.09.2011

Ostrzeżenie: (10%)
X----


Witam mam strukture tabel jak ponizej. Problem w tym ze gdy probuje dodac jakiegos uzytkownika do tej struktury za pmoca insertow ponizej mam 0 w polach `dane_users_id` i `users_dane_id` czyli tam gdzie powinny byc powiazania relacjyjne? Powie mi ktos co robie zle lub wskaze jakis przyklad na ktorym moglbym sie zawzrorowac zeby wykonac cos podobnego czyli relacja pomiedzy dwiema tabelami i wpisanie do bazy.

  1. mysql_query("SET FOREIGN_KEY_CHECKS=0");
  2.  
  3. $zapytanie="INSERT INTO ".$prefix."users ( `users_id` , `users_login` , `users_haslo` , `users_token` , `users_aktywny`)
  4. VALUES ( '', '".$_POST['login']."', '$hash', '$s', '0')";
  5. mysql_query($zapytanie) or die(mysql_error());
  6.  
  7. $zapytanie2="INSERT INTO ".$prefix."dane ( `dane_id` , `dane_imie` , `dane_nazwisko` , `dane_email`)
  8. VALUES ( '', '".$_POST['imie']."', '".$_POST['nazwisko']."', '".$_POST['email']."')";
  9. mysql_query($zapytanie2) or die(mysql_error());


  1. -- phpMyAdmin SQL Dump
  2. -- version 4.0.9
  3. -- <a href="http://www.phpmyadmin.net" target="_blank">http://www.phpmyadmin.net</a>
  4. --
  5. -- Host: localhost
  6. -- Czas wygenerowania: 12 Lut 2015, 14:49
  7. -- Wersja serwera: 5.5.34
  8. -- Wersja PHP: 5.3.27
  9.  
  10. SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
  11. SET time_zone = "+00:00";
  12.  
  13.  
  14. /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
  15. /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
  16. /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
  17. /*!40101 SET NAMES utf8 */;
  18.  
  19. --
  20. -- Baza danych: `projekt2`
  21. --
  22.  
  23. -- --------------------------------------------------------
  24.  
  25. --
  26. -- Struktura tabeli dla tabeli `wpl_dane`
  27. --
  28.  
  29. CREATE TABLE IF NOT EXISTS `wpl_dane` (
  30. `dane_id` int(11) NOT NULL AUTO_INCREMENT,
  31. `dane_users_id` int(11) NOT NULL,
  32. `dane_imie` varchar(50) NOT NULL,
  33. `dane_nazwisko` varchar(50) NOT NULL,
  34. `dane_email` varchar(50) NOT NULL,
  35. PRIMARY KEY (`dane_id`),
  36. KEY `usersdane_users_id` (`dane_users_id`)
  37. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
  38.  
  39. --
  40. -- Zrzut danych tabeli `wpl_dane`
  41. --
  42.  
  43. INSERT INTO `wpl_dane` (`dane_id`, `dane_users_id`, `dane_imie`, `dane_nazwisko`, `dane_email`) VALUES
  44. (1, 1, 'ssssk', 'ssss', 'p.sssss@gmail.com');
  45.  
  46. -- --------------------------------------------------------
  47.  
  48. --
  49. -- Struktura tabeli dla tabeli `wpl_users`
  50. --
  51.  
  52. CREATE TABLE IF NOT EXISTS `wpl_users` (
  53. `users_id` int(11) NOT NULL AUTO_INCREMENT,
  54. `users_dane_id` int(11) NOT NULL,
  55. `users_login` varchar(50) NOT NULL,
  56. `users_haslo` varchar(50) NOT NULL,
  57. `users_token` varchar(10) NOT NULL,
  58. `users_aktywny` int(11) NOT NULL,
  59. PRIMARY KEY (`users_id`),
  60. KEY `users_usersdane_id` (`users_dane_id`)
  61. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
  62.  
  63. --
  64. -- Zrzut danych tabeli `wpl_users`
  65. --
  66.  
  67. INSERT INTO `wpl_users` (`users_id`, `users_dane_id`, `users_login`, `users_haslo`, `users_token`, `users_aktywny`) VALUES
  68. (1, 1, 'root', '6758e143593bd7ffbc9c9996fed95890ab7db3debae19b1a9f', '4cEKyhKtoC', 0);
  69.  
  70. --
  71. -- Ograniczenia dla zrzutów tabel
  72. --
  73.  
  74. --
  75. -- Ograniczenia dla tabeli `wpl_dane`
  76. --
  77. ALTER TABLE `wpl_dane`
  78. ADD CONSTRAINT `fk_users` FOREIGN KEY (`dane_users_id`) REFERENCES `wpl_users` (`users_id`);
  79.  
  80. --
  81. -- Ograniczenia dla tabeli `wpl_users`
  82. --
  83. ALTER TABLE `wpl_users`
  84. ADD CONSTRAINT `wpl_users_ibfk_1` FOREIGN KEY (`users_dane_id`) REFERENCES `wpl_dane` (`dane_id`);
  85.  
  86. /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
  87. /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
  88. /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;


Ten post edytował viamarimar 12.02.2015, 15:54:06
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 1)
robertpiaty
post
Post #2





Grupa: Zarejestrowani
Postów: 113
Pomógł: 18
Dołączył: 7.10.2007
Skąd: Pruszków

Ostrzeżenie: (0%)
-----


Po pierwsze masz małą ilość kolumn w jednej i drugiej tabeli więc ja bym to wszystko w jednej tabeli.

Po drugie jak już robisz relację to po co tak?
Cytat
ALTER TABLE `wpl_dane`
ADD CONSTRAINT `fk_users` FOREIGN KEY (`dane_users_id`) REFERENCES `wpl_users` (`users_id`);

--
-- Ograniczenia dla tabeli `wpl_users`
--
ALTER TABLE `wpl_users`
ADD CONSTRAINT `wpl_users_ibfk_1` FOREIGN KEY (`users_dane_id`) REFERENCES `wpl_dane` (`dane_id`);


Robisz relację z pierwszej tabeli do drugiej a potem z drugiej do pierwszej nerdsmiley.png

Jak się uparłeś że to ma być w dwóch tabelach to moim zdaniem powinna tu być relacja 1:1 i wystarczy tylko jeden Foreign Key

Wracając do pytania To proponuję zrobić tak:
Dodaj na kluczach głównych UNSIGNED co sprawi że będą mogły być tam tylko liczby dodatnie

W insertach nie podawaj kolumny która jest FK (mają przecież auto_increment).

Wywal z tabeli z users kolumnę i klucz do tabeli dane

Zakładam że login i hasło jest unikalne.

  1. $zapytanie="INSERT INTO ".$prefix."users ( `users_login` , `users_haslo` , `users_token` , `users_aktywny`)
  2. VALUES ( '".$_POST['login']."', '$hash', '$s', '0')";
  3. mysql_query($zapytanie) OR die(mysql_error());
  4.  
  5. $zapytanie2="INSERT INTO ".$prefix."dane (`dane_users_id`, `dane_id` , `dane_imie` , `dane_nazwisko` , `dane_email`)
  6. SELECT users_id, '".$_POST['imie']."', '".$_POST['nazwisko']."', '".$_POST['email']." FROM ".$prefix."users WHERE `users_login` = '".$_POST['login']."' AND `users_haslo` = '$hash' LIMIT 1";
  7. mysql_query($zapytanie2) OR die(mysql_error());


I taka rada na koniec - nie dodawaj żmienne do SQL bezpośrednio z formularza bo ktoś Ci bazę danych zniszczy. Poczytaj o PDO w manualu PHP



--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 14:20