Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Rejestracja
Forum PHP.pl > Forum > PHP
Przem4S
Tak więc mam sobie skrypt rejestracji, na innych hostingach śmiga świetnie (bez błędnie) zresztą na moim domowym serwerze też, ale mimo to mam notice'y. Tak wiem to nie błędy i da się to wyłączyć ale chcę tego uniknąć i poprawić kod.
Wywala mi takie coś:
Kod
Notice: Undefined variable: login in /usr/local/www/apache22/data/silnik/funkcje.php on line 181

Notice: Undefined variable: email in /usr/local/www/apache22/data/silnik/funkcje.php on line 183

Notice: Use of undefined constant rok - assumed 'rok' in /usr/local/www/apache22/data/silnik/funkcje.php on line 200

Notice: Undefined index: data_urodzenia[rok] in /usr/local/www/apache22/data/silnik/funkcje.php on line 200

Notice: Use of undefined constant miesiac - assumed 'miesiac' in /usr/local/www/apache22/data/silnik/funkcje.php on line 201

Notice: Undefined index: data_urodzenia[miesiac] in /usr/local/www/apache22/data/silnik/funkcje.php on line 201

Notice: Use of undefined constant dzien - assumed 'dzien' in /usr/local/www/apache22/data/silnik/funkcje.php on line 202

Notice: Undefined index: data_urodzenia[dzien] in /usr/local/www/apache22/data/silnik/funkcje.php on line 202

Skrypt rejestracji:
  1. function rejestracja_proces()
  2. {
  3. /* Połączenie do bazy */
  4. $polaczenie = @mysql_connect('localhost:3306', 'www', 'www') or die('Brak połączenia z serwerem MySQL.<br />Błąd: '.mysql_error());
  5. $polaczenie_do_bazy = @mysql_select_db('baza_strony', $polaczenie) or die('Nie mogę połączyć się z bazą danych<br />Błąd: '.mysql_error());
  6. /* Sprawdzenie danych */
  7. if (empty($_POST['login']))
  8. {
  9. echo 'Nie wypełniłeś pola Login<br>';
  10. if (empty($_POST['nick']))
  11. {
  12. echo 'Nie wypełniłeś pola Nick<br>';
  13. if (empty($_POST['haslo']))
  14. {
  15. echo 'Nie wypełniłeś pola Hasło<br>';
  16. if (empty($_POST['haslo2']))
  17. {
  18. echo 'Nie wypełniłeś pola Powtórz hasło<br>';
  19. if (empty($_POST['imie']))
  20. {
  21. echo 'Nie wypełniłeś pola Imię<br>';
  22. if (empty($_POST['email']))
  23. {
  24. echo 'Nie wypełniłeś pola Email<br>';
  25. }
  26. }
  27. }
  28. }
  29. }
  30. }
  31. else
  32. {
  33. if ($_POST['haslo']==$_POST['haslo2'])
  34. {
  35. $czy_istnieje = mysql_query("SELECT * FROM `uzytkownicy` WHERE login = '$login'");
  36. $czy_istnieje = mysql_num_rows($czy_istnieje);
  37. $czy_istnieje_email = mysql_query("SELECT * FROM `uzytkownicy` WHERE email = '$email'");
  38. $czy_istnieje_email = mysql_num_rows($czy_istnieje_email);
  39.  
  40. if ($czy_istnieje==0)
  41. {
  42. if ($czy_istnieje_email==0)
  43. {
  44. $login = mysql_real_escape_string (trim($_POST['login']));
  45. $haslo = sha1(mysql_real_escape_string (trim($_POST['haslo'])));
  46. $haslo2 = mysql_real_escape_string (trim($_POST['haslo']));
  47. $imie = mysql_real_escape_string (trim($_POST['imie']));
  48. $nazwisko = mysql_real_escape_string (trim($_POST['nazwisko']));
  49. $plec = mysql_real_escape_string (trim($_POST['plec']));
  50. $numer_gg = mysql_real_escape_string (trim($_POST['gg']));
  51. $miasto = mysql_real_escape_string (trim($_POST['miasto']));
  52. $data_rejestracji = date("Y-m-d");
  53. $adres_ip = $_SERVER['REMOTE_ADDR'];
  54. $data_urodzenia[rok] = $_POST['data_urodzenia[rok]'];
  55. $data_urodzenia[miesiac] = $_POST['data_urodzenia[miesiac]'];
  56. $data_urodzenia[dzien] = $_POST['data_urodzenia[dzien]'];
  57. $data_urodzenia = date($_POST['data_urodzenia']['rok'].'-'.$_POST['data_urodzenia']['miesiac'].'-'.$_POST['data_urodzenia']['dzien']);
  58. $email = mysql_real_escape_string (trim($_POST['email']));
  59. $zapytanie="INSERT INTO uzytkownicy (login,haslo,imie,nazwisko,plec,gg,miasto,data_rejestracji,adres_ip,data_uro
    dzenia,email,aktywacja,ranga) VALUES('$login','$haslo','$imie','$nazwisko','$plec','$numer_gg','$miasto','$data_rejestracji','$adres_ip','$data_urodzenia','$email','0','Uzytkownik')"
    ;
  60. mysql_query($zapytanie) or die("Wystąpił błąd: ".mysql_error());
  61. $zapytanie2="SELECT id FROM uzytkownicy WHERE login='$login'";
  62. $temp=mysql_query($zapytanie2) or die("Wystąpił błąd: ".mysql_error());
  63. $ile=mysql_num_rows($temp);
  64. $temp=mysql_fetch_array($temp);
  65. $id=$temp['id'];
  66. if ($ile==0)
  67. {
  68. $_SESSION['user_id']=$id;
  69. }
  70. $zapytanie3="INSERT INTO zarzadzanie_kontem (id) VALUES('$id')";
  71. $temp2=mysql_query($zapytanie3) or die("Wystąpił błąd: ".mysql_error());
  72. echo('<strong>Wynik:</strong><br><br><font color="green">Konto '.$login.' zostało utworzone.</font><br><br><strong>Dane konta:</strong><br><br>Login: '.$login.' .<br>Hasło: '.$haslo2.' .<br>Imię: '.$imie.' .<br>Nazwisko: '.$nazwisko.' .<br>Płeć: '.$plec.' .<br>Numer GG: '.$numer_gg.' .<br>Miasto: '.$miasto.' .<br>Data urodzenia: '.$data_urodzenia.' .<br>Email: '.$email.' .<br><br><br><strong>Data rejestracji:</strong> '.$data_rejestracji.' .<br><strong>Adres IP z którego się zarejestrowano:</strong> '.$adres_ip.' .<br><br><br>');
  73. }
  74. else
  75. {
  76. echo 'Podany adres Email jest już używany w bazie danych.';
  77. }
  78. }
  79. else
  80. {
  81. echo 'Podany Login jest już używany w bazie danych.';
  82. }
  83. }
  84. }
  85. }


Oczywiście konto w bazie danych oraz id zostaje skopiowane poprawnie tylko właśnie wyrzuca mi jeszcze błędy. Proszę o pomoc wink.gif.
mandragorek
Dwa pierwsze - wypadałoby przypisać zmiennym jakieś wartości zanim się je użyje w zapytaniu do bazy. Pozostałe - to brakujące cudzysłowy w indeksach tablic.
No i w 54 linii to chyba chodziło wartość z tablicy
Kod
$data_urodzenia['rok']

a nie o indeks o takiej nazwie.
wNogachSpisz
Są to ostrzeżenia, nie błędy.
Zacznij używac funkcji isset.
Przem4S
Tylko do wartości email i login były przypisane dane w formularzu.
mandragorek
Ok, tylko że przed
Kod
$czy_istnieje = mysql_query("SELECT * FROM `uzytkownicy` WHERE login = '$login'");

nie masz nigdzie przypisanego co się w $login znajduje. Potem pod następnym ifem już korzystasz bezpośrednio z danych z $_POST;
Przem4S
Czyli przypisać $_POST do $login ?

Poprawiłem na coś takiego:
  1. function rejestracja_proces()
  2. {
  3. /* Połączenie do bazy */
  4. $polaczenie = @mysql_connect('localhost:3306', 'www', 'www') or die('Brak połączenia z serwerem MySQL.<br />Błąd: '.mysql_error());
  5. $polaczenie_do_bazy = @mysql_select_db('baza_strony', $polaczenie) or die('Nie mogę połączyć się z bazą danych<br />Błąd: '.mysql_error());
  6. /* Sprawdzenie danych */
  7. if (empty($_POST['login']))
  8. {
  9. echo 'Nie wypełniłeś pola Login<br>';
  10. if (empty($_POST['nick']))
  11. {
  12. echo 'Nie wypełniłeś pola Nick<br>';
  13. if (empty($_POST['haslo']))
  14. {
  15. echo 'Nie wypełniłeś pola Hasło<br>';
  16. if (empty($_POST['haslo2']))
  17. {
  18. echo 'Nie wypełniłeś pola Powtórz hasło<br>';
  19. if (empty($_POST['imie']))
  20. {
  21. echo 'Nie wypełniłeś pola Imię<br>';
  22. if (empty($_POST['email']))
  23. {
  24. echo 'Nie wypełniłeś pola Email<br>';
  25. }
  26. }
  27. }
  28. }
  29. }
  30. }
  31. else
  32. {
  33. if ($_POST['haslo']==$_POST['haslo2'])
  34. {
  35. $login = mysql_real_escape_string (trim($_POST['login']));
  36. $email = mysql_real_escape_string (trim($_POST['email']));
  37. $czy_istnieje = mysql_query("SELECT * FROM `uzytkownicy` WHERE login = '$login'");
  38. $czy_istnieje = mysql_num_rows($czy_istnieje);
  39. $czy_istnieje_email = mysql_query("SELECT * FROM `uzytkownicy` WHERE email = '$email'");
  40. $czy_istnieje_email = mysql_num_rows($czy_istnieje_email);
  41.  
  42. if ($czy_istnieje==0)
  43. {
  44. if ($czy_istnieje_email==0)
  45. {
  46. $login = mysql_real_escape_string (trim($_POST['login']));
  47. $haslo = sha1(mysql_real_escape_string (trim($_POST['haslo'])));
  48. $haslo2 = mysql_real_escape_string (trim($_POST['haslo']));
  49. $imie = mysql_real_escape_string (trim($_POST['imie']));
  50. $nazwisko = mysql_real_escape_string (trim($_POST['nazwisko']));
  51. $plec = mysql_real_escape_string (trim($_POST['plec']));
  52. $numer_gg = mysql_real_escape_string (trim($_POST['gg']));
  53. $miasto = mysql_real_escape_string (trim($_POST['miasto']));
  54. $data_rejestracji = date("Y-m-d");
  55. $adres_ip = $_SERVER['REMOTE_ADDR'];
  56. $data_urodzenia['rok'] = $_POST['data_urodzenia[rok]'];
  57. $data_urodzenia['miesiac'] = $_POST['data_urodzenia[miesiac]'];
  58. $data_urodzenia['dzien'] = $_POST['data_urodzenia[dzien]'];
  59. $data_urodzenia = date($_POST['data_urodzenia']['rok'].'-'.$_POST['data_urodzenia']['miesiac'].'-'.$_POST['data_urodzenia']['dzien']);
  60. $email = mysql_real_escape_string (trim($_POST['email']));
  61. $zapytanie="INSERT INTO uzytkownicy (login,haslo,imie,nazwisko,plec,gg,miasto,data_rejestracji,adres_ip,data_uro
    dzenia,email,aktywacja,ranga) VALUES('$login','$haslo','$imie','$nazwisko','$plec','$numer_gg','$miasto','$data_rejestracji','$adres_ip','$data_urodzenia','$email','0','Uzytkownik')"
    ;
  62. mysql_query($zapytanie) or die("Wystąpił błąd: ".mysql_error());
  63. $zapytanie2="SELECT id FROM uzytkownicy WHERE login='$login'";
  64. $temp=mysql_query($zapytanie2) or die("Wystąpił błąd: ".mysql_error());
  65. $ile=mysql_num_rows($temp);
  66. $temp=mysql_fetch_array($temp);
  67. $id=$temp['id'];
  68. if ($ile==0)
  69. {
  70. $_SESSION['user_id']=$id;
  71. }
  72. $zapytanie3="INSERT INTO zarzadzanie_kontem (id) VALUES('$id')";
  73. $temp2=mysql_query($zapytanie3) or die("Wystąpił błąd: ".mysql_error());
  74. echo('<strong>Wynik:</strong><br><br><font color="green">Konto '.$login.' zostało utworzone.</font><br><br><strong>Dane konta:</strong><br><br>Login: '.$login.' .<br>Hasło: '.$haslo2.' .<br>Imię: '.$imie.' .<br>Nazwisko: '.$nazwisko.' .<br>Płeć: '.$plec.' .<br>Numer GG: '.$numer_gg.' .<br>Miasto: '.$miasto.' .<br>Data urodzenia: '.$data_urodzenia.' .<br>Email: '.$email.' .<br><br><br><strong>Data rejestracji:</strong> '.$data_rejestracji.' .<br><strong>Adres IP z którego się zarejestrowano:</strong> '.$adres_ip.' .<br><br><br>');
  75. }
  76. else
  77. {
  78. echo 'Podany adres Email jest już używany w bazie danych.';
  79. }
  80. }
  81. else
  82. {
  83. echo 'Podany Login jest już używany w bazie danych.';
  84. }
  85. }
  86. }
  87. }


Ale mimo to wyrzuca mi brak indexu z tą datą:

Kod
Notice: Undefined index: data_urodzenia[rok] in /usr/local/www/apache22/data/silnik/funkcje.php on line 202

Notice: Undefined index: data_urodzenia[miesiac] in /usr/local/www/apache22/data/silnik/funkcje.php on line 203

Notice: Undefined index: data_urodzenia[dzien] in /usr/local/www/apache22/data/silnik/funkcje.php on line 204


Choć te dane są przydzielone w formularzu z opcją wyboru.
mandragorek
Edytowałem swoją pierwszą odpowiedź, więc nie zauważyłeś. Chodzi najpewniej o to, że jako indeks dajesz np. 'data_urodzenia[rok]' a nie wartość, która siedzi w tej tablicy.
Przem4S
Hm tak więc jak tą datę tam zaadoptować?
mandragorek
W sumie to też masz robione dwa razy, najpierw źle a potem dobrze
Kod
$data_urodzenia['rok'] = $_POST['data_urodzenia[rok]'];
$data_urodzenia['miesiac'] = $_POST['data_urodzenia[miesiac]'];
$data_urodzenia['dzien'] = $_POST['data_urodzenia[dzien]'];


a odrobinę niżej już masz ładnie wyciągnięte po kolei te same zmienne z $_POST i nadpisujesz tę zmienną $data_urodzenia.

Kod
$data_urodzenia = date($_POST['data_urodzenia']['rok'].'-'.$_POST['data_urodzenia']['miesiac'].'-'.$_POST['data_urodzenia']['dzien']);


więc w sumie to możesz te wcześniejsze 3 linijki spokojnie wyrzucić, bo i tak wstawiasz tam za chwilę co innego.
Natomiast jeśli ci potrzebne poszczególne wartości z tej tablicy data_urodzenia przesyłanej w $_POST to wyciągasz, to tak jak z każdej innej tablicy wielowymiarowej
Kod
$data_urodzenia['rok'] = $_POST['data_urodzenia']['rok'];
Przem4S
@UP

Nom głupi błąd. Bez tych 3'ech zmiennych poszło od strzału. Dziękuję - pomógł.
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.