Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] link referujacy
Forum PHP.pl > Forum > Przedszkole
Lethys
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
pmir13
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.
Lethys
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
nospor
Cytat
stary kod mi sie wrzucił.
To może pokaż właściwy kod. Włącz wyświetlanie wszystkich błędów.
hermo767
17 linijce dajesz value=$ref[user] a skad skrypt to ma wziac, skoro nie ma? wywal to value i bedzie ok
Hpsi
  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
Lethys
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());

nospor
Pola z atrybutem disabled nie są wysyłane razem z formularzem
pmir13
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ć.
Lethys
@ 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
pmir13
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.
Lethys
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
nospor
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.
pmir13
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. }

kill15
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. ?>
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.