Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Ograniczenie rejestracji - błąd
Forum PHP.pl > Forum > PHP
kiepski96
To kod, który ma za zadanie limitować liczbę rejestracji.
Lecz nie działa, można zarejestrować się ile razy się chce .
Proszę o pomoc .


  1. <?php
  2. if (!isset($_SESSION['username']))
  3. {
  4. header('Location: ./login.php');
  5. }
  6. ?>
  7. <?php
  8. $error_message = "";
  9. $error_message1 = "";
  10. $action = isset($_POST['action']) ? $_POST['action'] : '';
  11. $mysql_server = 'localhost';
  12. $mysql_username = 'xxx';
  13. $mysql_password = 'xxx';
  14. $mysql_database = 'xxx';
  15. $mysql_table = 'nagroda1';
  16. $db = mysql_connect($mysql_server, $mysql_username, $mysql_password);
  17. mysql_select_db($mysql_database, $db);
  18. $sql = "SELECT id FROM ".$mysql_table;
  19. require_once('libs/recaptchalib.php');
  20. $privatekey = "xxx";
  21. $resp = recaptcha_check_answer ($privatekey,
  22. $_SERVER["REMOTE_ADDR"],
  23. $_POST["recaptcha_challenge_field"],
  24. $_POST["recaptcha_response_field"]);
  25.  
  26. if (!$resp->is_valid)
  27. {
  28. $error_message = "Zły kod";
  29. }
  30. $result = mysql_query($sql, $db);
  31. $nagroda1=mysql_num_rows($result);
  32.  
  33. if ($_SERVER['REQUEST_METHOD'] == 'POST' && $nagroda1 >= 2 )
  34. {
  35.  
  36. $error_message1 = "Brak nagrody";
  37. }
  38.  
  39.  
  40. $success_page = './sukces.html';
  41.  
  42. if ($action == 'signup')
  43. {
  44. $newusername = $_POST['username'];
  45. $newemail = $_POST['email'];
  46. $newfullname = $_POST['fullname'];
  47.  
  48. if (!ereg("^[A-Za-z0-9_!@$]{1,50}$", $newusername))
  49. {
  50. $error_message = 'Popraw dane';
  51. }
  52. else
  53. if (!ereg("^[A-Za-z0-9_!@$.' &]{1,50}$", $newfullname))
  54. {
  55. $error_message = 'Popraw dane';
  56. }
  57. else
  58. if (!ereg("^.+@.+\..+$", $newemail))
  59. {
  60. $error_message = 'Popraw dane';
  61. }
  62. if (empty($error_message))
  63. {
  64. $db = mysql_connect($mysql_server, $mysql_username, $mysql_password);
  65. mysql_select_db($mysql_database, $db);
  66. $sql = "SELECT username FROM ".$mysql_table." WHERE username = '".$newusername."'";
  67. $result = mysql_query($sql, $db);
  68. if ($data = mysql_fetch_array($result))
  69. {
  70. $error_message = 'Nick zajęty, spróbuj inny.';
  71. }
  72. }
  73. if (empty($error_message))
  74. {
  75. $sql = "INSERT `".$mysql_table."` (`username`,`fullname`, `email`, `active`) VALUES ('$newusername', '$newfullname', '$newemail', 1)";
  76. $result = mysql_query($sql, $db);
  77. $mailto = $newemail;
  78. $subject = 'Potwierdzenie x';
  79. $message = 'xxx';
  80. $message .= "\r\nUsername: ";
  81. $message .= $newusername;
  82. $message .= "\r\n";
  83. $header = "From: xxx"."\r\n";
  84. $header .= "Reply-To: xxx"."\r\n";
  85. $header .= "MIME-Version: 1.0"."\r\n";
  86. $header .= "Content-Type: text/plain; charset=utf-8"."\r\n";
  87. $header .= "Content-Transfer-Encoding: 8bit"."\r\n";
  88. $header .= "X-Mailer: PHP v".phpversion();
  89. mail($mailto, $subject, $message, $header);
  90. header('Location: '.$success_page);
  91. }
  92. }
  93. ?>
matx132
z tego co widzę to rozumiem że jeśli nagród w tabeli nagroda1 jest więcej niż 1 to ma pisać że brak nagrody

  1. if ($_SERVER['REQUEST_METHOD'] == 'POST' && $nagroda1 >= 2 )


ale nadal nie rozumiem jak chcesz ograniczyć rejestrację ?
sprawdzasz tylko czy username jest zajęty oraz nie wiem po co dwa razy łączysz się z bazą jeśli wcześniejszego nie zamykasz połączenia.

Daj więcej informacji bo ogólnie nie ograniczasz tutaj nic poza tym iż nie może być w bazie taki sam nick
kiepski96
Jak będzie więcej niż 2 osoby zarejestrowane to aby wywalało błąd i nie dało się zarejestrować .
Wywalanie błędu już jest ,ale coś z tym zamknięciem rejestracji nie wychodzi.
matx132
może tak nie widzę abyś dodawał wpisów do tabeli nagroda1 więc tabela się nie zmienia a dopóki nie ma dwóch lub więcej wpisów skrypt będzie się wykonywał dalej.

i spróbuj zamiast

empty($error_message)

dać

$error_message!=""

może coś pomoże lecz jeśli tabela nagroda1 ma tylko jeden lub mniej wpisów to nic to nie da bo będzie wykonywany nadal skrypt
kiepski96
Jak zamiast :

empty($error_message)

daję

$error_message!=""

To wywala mi :

Parse error: syntax error, unexpected T_VARIABLE, expecting '(' in /home/restock/public_html/nagroda1.php on line 65
greycoffey
Pomyślcie, empty() używa się aby sprawdzić czy zmienna jest pusta lub nie istnieje - w tym wypadku nie istnieje.
matx132
@up zmienna istnieje jest deklarowana na początku

$error_message='';

co do if nie powinno być błędu jak jest

if (empty($error_message))

a zamiast tego dajesz

if ($error_message!='')
kiepski96
to teraz nawet jak nic nie uzupełnię to mi zalicza
matx132
to zrób inaczej
usuń
$error_message = ""
na początku skryptu i daj if(isset($error_message)) - sprawdza czy zmienna istnieje
kiepski96
Nadal można zarejestrować się parę razy,więcej niż dwa
matx132
a jak usuniesz w if $_SERVER['REQUEST_METHOD'] == 'POST' &&
aby zostało samo if($nagroda1>1) .....

jeśli będzie nadal działać wydrukuj sobie $nagroda1 lub w mysql_num_rows daj or die(mysql_error())
kiepski96
Ale po co wydrukować błąd , jak błędu nie ma ?
PS. Nie działa

Może się jeszcze ktoś wypowie ?

Matx,czy mógłbyś edytować kod ten co dałem w pierwszym poście ? Bo może coś źle robię.
Daiquiri
Pamiętajcie, że forum to nie parser. Jeszcze jeden parse error i będę zmuszona zamknąć temat.
matx132
ja bym to tak zrobił:

  1. <?php
  2. if (!isset($_SESSION['username']))
  3. {
  4. header('Location: ./login.php');
  5. }
  6. ?>
  7. <?php
  8. $error_message = "";
  9. $error_message1 = "";
  10. $action = isset($_POST['action']) ? $_POST['action'] : '';
  11. $mysql_server = 'localhost';
  12. $mysql_username = 'xxx';
  13. $mysql_password = 'xxx';
  14. $mysql_database = 'xxx';
  15. $mysql_table = 'nagroda1';
  16. $db = mysql_connect($mysql_server, $mysql_username, $mysql_password);
  17. mysql_select_db($mysql_database, $db);
  18. $sql = "SELECT username FROM $mysql_table";
  19. require_once('libs/recaptchalib.php');
  20. $privatekey = "xxx";
  21. $resp = recaptcha_check_answer ($privatekey,
  22. $_SERVER["REMOTE_ADDR"],
  23. $_POST["recaptcha_challenge_field"],
  24. $_POST["recaptcha_response_field"]);
  25.  
  26. if (!$resp->is_valid)
  27. {
  28. $error_message = "Zły kod";
  29. }
  30. $result = mysql_query($sql, $db);
  31. $nagroda1=mysql_num_rows($result) or die(mysql_error());
  32.  
  33. if ($nagroda1 > 1 )
  34. {
  35.  
  36. $error_message1 = "Brak nagrody";
  37. }
  38. else
  39. echo $nagroda1."<br/><br/>";
  40.  
  41.  
  42. $success_page = './sukces.html';
  43.  
  44. if ($action == 'signup')
  45. {
  46. $newusername = $_POST['username'];
  47. $newemail = $_POST['email'];
  48. $newfullname = $_POST['fullname'];
  49.  
  50. if (!ereg("^[A-Za-z0-9_!@$]{1,50}$", $newusername))
  51. {
  52. $error_message = 'Popraw dane';
  53. }
  54. else
  55. if (!ereg("^[A-Za-z0-9_!@$.' &]{1,50}$", $newfullname))
  56. {
  57. $error_message = 'Popraw dane';
  58. }
  59. else
  60. if (!ereg("^.+@.+\..+$", $newemail))
  61. {
  62. $error_message = 'Popraw dane';
  63. }
  64. if (empty($error_message))
  65. {
  66. $db = mysql_connect($mysql_server, $mysql_username, $mysql_password);
  67. mysql_select_db($mysql_database, $db);
  68. $sql = "SELECT username FROM ".$mysql_table." WHERE username = '".$newusername."'";
  69. $result = mysql_query($sql, $db);
  70. if ($data = mysql_fetch_array($result))
  71. {
  72. $error_message = 'Nick zajęty, spróbuj inny.';
  73. }
  74. }
  75. if (empty($error_message))
  76. {
  77. $sql = "INSERT `".$mysql_table."` (`username`,`fullname`, `email`, `active`) VALUES ('$newusername', '$newfullname', '$newemail', 1)";
  78. $result = mysql_query($sql, $db);
  79. $mailto = $newemail;
  80. $subject = 'Potwierdzenie x';
  81. $message = 'xxx';
  82. $message .= "\r\nUsername: ";
  83. $message .= $newusername;
  84. $message .= "\r\n";
  85. $header = "From: xxx"."\r\n";
  86. $header .= "Reply-To: xxx"."\r\n";
  87. $header .= "MIME-Version: 1.0"."\r\n";
  88. $header .= "Content-Type: text/plain; charset=utf-8"."\r\n";
  89. $header .= "Content-Transfer-Encoding: 8bit"."\r\n";
  90. $header .= "X-Mailer: PHP v".phpversion();
  91. mail($mailto, $subject, $message, $header);
  92. header('Location: '.$success_page);
  93. }
  94. }
  95. ?>


wtedy jeśli $nagroda1 nie jest większa od 1 to wydrukuje ją lub jeśli mysql zglosi bląd to go wydrukuje (jeśli nie ma die mysql_error... to php się nie zatrzymuje
kiepski96
Sprawdziłem i... nie działa :<
matx132
ha jestem ślepy dopiero teraz zauważyłem heh
to musi już dzialac:D

  1. <?php
  2. if (!isset($_SESSION['username']))
  3. {
  4. header('Location: ./login.php');
  5. }
  6. ?>
  7. <?php
  8. $action = isset($_POST['action']) ? $_POST['action'] : '';
  9. $mysql_server = 'localhost';
  10. $mysql_username = 'xxx';
  11. $mysql_password = 'xxx';
  12. $mysql_database = 'xxx';
  13. $mysql_table = 'nagroda1';
  14. $db = mysql_connect($mysql_server, $mysql_username, $mysql_password);
  15. mysql_select_db($mysql_database, $db);
  16. $sql = "SELECT username FROM $mysql_table";
  17. require_once('libs/recaptchalib.php');
  18. $privatekey = "xxx";
  19. $resp = recaptcha_check_answer ($privatekey,
  20. $_SERVER["REMOTE_ADDR"],
  21. $_POST["recaptcha_challenge_field"],
  22. $_POST["recaptcha_response_field"]);
  23.  
  24. if (!$resp->is_valid)
  25. {
  26. $error_message = "Zły kod";
  27. }
  28. $result = mysql_query($sql, $db);
  29. $nagroda1=mysql_num_rows($result) or die(mysql_error());
  30.  
  31. if ($nagroda1 > 1 )
  32. {
  33.  
  34. $error_message1 = "Brak nagrody";
  35. }
  36. else
  37. echo $nagroda1."<br/><br/>";
  38.  
  39.  
  40. $success_page = './sukces.html';
  41.  
  42. if ($action == 'signup')
  43. {
  44. $newusername = $_POST['username'];
  45. $newemail = $_POST['email'];
  46. $newfullname = $_POST['fullname'];
  47.  
  48. if (!ereg("^[A-Za-z0-9_!@$]{1,50}$", $newusername))
  49. {
  50. $error_message = 'Popraw dane';
  51. }
  52. else
  53. if (!ereg("^[A-Za-z0-9_!@$.' &]{1,50}$", $newfullname))
  54. {
  55. $error_message = 'Popraw dane';
  56. }
  57. else
  58. if (!ereg("^.+@.+\..+$", $newemail))
  59. {
  60. $error_message = 'Popraw dane';
  61. }
  62. if (empty($error_message))
  63. {
  64. $db = mysql_connect($mysql_server, $mysql_username, $mysql_password);
  65. mysql_select_db($mysql_database, $db);
  66. $sql = "SELECT username FROM ".$mysql_table." WHERE username = '".$newusername."'";
  67. $result = mysql_query($sql, $db);
  68. if ($data = mysql_fetch_array($result))
  69. {
  70. $error_message = 'Nick zajęty, spróbuj inny.';
  71. }
  72. }
  73. if (isset($error_message)||isset($error_message1))
  74. {
  75. $sql = "INSERT `".$mysql_table."` (`username`,`fullname`, `email`, `active`) VALUES ('$newusername', '$newfullname', '$newemail', 1)";
  76. $result = mysql_query($sql, $db);
  77. $mailto = $newemail;
  78. $subject = 'Potwierdzenie x';
  79. $message = 'xxx';
  80. $message .= "\r\nUsername: ";
  81. $message .= $newusername;
  82. $message .= "\r\n";
  83. $header = "From: xxx"."\r\n";
  84. $header .= "Reply-To: xxx"."\r\n";
  85. $header .= "MIME-Version: 1.0"."\r\n";
  86. $header .= "Content-Type: text/plain; charset=utf-8"."\r\n";
  87. $header .= "Content-Transfer-Encoding: 8bit"."\r\n";
  88. $header .= "X-Mailer: PHP v".phpversion();
  89. mail($mailto, $subject, $message, $header);
  90. header('Location: '.$success_page);
  91. }
  92. }
  93. ?>


byłem ślepy i nie zauważyłem że zmienna to $error_message1
a Ty nigdzie jej nie sprawdzasz dlatego dołożyłem sprawdzanie czy istnieje taka zmienna smile.gif
kiepski96
Coś dziwnego.
Uzupełniłem kod i wrzuciłem na serwer.
Raz zamówiłem nagrodę.
Lecz teraz nie chce mi się wyświetlić strona,po prostu jest biało.
Tak ma być ?
matx132
według kodu tak.
jeśli chcesz żeby coś się wyświetliło musisz dać w ostatni if else { .... }
kiepski96
Nie działa,
ale błąd może stoi w tabeli,bo w niej nie ma żadnego counta i nic .
Tabela jest ok ?


Cytat
CREATE TABLE `nagroda1` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`username` VARCHAR( 50 ) NOT NULL ,
`password` VARCHAR( 50 ) NOT NULL ,
`fullname` VARCHAR( 50 ) NOT NULL ,
`email` VARCHAR( 100 ) NOT NULL ,
`active` INT NOT NULL
)
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.