Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pomoc przy formularzu
Forum PHP.pl > Forum > PHP
Waloch016
Witam otóż mam kod formularza z captcha i wysyłką maila do aktywacji konta. Wszystko działa cudnie poza tym że nie zapisuje przesłanych danych do bazy.

Tutaj kod formularza:


  1. <?php
  2.  
  3. ob_start(); // rozpoczęcie sesji
  4.  
  5. if (!isset($_SESSION['login'])) { // dostęp dla zalogowanego użytkownika
  6.  
  7. include 'db.php'; // połączenie się z bazą danych
  8. $tabela = 'uzytkownik'; // zdefiniowanie tabeli MySQL
  9. require_once('recaptchalib.php'); // dołączenie modułu reCAPTCHA
  10. $privatekey = '6Le6g8ASAAAAADdI4eX26AV2y21vatJQbdG0Gb02 '; // prywatny klucz reCAPTCHA
  11. $publickey = '6Le6g8ASAAAAAO6_sXwwQOR0QdJUY4diRmkie1WG '; // publiczny klucz reCAPTCHA
  12.  
  13. if ($_POST["wyslane"]) { // jeżeli formularz został wysłany, to wykonuje się poniższy skrypt
  14.  
  15. // filtrowanie treści wprowadzonych przez użytkownika
  16. $login = htmlspecialchars(stripslashes(strip_tags(trim($_POST["login"]))), ENT_QUOTES);
  17. $haslo = $_POST["haslo"];
  18. $haslo2 = $_POST["haslo2"];
  19. $email = htmlspecialchars(stripslashes(strip_tags(trim($_POST["email"]))), ENT_QUOTES);
  20. $email2 = htmlspecialchars(stripslashes(strip_tags(trim($_POST["email2"]))), ENT_QUOTES);
  21. $imie = htmlspecialchars(addslashes(strip_tags(trim($_POST["imie"]))), ENT_QUOTES);
  22. $nazwisko = htmlspecialchars(addslashes(strip_tags(trim($_POST["nazwisko"]))), ENT_QUOTES);
  23. $resp = recaptcha_check_answer ($privatekey,
  24. $_SERVER["REMOTE_ADDR"],
  25. $_POST["recaptcha_challenge_field"],
  26. $_POST["recaptcha_response_field"]);
  27.  
  28. // system sprawdza czy prawidło zostały wprowadzone dane
  29. if (strlen($login) < 3 or strlen($login) > 30 or !eregi("^[a-zA-Z0-9_.]+$", $login)) {
  30. $blad++;
  31. echo '<p>Proszę poprawny wprowadzić login (od 3 do 30 znaków).</p>';
  32. } else {
  33. $wynik = mysql_query("SELECT * FROM $tabela WHERE login='$login'");
  34. if (mysql_query($wynik) <> 0) {
  35. $blad++;
  36. echo '<p>Podana nazwa użytkownika została już zajęta.</p>';
  37. }
  38. }
  39. if (strlen($haslo) < 6 or strlen($haslo) > 30 ) {
  40. $blad++;
  41. echo '<p>Proszę poprawnie wpisać hasło (od 6 znaków do 30 znaków). </p>';
  42. }
  43. if ($haslo !== $haslo2) {
  44. $blad++;
  45. echo '<p> Podane hasła nie są ze sobą zgodne. </p>';
  46. }
  47. if (!eregi("^[0-9a-z_.-]+@([0-9a-z-]+\.)+[a-z]{2,4}$", $email)) {
  48. $blad++;
  49. echo '<p> Proszę wprowadzić poprawnie adres email.</p>';
  50. } else {
  51. $wynik = mysql_query("SELECT * FROM $tabela WHERE email='$email'");
  52. if (mysql_query($wynik) <> 0) {
  53. $blad++;
  54. echo '<p> Podany adres e-mail jest już zajęty.</p>';
  55. }
  56. }
  57. if ($email !== $email2) {
  58. $blad++;
  59. echo '<p> Podane adresy e-mail nie są ze sobą zgodne.</p>';
  60. }
  61. if (!$resp->is_valid) {
  62. $error = $resp->error;
  63. echo '<p>Proszę wpisać poprawnie wyrazy z obrazka.</p>';
  64. $blad++;
  65. }
  66.  
  67. // jeżeli nie ma żadnego błedu, użytkownik zostaje zarejestronwany i wysłany do niego e-mail z linkiem aktywacyjnym
  68. if ($blad == 0) {
  69.  
  70. $haslo = md5($haslo); // zaszyfrowanie hasla
  71. $kod = uniqid(rand()); // tworzenie unikalnego kodu dla użytkownika
  72.  
  73. $wynik = mysql_query("INSERT INTO $tabela (imie, nazwisko, login, haslo, email, kod) VALUES('$imie', '$nazwisko', '$login', '$haslo', '$email', '$kod')");
  74. if ($wynik) {
  75. $list = "Witaj $login !
  76. Kliknij w poniższy link, aby aktywować swoje konto. <a href="http://bystrydesign.pl/nieruchomosci/weryfikacja.php?weryfikacja=potwierdz&kod=$kod&quot;;" target="_blank">http://bystrydesign.pl/nieruchomosci/weryf...#036;kod";</a>
  77. mail($email, "Rejestracja użytkownika", $list, "From: <kontakt@twoja-strona.pl>");
  78. echo '<p>Dziękujemy za rejestrację! W ciągu nabliższych 5 minut dostaniesz wiadomość e-mail z dalszymi wskazówkami rejestracji.</p>';
  79. mysql_close($polaczenie);
  80. }
  81. }
  82. mysql_close($polaczenie);
  83. }
  84.  
  85. // tworzenie formularza HTML
  86. echo <<< KONIEC
  87.  
  88.   <form action="udodaj.php" method="post">
  89.   <input type="hidden" name="wyslane" value="TRUE" />
  90.  
  91.   <p>Imię: <input type="text" name="imie" /></p>
  92.   <p>Nazwisko: <input type="text" name="nazwisko" /></p>
  93.   <p>Login*: <input type="text" name="login" /></p>
  94.   <p>Hasło*: <input type="password" name="haslo" /></p>
  95.   <p>Powtórz hasło*: <input type="password" name="haslo2" /></p>
  96.   <p>Adres e-mail*: <input type="text" name="email" /></p>
  97.   <p>Powtórz adres e-mail*: <input type="text" name="email2" /></p>
  98. KONIEC;
  99.  
  100. echo recaptcha_get_html($publickey); // wyświetlanie reCAPTCHA
  101. echo <<< KONIEC
  102.  
  103.   <p><input type="submit" value="wyślij" /></p></form>
  104. KONIEC;
  105.  
  106. } else {
  107. header('Location: / '); // zalogowany użytkownik zostaje przekierowany na stronę główną
  108. }
  109.  
  110. ?>


A tutaj kod weryfikacji:

  1. <?php
  2.  
  3. if ($_GET['weryfikacja'] == 'potwierdz') {
  4.  
  5. include 'db.php'; // połączenie się z bazą danych
  6. $tabela = 'uzytkownik'; // zdefiniowanie tabeli MySQL
  7.  
  8. $kod = htmlspecialchars(stripslashes(strip_tags(trim($_GET['kod']))), ENT_QUOTES); // filtrowanie $_GET['kod']
  9.  
  10. // jeżeli kod znajduje się URL, skrypt najpierw patrzy czy użytkownik ma aktywne konto
  11. // jeżeli nie ma, wtedy zmienia się jego status, jeżeli nie upłynęło 48 godzin od rejestracji
  12.  
  13. $wynik = mysql_query("SELECT * FROM $tabela
  14. WHERE kod='$kod' and status=1");
  15.  
  16. if (mysql_num_rows($wynik) == 1) {
  17. echo '<p>Aktywowałeś już swoje konto.</p';
  18. exit;
  19. } else {
  20. $wynik = mysql_query("DELETE FROM $tabela
  21. WHERE data<=DATE_SUB(NOW(),INTERVAL 2 DAY) and status=0");
  22. $wynik = mysql_query("UPDATE $tabela
  23. SET status='1', data=NOW() WHERE kod='$kod' and status=0");
  24. $wynik = mysql_query("SELECT * FROM $tabela
  25. WHERE kod='$kod' and status=1");
  26. if (mysql_num_rows($wynik) == 1) {
  27. echo '<p>Dziękujemy. Rejestracja została zakończona poprawnie. Możesz się teraz zalogować.</p>';
  28. }
  29. }
  30.  
  31. // jeżeli został wprowadzony zły link, wyświetla się błąd
  32. if (!$kod or mysql_num_rows($wynik)<>1) {
  33. echo '<p>Aktywowanie konta nie powiodło się.</p>';
  34. }
  35. mysql_close($polaczenie);
  36. }
  37.  
  38. ?>


Co powinienem poprawićquestionmark.gif Próbowałem na kilka sposobów + googlowałem.
nospor
Temat: Jak poprawnie zada pytanie
Się zapoznaj, zastosuj i jak nadal nie będziesz znał odpowiedzi to zapytaj jeszcze raz z uwzględnieniem podanych tam wskazówek
Vadd
Spróbuj zrobić tak przy zapytaniu:
  1. `imie`, `nazwisko`, `login`, `haslo`, `email`, `kod`
Waloch016
Bez skutku:)

Ale raportując błedy w kodzie wyświetla mi:


Notice: Undefined index: wyslane in /homepages/10/d347737077/htdocs/nieruchomosci/udodaj.php on line 16
plej
a gdzie ty masz session_start?
zaraz po znaczniku <?php
daj session_start();
jaca19
  1. ob_start(); // rozpoczęcie sesji


To rozpoczęcie buforowania, a nie start sesji ;P
plej
nom i nigdzie się nie kończy:)
ale session i tak musi daćbiggrin.gif
Waloch016
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /homepages/10/d347737077/htdocs/nieruchomosci/udodaj.php:2) in /homepages/10/d347737077/htdocs/nieruchomosci/udodaj.php on line 5

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /homepages/10/d347737077/htdocs/nieruchomosci/udodaj.php:2) in /homepages/10/d347737077/htdocs/nieruchomosci/udodaj.php on line 5


To mi wywala jak wstawie session_start(); - w 5 linijce
plej
session_start();
umieszcza się zawsze na początku przed wszystkim:)
jaca19
I na końcu daj
no i zobacz czy masz kodowanie pliku w utf-8 (notepad ++)
plej
ii sprawdź czy masz dobrze tabele w bazie zrobionąsmile.gif
i możesz dać w połączeniu na końcu czyli w db.php to:
mysql_query('SET NAMES \'utf8\'');

ja tez mam te pliki z webskrypty biggrin.gif
Waloch016
Kodowanie na 100% utf-8 / ustawione w Notepad++

A dodanie ob_end_flush(); Nic nie daje.
I session_start(); mam na samym początku przed wszystkim.

no i jeszcze kwestia tego:

Notice: Undefined index: wyslane in /homepages/10/d347737077/htdocs/nieruchomosci/udodaj.php on line 15
plej
aa nie dodaje ci danych do bazy? bo zapytanie złe:D


$wynik = mysql_query("INSERT INTO $tabela VALUES('', '$login', '$haslo', '$email', '$kod', NOW(), '')");

ja mam tak w plikach bo też mi nie dodawało więc przerobiłem:D
jaca19
A jakbyś zrobił tak:

  1. <form action="udodaj.php" method="post">
  2.  
  3. <p>Imię: <input type="text" name="imie" /></p>
  4. <p>Nazwisko: <input type="text" name="nazwisko" /></p>
  5. <p>Login*: <input type="text" name="login" /></p>
  6. <p>Hasło*: <input type="password" name="haslo" /></p>
  7. <p>Powtórz hasło*: <input type="password" name="haslo2" /></p>
  8. <p>Adres e-mail*: <input type="text" name="email" /></p>
  9. <p>Powtórz adres e-mail*: <input type="text" name="email2" /></p>
  10. KONIEC;
  11.  
  12. echo recaptcha_get_html($publickey); // wyświetlanie reCAPTCHA
  13. echo <<< KONIEC
  14.  
  15.   <p> <input type="hidden" name="wyslane" value="1" /><input type="submit" value="wyślij" /></p></form>
  16. KONIEC;


i wyżej:
  1. if (isset($_POST["wyslane"])) {



plej
Ja mu już podesłałem swoje pliki działające na 100% sb je przerobi:)
singollo
1. Czy zapytanie INSERT się wykonuje w ogóle ? Jeśli tak - to jakie błędy zgłasza, jeśli nie, to:
2. Czy licznik błędów ($blad) == 0 ? Możesz mieć problem, bo - na moje oko - ten licznik nie jest nigdzie zainicjowany
3. Last, but not least: być może $_SESSION['login'] jest ustawiona?

Pozdrawiam,

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