Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Relacje
skala91
post
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 4.03.2010

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


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ć(IMG:style_emoticons/default/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 :]
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
Mchl
post
Post #2





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

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


A dlaczego w ogóle rozbiłeś to na dwie tabele?
Go to the top of the page
+Quote Post
skala91
post
Post #3





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 4.03.2010

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


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ę)
Go to the top of the page
+Quote Post
Crozin
post
Post #4





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


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.
Go to the top of the page
+Quote Post
skala91
post
Post #5





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 4.03.2010

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


no ok, niech wam będzie spróbuje w jednej tabeli zrobić (IMG:style_emoticons/default/smile.gif) a masz może jakiegoś tutoriala lub coś o relacjach? Mam jeszcze pytanie jak zaszyfrować hasło (IMG:style_emoticons/default/smile.gif)

Ten post edytował skala91 18.06.2010, 21:31:24
Go to the top of the page
+Quote Post
Mchl
post
Post #6





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

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


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

Go to the top of the page
+Quote Post
skala91
post
Post #7





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 4.03.2010

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


no ok dzieki (IMG:style_emoticons/default/winksmiley.jpg)

Proszę o pomoc :/ Mam 2 pliki (IMG:style_emoticons/default/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??

Ten post edytował skala91 19.06.2010, 18:37:35
Go to the top of the page
+Quote Post
Mchl
post
Post #8





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

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


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

PS. Zapoznaj się z tematem SQL injection

Ten post edytował Mchl 19.06.2010, 18:51:25
Go to the top of the page
+Quote Post
skala91
post
Post #9





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 4.03.2010

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


wyskakuje mi:

1065: Zapytanie było puste :/

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

Ten post edytował skala91 19.06.2010, 20:17:10
Go to the top of the page
+Quote Post
yevaud
post
Post #10





Grupa: Zarejestrowani
Postów: 471
Pomógł: 89
Dołączył: 29.07.2008
Skąd: Warszawa

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


  1. $rezultat="SELECT * FROM dane WHERE login='$login' AND haslo='$haslo'";
  2. $log = mysql_query($zapytanie);

no i masz odpowiedz na swoje pytanie
Go to the top of the page
+Quote Post
Mchl
post
Post #11





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

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


Cytat(skala91 @ 19.06.2010, 20:57:33 ) *
wyskakuje mi:

1065: Zapytanie było puste :/

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



Podstawa: mysql_real_escape_string() do tekstu i rzutowanie na odpowiednie typy (int, float) dla liczb
Go to the top of the page
+Quote Post
skala91
post
Post #12





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 4.03.2010

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


ok (IMG:style_emoticons/default/smile.gif) dzięki, poszły pomógł ;P

pozdrawiam :]
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 19:22