Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP] link referujacy
Lethys
post
Post #1





Grupa: Zarejestrowani
Postów: 642
Pomógł: 2
Dołączył: 9.03.2006

Ostrzeżenie: (30%)
XX---


Witam,

Chcę zrobić system polecania gry.

Problem polega na tym, że mimo iż mimo że zmianna $ref pobiera z linku polecajacego to nie jest on dodawany do bazy :/

Na tym linku można zobaczyć że gracz jest sczytywany http://www.westernlife.pl/poleca/lethys/

Obecnie wygląda to tak:


  1.  
  2. <?php
  3. $ref = mysql_fetch_array(mysql_query("select * from players where user='$ref'"));
  4. ?>
  5.  
  6.  
  7. <form method=post action=rejestracja.php?action=register>
  8.  
  9. <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" width="500" align="center" height="200">
  10. <tr>
  11. <td width="100%" align="center">
  12. <table border="0">
  13. <tr><td>Użytkownik:</td><td><input type="text" name="user" maxlength="10"></td></tr>
  14. <tr><td>Email:</td><td><input type="text" name="email" maxlength="40"></td></tr>
  15. <tr><td>Powtórz mail:</td><td><input type="text" name="vemail" maxlength="40"></td></tr>
  16. <tr><td>Hasło:</td><td><input type="password" name="pass" maxlength="15"></td></tr>
  17. <tr><td>Polecający:</td><td><?php echo("<input type=\"text\" name=\"referujacy\" value=\"$ref[user]\" disabled=\"disabled\" />"); ?></td></tr>
  18. <tr><td></td><td><br><br><input type="submit" value="Rejestracja" name="submit"></td></tr>
  19. </table>
  20. </form>
  21. <br>Rejestrując się akceptujesz <a href=regulamin.php>regulamin</a>
  22. </td>
  23. </tr>
  24. </table>
  25.  
  26.  
  27.  
  28. <?php
  29. if (isset ($_POST['submit'])){//isset wyslij
  30.  
  31. include("config.php");
  32.  
  33.  
  34. if (!$user || !$email || !$vemail|| !$pass) {
  35. $problem = TRUE;
  36. echo("<p id='uwaga'><h2>Musisz wypełnić wszystkie pola.</h2></p>");
  37. }
  38. if (10 < strlen($_POST['user'])) {
  39. echo("<p id='uwaga'><h2>Zbyt długa nazwa loginu. Maksymalnie <b>10</b> znaków.</h2></p>");
  40. $problem = TRUE;
  41. }
  42. if (strlen($_POST['email']) != strlen($_POST['vemail'])) {
  43. echo("<p id='uwaga'><h2>Podane przez Ciebie emaile się nie zgadzają. Potwierdzony email musi być taki sam.</h2></p>");
  44. $problem = TRUE;
  45. }
  46. $test1 = mysql_num_rows(mysql_query("select * from players where user='".$_POST['user']."'"));
  47. if ($test1 > 0) {
  48. echo("<p id='uwaga'><h2>Ktoś już użył takiej nazwy użytkownika, musisz wybrać inną.</h2></p>");
  49. $problem = TRUE;
  50. }
  51. $test2 = mysql_num_rows(mysql_query("select * from players where email='".$_POST['email']."'"));
  52. if ($test2 > 0) {
  53. echo("<p id='uwaga'><h2>Ktoś już użył takiego adresu email. Musisz użyć innego adresu.</h2></p>");
  54. $problem = TRUE;
  55. }
  56. $test3 = mysql_num_rows(mysql_query("select * from gracze where user='".$_POST['user']."'"));
  57. if ($test3 > 0) {
  58. echo("<p id='uwaga'><h2>Ktoś już użył takiej nazwy użytkownika, musisz wybrać inną.</h2></p>");
  59. $problem = TRUE;
  60. }
  61. $test4 = mysql_num_rows(mysql_query("select * from gracze where email='".$_POST['email']."'"));
  62. if ($test4 > 0) {
  63. echo("<p id='uwaga'><h2>Ktoś już użył takiego adresu email. Musisz użyć innego adresu.</h2></p>");
  64. $problem = TRUE;
  65. }
  66. if (15 < strlen($_POST['pass'])) {
  67. echo("<p id='uwaga'><h2>Twoje hasło jest za długie. Maksymalnie możesz użyć <b>15</b> znaków.</h2></p>");
  68. $problem = TRUE;
  69. }
  70. if(!preg_match('/^([a-ż0-9_]+)$/i', $_POST['user'])){
  71. $problem = TRUE;
  72. echo("<p id='uwaga'><h2>Użyto niedozwolonych znaków w nazwie użytkownika.</h2></p>");
  73. }
  74. if(!preg_match('/^([a-ż0-9_]+)$/i', $_POST['pass'])){
  75. $problem = TRUE;
  76. echo("<p id='uwaga'><h2>Użyto niedozwolonych znaków w haśle.</h2></p>");
  77. }
  78.  
  79.  
  80. if (!$problem){
  81.  
  82.  
  83.  
  84. $data = date("d.m.y");
  85. $haslo = md5($pass);
  86. $kod = rand(100000000,999999999);
  87. global $referujacy;
  88.  
  89. mysql_query("insert into gracze (user, email, pass, data, kod, ref) values ('$user','$email','$haslo','$data','$kod','$referujacy')") or die("Nie można zarejestować.");
  90.  
  91.  
  92. /// blabal dalej kod


Ten post edytował Lethys 13.04.2011, 16:05:08


--------------------
filmy podobne do - wyszukiwarka podobnych filmów
motywacja do działania - Bądź Lepszy
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 14)
pmir13
post
Post #2





Grupa: Zarejestrowani
Postów: 282
Pomógł: 89
Dołączył: 12.04.2011

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


W linii 87 definiujesz zmienną globalną $referujacy i próbujesz wstawić do bazy nie przypisując jej żadnej wartości.
Nie ma ona nic wspólnego ze zmienną $ref, do której na początku coś tam wpisujesz.
Go to the top of the page
+Quote Post
Lethys
post
Post #3





Grupa: Zarejestrowani
Postów: 642
Pomógł: 2
Dołączył: 9.03.2006

Ostrzeżenie: (30%)
XX---


Tej globalnej nie powinno być, stary kod mi sie wrzucił.

No ale bez globalnej też nie działa.

Czemu takie zmiennie jak: $user czy $pass są dodawane do bazy skoro też są z formularza?

Jak dodać do bazy zmienną $referujacy


--------------------
filmy podobne do - wyszukiwarka podobnych filmów
motywacja do działania - Bądź Lepszy
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
stary kod mi sie wrzucił.
To może pokaż właściwy kod. Włącz wyświetlanie wszystkich błędów.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
hermo767
post
Post #5





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 12.04.2011

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


17 linijce dajesz value=$ref[user] a skad skrypt to ma wziac, skoro nie ma? wywal to value i bedzie ok
Go to the top of the page
+Quote Post
Hpsi
post
Post #6





Grupa: Zarejestrowani
Postów: 483
Pomógł: 50
Dołączył: 15.03.2005
Skąd: Poznań

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


  1. <?php
  2. $ref = mysql_fetch_array(mysql_query("select * from players where user='$ref'"));
  3. ?>


a masz wartośc $ref ? bo rozumiem ze pobierasz z adresu nazwe referujacego czyli np twojastrona.pl?ref=hpsi+
wtedy $ref = $_GET['ref']; wg mnie powinno to mniej więcej śmigać, ale dołączam się do proźby nospora


--------------------
Daiquiri: T1 = (dx/dt * s)^hpsi
Daiquiri: gdzie T1 - Twój czas przybycia na miejsce, dx/dt - prędkość, s droga
Daiquiri: brb trzeba by to poprawić T1 - Czas jaki Ci to zajmie
Daiquiri: Zatem T - czas dotarcia p T1 + T2 gdzie T2 = aktualny czas

===
po prostu kocham ją :D haha
Go to the top of the page
+Quote Post
Lethys
post
Post #7





Grupa: Zarejestrowani
Postów: 642
Pomógł: 2
Dołączył: 9.03.2006

Ostrzeżenie: (30%)
XX---


Kod jest taki sam, tzn w starej wersji nie było tej globalnej, to jedyna różnica.

Włączyłem wyświetlanie błędów:

Wyskoczyło

Cytat
Notice: Undefined variable: problem in /srv/www/vhosts/westernlife.pl/httpdocs/rejestracja.php on line 85 Notice: Undefined variable: referujacy in /srv/www/vhosts/westernlife.pl/httpdocs/rejestracja.php on line 93


linijka 85:
  1. if (!$problem){


linijka 93:

  1. mysql_query("insert into gracze (user, email, pass, data, kod, ref) values('$user','$email','$haslo','$data','$kod','$referujacy')") or die(mysql_error());



--------------------
filmy podobne do - wyszukiwarka podobnych filmów
motywacja do działania - Bądź Lepszy
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Pola z atrybutem disabled nie są wysyłane razem z formularzem


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
pmir13
post
Post #9





Grupa: Zarejestrowani
Postów: 282
Pomógł: 89
Dołączył: 12.04.2011

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


Z jaką wartością startuje $problem?
Dodaj na początku $problem = FALSE;
Podobnie tam gdzie byl ten global wrzuć: $referujacy = $_POST['referujacy'];
Zmień w formularzu input type="hidden", wywal disabled.
Sprawdź dokładnie co jest w $referujacy, nawet jak nie jest wyświetlany na stronie i tak można tam wszystko wpisać.

Ten post edytował pmir13 13.04.2011, 16:47:53
Go to the top of the page
+Quote Post
Lethys
post
Post #10





Grupa: Zarejestrowani
Postów: 642
Pomógł: 2
Dołączył: 9.03.2006

Ostrzeżenie: (30%)
XX---


@ nospor

To jak mogę rozwiązać ten problem?

Nie chciałbym dać normalnego pola bo użytkownicy będą mogli gmerać przy refie.

@pmir13

Zrobiłem jak napisałeśaleś ale to nic nie dało. Nadal nie dodaje refera do bazy sad.gif


--------------------
filmy podobne do - wyszukiwarka podobnych filmów
motywacja do działania - Bądź Lepszy
Go to the top of the page
+Quote Post
pmir13
post
Post #11





Grupa: Zarejestrowani
Postów: 282
Pomógł: 89
Dołączył: 12.04.2011

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


W zasadzie linki referujące mają w urlu albo id osoby referującej albo nazwę.
Rozumiem, że nie pokazałeś tego fragmentu kodu, który wcześniej pobiera refa z $_GET
Później w pierwszych linijkach tego co widzimy sprawdzasz, czy jest taki user w bazie, ale co jeśli go nie ma?
Używasz konstrukcji $ref = costam( $ref ), czyli pozbywasz się starej wartości i jeśli nie dostaniesz nowej prawidłowej to nie masz nic.
Nie używasz mysql_error() więc nie widzisz nawet czy nie było problemów z wykonaniem zapytania.
Powinieneś używać co najmniej konstrukcji $res = mysql_query( $query ) or die ( mysql_error() );
albo najlepiej napisać sobie własną funkcję z lepszą kontrolą błędów.
No i oczywiście zawartość $_GET też trzeba dokładnie sprawdzić zanim złożysz z tego zapytanie do bazy.
Go to the top of the page
+Quote Post
Lethys
post
Post #12





Grupa: Zarejestrowani
Postów: 642
Pomógł: 2
Dołączył: 9.03.2006

Ostrzeżenie: (30%)
XX---


Id osoby polecającej pobiera ta zmienna:

  1. $ref = mysql_fetch_array(mysql_query("select * from players where id='$ref'"));


z linku rejestracja.php?ref=1

$ref[id] będzie wynosiło 1



Cały kod wygląda tak:


Przy tym kodzie wypada błąd:

Cytat
Notice: Undefined index: referujacy in /srv/www/vhosts/westernlife.pl/httpdocs/rejestracja.php on line 95



  1. <?php
  2. ini_set('display_errors', 1);
  3. $problem = FALSE;
  4. include "header.php";
  5. include "left_sidebar.php";
  6. $ref = mysql_fetch_array(mysql_query("select * from players where id='$ref'"));
  7. ?>
  8. <!-- end #left-sidebar -->
  9. <div id="content">
  10. <div class="box">
  11. <h2 class="title">Rejestracja</h2>
  12. <div class="content">
  13.  
  14. <form method=post action=rejestracja.php?action=register>
  15.  
  16. <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" width="500" align="center" height="200">
  17. <tr>
  18. <td width="100%" align="center">
  19. <table border="0">
  20. <tr><td>Użytkownik:</td><td><input type="text" name="user" maxlength="10"></td></tr>
  21. <tr><td>Email:</td><td><input type="text" name="email" maxlength="40"></td></tr>
  22. <tr><td>Powtórz mail:</td><td><input type="text" name="vemail" maxlength="40"></td></tr>
  23. <tr><td>Hasło:</td><td><input type="password" name="pass" maxlength="15"></td></tr>
  24. <tr><td>Polecający ID:</td><td><?php echo("<input type=\"text\" name=\"referujacy\" value=\"$ref[id]\" disabled=\"disabled\" />"); ?></td></tr>
  25. <tr><td></td><td><br><br><input type="submit" value="Rejestracja" name="submit"></td></tr>
  26. </table>
  27. </form>
  28. <br>Rejestrując się akceptujesz <a href=regulamin.php>regulamin</a>
  29. </td>
  30. </tr>
  31. </table>
  32.  
  33. <?php
  34. if (isset ($_POST['submit'])){//isset wyslij
  35.  
  36. include("config.php");
  37.  
  38.  
  39.  
  40. if (!$user || !$email || !$vemail|| !$pass) {
  41. $problem = TRUE;
  42. echo("<p id='uwaga'><h2>Musisz wypełnić wszystkie pola.</h2></p>");
  43. }
  44. if (10 < strlen($_POST['user'])) {
  45. echo("<p id='uwaga'><h2>Zbyt długa nazwa loginu. Maksymalnie <b>10</b> znaków.</h2></p>");
  46. $problem = TRUE;
  47. }
  48. if (strlen($_POST['email']) != strlen($_POST['vemail'])) {
  49. echo("<p id='uwaga'><h2>Podane przez Ciebie emaile się nie zgadzają. Potwierdzony email musi być taki sam.</h2></p>");
  50. $problem = TRUE;
  51. }
  52. $test1 = mysql_num_rows(mysql_query("select * from players where user='".$_POST['user']."'"));
  53. if ($test1 > 0) {
  54. echo("<p id='uwaga'><h2>Ktoś już użył takiej nazwy użytkownika, musisz wybrać inną.</h2></p>");
  55. $problem = TRUE;
  56. }
  57. $test2 = mysql_num_rows(mysql_query("select * from players where email='".$_POST['email']."'"));
  58. if ($test2 > 0) {
  59. echo("<p id='uwaga'><h2>Ktoś już użył takiego adresu email. Musisz użyć innego adresu.</h2></p>");
  60. $problem = TRUE;
  61. }
  62. $test3 = mysql_num_rows(mysql_query("select * from gracze where user='".$_POST['user']."'"));
  63. if ($test3 > 0) {
  64. echo("<p id='uwaga'><h2>Ktoś już użył takiej nazwy użytkownika, musisz wybrać inną.</h2></p>");
  65. $problem = TRUE;
  66. }
  67. $test4 = mysql_num_rows(mysql_query("select * from gracze where email='".$_POST['email']."'"));
  68. if ($test4 > 0) {
  69. echo("<p id='uwaga'><h2>Ktoś już użył takiego adresu email. Musisz użyć innego adresu.</h2></p>");
  70. $problem = TRUE;
  71. }
  72. if (15 < strlen($_POST['pass'])) {
  73. echo("<p id='uwaga'><h2>Twoje hasło jest za długie. Maksymalnie możesz użyć <b>15</b> znaków.</h2></p>");
  74. $problem = TRUE;
  75. }
  76. if(!preg_match('/^([a-ż0-9_]+)$/i', $_POST['user'])){
  77. $problem = TRUE;
  78. echo("<p id='uwaga'><h2>Użyto niedozwolonych znaków w nazwie użytkownika.</h2></p>");
  79. }
  80. if(!preg_match('/^([a-ż0-9_]+)$/i', $_POST['pass'])){
  81. $problem = TRUE;
  82. echo("<p id='uwaga'><h2>Użyto niedozwolonych znaków w haśle.</h2></p>");
  83. }
  84.  
  85.  
  86. if (!$problem){
  87.  
  88.  
  89.  
  90. $data = date("d.m.y");
  91. $haslo = md5($pass);
  92. $kod = rand(100000000,999999999);
  93. $ref = intval($_POST['referujacy']);
  94.  
  95.  
  96.  
  97. mysql_query("insert into gracze (user, email, pass, data, kod, ref) values('$user','$email','$haslo','$data','$kod','$ref')") or die(mysql_error());
  98.  
  99.  
  100.  
  101. echo("<br><p><h2>Zostałeś zarejestrowany, odbierz pocztę i aktywuj konto.</h2></p>");
  102.  
  103. }else{
  104. echo("<br><p>Wróć do <a href=rejestracja.php>poprzedniej strony</a> i spróbuj ponownie.</p>");
  105. }
  106. }
  107.  
  108. ?>



Nie mam pojęcia co już tutaj poprawić, może mi ktoś pomóc ogarnąć to ? wink.gif


--------------------
filmy podobne do - wyszukiwarka podobnych filmów
motywacja do działania - Bądź Lepszy
Go to the top of the page
+Quote Post
nospor
post
Post #13





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Nie chciałbym dać normalnego pola bo użytkownicy będą mogli gmerać przy refie.
Przecież disabled też bez problemu można zmienić smile.gif
Daj hidden i po sprawie.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
pmir13
post
Post #14





Grupa: Zarejestrowani
Postów: 282
Pomógł: 89
Dołączył: 12.04.2011

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


Masz na serwerze ustawione register_globals on, więc do zmiennych możesz dostać się bezpośrednio, niezależnie czy jest to get, post czy inne, a to mocno utrudnia połapanie się w kodzie. Dużo lepiej byłoby gdybyś uczył się bez takich "ułatwień".
Zmienne podanych w URLu są w tablicy $_GET, czyli na przykład jeśli masz adres
http://www.westernlife.pl/rejestracja.php?ref=12573
to powinieneś dostać wartość 12573 w $_GET['ref']
  1. $problem = 0;
  2. if( !isset($_GET['ref'] ) )
  3. $_GET['ref'] = 0;
  4. $referujacy = $_GET['ref'];

Następnie sprawdzasz wartość $referujacy pod kątem możliwości grzebania, przepuszczając wyłącznie 1 do 6 cyfr z zakresu 0-9, chyba nie planujesz więcej niż milion graczy.
  1. if( !preg_match( "/^([0-9]){1,6}$/", $referujacy ) )
  2. $referujacy = 0;

Następnie sprawdzasz czy taki user jest w bazie danych
  1. $query = "SELECT user FROM players WHERE id=$referujacy";
  2. $res = mysql_query( $query ) or die( mysql_error() );
  3. $player = mysql_fetch_row( $res ) ;
  4. if( $player )
  5. $ref_username = $player[0];
  6. else
  7. {
  8. $ref_username = "";
  9. $referujacy = 0;
  10. }

Do bazy bedziesz wrzucac jego id, czyli $referujacy, a $ref_username może zostać do wyswietlenia w formularzu w polu disabled jeśli bardzo tego pragniesz.
Następnie sprawdzamy co trzeba zrobić, czy wyświetlić formularz czy może od razu rejestrować.
  1. if( !isset ($_GET['action'] ) )
  2. $_GET['action'] = 0;
  3. $action = $_GET['action'];
  4. if( $action == "register" )
  5. {
  6. // sprawdzamy poprawność wprowadzonych pól, ustawiamy $problem jeśli coś nie tak
  7. // wyświetlamy odpowiedni komunikat lub rejestrujemy
  8. }
  9. if( $problem || $action != "register" )
  10. {
  11. // wyświetlamy formularz do rejestracji
  12. }

Go to the top of the page
+Quote Post
kill15
post
Post #15





Grupa: Zarejestrowani
Postów: 184
Pomógł: 14
Dołączył: 21.12.2010

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


Przeczytaj co Ci tu napisze, trochę nie kontaktuje ale może Cię dobrze zrozumiałem
  1. <?php
  2. $lol = $_GET[raz];
  3.  
  4. $spr = mysql_query("SELECT id FROM players WHERE user = '$lol' ");
  5. $spr1 = mysql_fetch_assoc($spr);
  6. $spr2 = $spr1[id];
  7.  
  8. if($spr2 = FALSE) //
  9. {
  10. $referujacy = "0";
  11. }
  12. else
  13. {
  14. $referujacy = $lol;
  15. }
  16.  
  17. ?>
  18. <form action="mama_mnie_bije_bo_jest_koksem.mamusia">
  19.  
  20. <input type="text" name="krolik" value="<?php echo $lol; ?>" />
  21. </form>

Dlaczego ukrywasz tutaj polecającego po co questionmark.gif biggrin.gif
i pod linkiem:

www.mojamamamniebije.pl/bije.php?raz=IMIEMOJEJMAMY

oczywiście:
mojamamamniebije - adres strony
bije - plik twój
IMIEMOJEJMAMY - to będzie oczywiście polecajacy
Pokładaj sobie to i zmodyfikuj. No i powinno Ci działać ;>
Jeżeli disabled nie wyślesz a nie chcesz żeby ktoś się przy tym polu bawił to może usuń to pole i wyślij ze zmiennej. albo

  1. <?php
  2. if(!isset($lol) AND empty($lol) AND $lol != "")
  3. {
  4. ?>
  5. <input type="text" name="krolik" value="" > // Chyba jak nie ma z linku to chodzi o to żeby wpisać nieprawdaż /?
  6. <?php
  7. $referujacy = $_POST[krolik];
  8. }
  9. else
  10. {
  11. $referujacy = $lol;
  12. }
  13. ?>


Ten post edytował kill15 13.04.2011, 22:39:29
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 04:29