Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Relacje
Forum PHP.pl > Forum > Bazy danych > MySQL
skala91
Witam, stworzyłem w bazie mysql baze gdzie znajdują się 2 tabele

users:

  1. CREATE TABLE `users` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `nick` text collate utf8_polish_ci NOT NULL,
  4. `nazwa` text collate utf8_polish_ci NOT NULL,
  5. `id_hasla` int(11) NOT NULL,
  6. PRIMARY KEY (`id`),
  7. KEY `haslo` (`id_hasla`)
  8. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=2 ;


hasla:

  1. CREATE TABLE `hasla` (
  2. `id_hasla` int(11) NOT NULL AUTO_INCREMENT,
  3. `haslo` varchar(50) collate utf8_polish_ci NOT NULL,
  4. PRIMARY KEY (`id_hasla`)
  5. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=2 ;


Chciałbym powiązać ze sobą tabele id_hasla.

Jak to zrobić oraz jak później te dane odczytać, zapisać nowe oraz jak sprawdzićquestionmark.gif Chcę stworzyć logowanie oraz rejestrację i przy rejestracji aby hasło zapisywało się w tabeli hasla a w tabeli users aby w kolumnie id_hasla pokazywal sie identyfikator hasla. W logowaniu abym mógł te dane wyczytywać a potem w edycji profilu zmieniać. Proszę o pomoc i dziękuję. Jestem początkujący jeżeli chodzi o MySQL, jednak wypisywać, edytować, dodawać umiem ale nie w tej sytuacji :/

ps. Chciałbym powiązać te tabele (jak jest taka możliwość) przez kod php :]
Mchl
A dlaczego w ogóle rozbiłeś to na dwie tabele?
skala91
Hmm, z 2 powodów:

1. Chcę się nauczyć jak tworzyć relacje
2. Ponieważ łatwiej mi będzie zarządzać takim układem (bynajmniej tak mi się wydaję)
Crozin
1) Ale tutaj nie ma relacji. Hasło jest pewną "składową" użytkownika (jak jego nazwa czy mail), a nie jakimś "zewnętrznym elementem",
2) Nie za bardzo potrafię sobie wyobrazić jak miałoby to ułatwić życie.

Chcesz nauczyć się operacji na relacjach? Zrób sobie bazę danych dla sklepu, forum, bloga, szkoły czy czegokolwiek.
skala91
no ok, niech wam będzie spróbuje w jednej tabeli zrobić smile.gif a masz może jakiegoś tutoriala lub coś o relacjach? Mam jeszcze pytanie jak zaszyfrować hasło smile.gif
Mchl
To co próbowałeś zrobić, to byłaby relacja typu 'jeden do jeden'. W sumie nic w tym złego, ale nie bardzo w tym przypadku ma sens.
Najczęściej będziesz się spotykał z relacjami typu 'jeden do wielu' i 'wiele do wielu' (która tak naprawdę jest złożeniem dwóch relacji typu 'jeden do wielu').


Przykład relacji typu jeden do wielu:
tabela 'klienci'
tabela 'zamowienia'

jeden klient może złożyć wiele zamówień.

Jak byś to rozwiązał?

Jeśli chodzi o szyfrowanie hasła, temat obszerny. Zazwyczaj hasła się nie szyfruje, tylko przepuszcza przez algorytm mieszający typu MD5. To jest temat dosyć rozległy i zasługuje na osobną dyskusję (poza tym jestem przekonany, że w którymś z działów forum znajduje się już dosyć pokaźna dyskusja na ten temat).

skala91
no ok dzieki winksmiley.jpg

Proszę o pomoc :/ Mam 2 pliki smile.gif

start.php

  1. <?php
  2. include('funkcje.php');
  3. ?>
  4. <div id="logowanie"><?php logowanie(); ?></div>
  5.  
  6.  
  7. <?php
  8. $polaczenie = mysql_connect('localhost', 'root', '') or die("Brak poł?czenia: " . mysql_error());
  9. $baza = mysql_select_db('shoutbox2',$polaczenie) or exit("Nie wybrano bazy, bł?d: " . mysql_error());
  10.  
  11. if ($_POST['Logowanie']) {
  12.  
  13. $login=$_POST['nick'];
  14. $haslo=$_POST['haslo'];
  15.  
  16. $rezultat="SELECT * FROM dane WHERE login='$login' AND haslo='$haslo'";
  17. $log = mysql_query($zapytanie);
  18.  
  19. if (mysql_num_rows($log) > 0)
  20. echo "<p>Logowanie przebiegło poprawnie!</p>";
  21.  
  22. else {
  23. echo "<p>Brak użytkownika w bazie, zarejestruj się aby kontynłować! <br> <a id=\"ok\" href=\"start.php\">Rejestracja</a></p>";
  24. }
  25. }
  26.  
  27. ?>


funkcje.php

  1. <?php
  2. function logowanie()
  3. { ?>
  4. <div id="logowanie"><b>Logowanie</b>:
  5. <form method="post" action="logowanie.php">
  6. <table>
  7. <tr>
  8. <td>Nick</td>
  9. <td><input type="text" name="nick"></td>
  10. </tr>
  11.  
  12. <tr>
  13. <td>Hasło</td>
  14. <td><input type="password" name="haslo"></td>
  15. </tr>
  16.  
  17. <tr>
  18. <td>Zaloguj</td>
  19. <td><input type="submit" name="Logowanie" value="Logowanie"></td>
  20. </tr>
  21. </table>
  22. </form>
  23. <?php } ?>


Moja tabelka w mysql wygląda tak:

  1. CREATE TABLE `dane` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `login` text collate utf8_polish_ci NOT NULL,
  4. `nazwa` text collate utf8_polish_ci NOT NULL,
  5. `haslo` text collate utf8_polish_ci NOT NULL,
  6. `data` datetime NOT NULL,
  7. PRIMARY KEY (`id`)
  8. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=6 ;


I gdy chcę się zalogować (dane już mam wprowadzone do bazy) wyskakuje mi komunikat:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in D:\WebServ\httpd-users\shoutbox\logowanie.php on line 24

Czy ktoś wie o co chodzi? Podczas rejestracji nie czepia się momentu zliczania :/

ja myślę że błąd leży w tej linijce:

  1. $rezultat="SELECT * FROM dane WHERE login='$login' AND haslo='$haslo'";


A co wy na to??
Mchl
A my na to: pokaż co zwraca mysql_error();

PS. Zapoznaj się z tematem SQL injection
skala91
wyskakuje mi:

1065: Zapytanie było puste :/

dzięki za cynk z SQL Injection smile.gif ciekawy sposób winksmiley.jpg jednak trzeba się zabezpieczyć x)
yevaud
  1. $rezultat="SELECT * FROM dane WHERE login='$login' AND haslo='$haslo'";
  2. $log = mysql_query($zapytanie);

no i masz odpowiedz na swoje pytanie
Mchl
Cytat(skala91 @ 19.06.2010, 20:57:33 ) *
wyskakuje mi:

1065: Zapytanie było puste :/

dzięki za cynk z SQL Injection smile.gif ciekawy sposób winksmiley.jpg jednak trzeba się zabezpieczyć x)



Podstawa: mysql_real_escape_string() do tekstu i rzutowanie na odpowiednie typy (int, float) dla liczb
skala91
ok smile.gif dzięki, poszły pomógł ;P

pozdrawiam :]
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.