Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Dodawanie jakiś danych do bazy podczas rejestracji
Forum PHP.pl > Forum > Przedszkole
Croos22
Witam!
Mam taki skrypt rejestracji chciałbym zapytać czy są w nim jakieś błędy (zależy mi na bezpieczeństwie)?Chciałem zapytać też gdzie dodać aby dodatkowo trzeba było wpisać np. imię i aby to zostało wysłane do bazy mysql?

  1. <?php include("config.php");
  2.  
  3. $ip = $_SERVER['REMOTE_ADDR'];
  4.  
  5. $akcja = $_GET['akcja'];
  6. if ($akcja == wykonaj) {
  7. //
  8. $nick = substr(addslashes(htmlspecialchars($_POST['nick'])),0,32);
  9. $haslo = substr(addslashes($_POST['haslo']),0,32);
  10. $vhaslo = substr($_POST['vhaslo'],0,32);
  11. $email = substr($_POST['email'],0,32);
  12. $vemail = substr($_POST['vemail'],0,32);
  13. $imie = substr($_POST['imie'],0,32);
  14. //kilka sprawdzen co do nicku i maila
  15. $spr1 = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM uzytkownicy WHERE nick='$nick' LIMIT 1")); //czy user o takim nicku istnieje
  16. $spr2 = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM uzytkownicy WHERE email='$email' LIMIT 1")); // czy user o takim emailu istnieje
  17. $pos = strpos($email, "@");
  18. $pos2 = strpos($email, ".");
  19. $emailx = explode("@", $email);
  20. if ($emailx[1] == 'o2.pl') {
  21. $emailx1 = $emailx[0].'@go2.pl';
  22. $emailx2 = $emailx[0].'@tlen.pl';
  23. $spr3 = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM uzytkownicy WHERE email='$emailx1' OR `email`='$emailx2' LIMIT 1"));
  24. }elseif ($emailx[1] == 'go2.pl') {
  25. $emailx1 = $emailx[0].'@o2.pl';
  26. $emailx2 = $emailx[0].'@tlen.pl';
  27. $spr3 = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM uzytkownicy WHERE email='$emailx1' OR `email`='$emailx2' LIMIT 1"));
  28. }elseif ($emailx[1] == 'tlen.pl') {
  29. $emailx1 = $emailx[0].'@go2.pl';
  30. $emailx2 = $emailx[0].'@o2.pl';
  31. $spr3 = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM uzytkownicy WHERE email='$emailx1' OR `email`='$emailx2' LIMIT 1"));
  32. }
  33. $komunikaty = '';
  34. $spr4 = strlen($nick);
  35. $spr5 = strlen($haslo);
  36. //sprawdzenie co uzytkownik zle zrobil
  37. if (!$nick || !$email || !$haslo || !$vhaslo || !$vemail ) {
  38. $komunikaty .= "Musisz wypełnić wszystkie pola!<br>"; }
  39. if ($spr4 < 4) {
  40. $komunikaty .= "Login musi mieć przynajmniej 4 znaki<br>"; }
  41. if ($spr5 < 4) {
  42. $komunikaty .= "Hasło musi mieć przynajmniej 4 znaki<br>"; }
  43. if ($spr1[0] >= 1) {
  44. $komunikaty .= "Ten login jest zajęty!<br>"; }
  45. if ($spr2[0] >= 1) {
  46. $komunikaty .= "Ten e-mail jest już używany!<br>"; }
  47. if ($email != $vemail) {
  48. $komunikaty .= "E-maile się nie zgadzają ...<br>";}
  49. if ($haslo != $vhaslo) {
  50. $komunikaty .= "Hasła się nie zgadzają ...<br>";}
  51. if ($pos == false OR $pos2 == false) {
  52. $komunikaty .= "Nieprawidłowy adres e-mail<br>"; }
  53. if ($spr3[0] >= 1) {
  54. $komunikaty .= "Nie można zarejestrować kilku kont na jedną pocztę o2.<br>"; }
  55.  
  56. //jesli cos jest nie tak to blokuje rejestracje i wyswietla bledy
  57. if ($komunikaty) {
  58. <b>Rejestracja nie powiodła się, popraw następujące błędy:</b><br>
  59. '.$komunikaty.'<br>';
  60. } else {
  61. //jesli wszystko jest ok dodaje uzytkownika i wyswietla informacje
  62. $nick = str_replace ( ' ','', $nick );
  63. $haslo = md5($haslo); //szyfrowanie hasla
  64.  
  65. mysql_query("INSERT INTO `uzytkownicy` (nick, email, haslo, ip) VALUES('$nick','$email','$haslo','$ip')") or die("Nie mogłem Cie zarejestrować!");
  66.  
  67. echo '<br><span style="color: green; font-weight: bold;">Zostałeś zarejestrowany '.$nick.'. Teraz możesz się zalogować</span><br>';
  68. echo '<br><a href="logowanie.php">Logowanie</a>';
  69. }
  70. }
  71. ?>
  72.  
  73.  
  74. <form method="post" action="rejestracja.php?akcja=wykonaj">
  75. <table>
  76. <tr class="tlo-b"><td>Nick:</td>
  77. <td><input maxlength="18" type="text" name="nick" value="<?=$nick?>"></td></tr>
  78. <tr class="tlek"><td>Hasło:</td>
  79. <td><input maxlength="32" type="password" name="haslo"></td></tr>
  80. <tr class="tlo-b"><td>Powtórz hasło:</td>
  81. <td><input maxlength="32" type="password" name="vhaslo"></td></tr>
  82. <tr class="tlo-b"><td>E-mail:</td>
  83. <td><input type="text" name="email" maxlength="50" value="<?=$email?>"></td></tr>
  84. <tr class="tlek"><td>Powtórz E-mail:</td>
  85. <td><input type="text" maxlength="50" name="vemail" value="<?=$vemail?>"></span></td></tr>
  86. <tr class="tlek"><td>Imię:</td>
  87. <td><input maxlength="50" type="text" name="imie"></td></tr>
  88.  
  89.  
  90. <tr><td colspan="2" align="center"><input type="submit" value="Zarejestruj"></td></tr>
  91. </table></form>
H4eX
Tak na szybko, po co 2 zapytania jak można w jednym?
  1. $spr1 = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM uzytkownicy WHERE nick='$nick' LIMIT 1")); //czy user o takim nicku istnieje
  2. $spr2 = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM uzytkownicy WHERE email='$email' LIMIT 1")); // czy user o takim emailu istnieje


Funkcja substr jest żadnym zabezpieczeniem, raczej inne zmienne są bezpieczne.
  1. $imie = substr($_POST['imie'],0,32);


Tutaj musisz dopisać kolumnę imię, bo w formularzu przecież imię jest. Musisz dodać też sprawdzanie czy imię zostało napisane. Zapraszam do kursu php, bo to podstawy!
  1. mysql_query("INSERT INTO `uzytkownicy` (nick, email, haslo, ip) VALUES('$nick','$email','$haslo','$ip')") or die("Nie mogłem Cie zarejestrować!");
Croos22
Cytat(H4eX @ 21.07.2010, 12:48:05 ) *
Tak na szybko, po co 2 zapytania jak można w jednym?
  1. $spr1 = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM uzytkownicy WHERE nick='$nick' LIMIT 1")); //czy user o takim nicku istnieje
  2. $spr2 = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM uzytkownicy WHERE email='$email' LIMIT 1")); // czy user o takim emailu istnieje


Funkcja substr jest żadnym zabezpieczeniem, raczej inne zmienne są bezpieczne.
  1. $imie = substr($_POST['imie'],0,32);


Tutaj musisz dopisać kolumnę imię, bo w formularzu przecież imię jest. Musisz dodać też sprawdzanie czy imię zostało napisane. Zapraszam do kursu php, bo to podstawy!
  1. mysql_query("INSERT INTO `uzytkownicy` (nick, email, haslo, ip) VALUES('$nick','$email','$haslo','$ip')") or die("Nie mogłem Cie zarejestrować!");



W jaki sposób mogę sprawdzić w jednym zapytaniu i czy jest podany user w bazie, czy jest w bazie taki email?
Jeśli funkcja substr nie jest bezpieczna to czym ją mam zastąpić?
Co to wysyłania danych to próbowałem w taki sposób lecz wywalało błąd musiałem widocznie jakąś literówkę zrobić.
thek
Jak sprawdzić oba w jednym zapytaniu?
WHERE coś OR coś2 smile.gif

Substr w połączenie z addslashes i htmlspecialchars może dać nieprzewidziane rezultaty obcinając przed znakiem, który był poprzedzony slashem! Popatrz co zrobi z ciągiem ostatnia funkcja, potem co zrobi druga i pomyśl czy jest na to szansa po użyciu pierwszej z funkcji. Poza tym wpisując polskie znaki substr może zrobić sieczkę, bo polskie znaki diakrytyczne są widoczne jako dwie litery. Stąd nieraz krzaki przy substr w polskich tekstach.
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.