Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem z walką z graczem - bład
awek520
post
Post #1





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 28.08.2013

Ostrzeżenie: (20%)
X----


Witam. Tworzę taki mały system walki z innymi graczami..

Mam tabele users, gdzie wszystkie dane są zapisane.. No i wyciągłem informacje z bazy o przeciwniku i o atakującym.. No ale ciągle wyskakuje mi że dany gracz nie istnieje.. i można też siebie tak jakby zaatakowac.. a teraz mam taki bład..

  1. Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in C:\WebServ\httpd\wal_gracz.php on line 10


Oto kod:

  1. <?php
  2. if ($_POST['przeciwnik']!='' && $_POST['przeciwnik']!=$_SESSION['login']){
  3. $przeciwnik=mysql_query("SELECT * FROM users WHERE login=$_POST[$przeciwnik] LIMIT 1");
  4.  
  5. if(mysql_num_rows($przeciwnik)!==1){
  6. echo 'Taki gracz nie istnieje!';
  7. }
  8. else {
  9.  
  10. $atakujacy=mysql_query("SELECT * FROM users WHERE login='$_SESSION['login']' LIMIT 1");
  11. $atakujacy=mysql_fetch_assoc($atakujacy);
  12. $przeciwnik=mysql_fetch_assoc($przeciwnik);
  13.  
  14. }
  15.  
  16. }
  17. else if ($_POST['login']!=''){
  18. echo 'Nie możesz atakowac siebie!';
  19. }
  20.  
  21. ?>
  22.  
  23.  
  24.  
  25. <form name="input" action="game.php?a=wal_gracz" method="post">
  26. Przeciwnik: <input type="text" name="przeciwnik" /><br>
  27. <input type="submit" value="Atakuj">
  28. </form>



Co jest nie tak ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
daniel1302
post
Post #2





Grupa: Zarejestrowani
Postów: 602
Pomógł: 30
Dołączył: 1.08.2007
Skąd: Nowy Sącz

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


  1. $atakujacy=mysql_query("SELECT * FROM users WHERE login='$_SESSION['login']' LIMIT 1");

zmien na
  1. $atakujacy=mysql_query("SELECT * FROM users WHERE login='".$_SESSION['login']."' LIMIT 1");


Ten post edytował daniel1302 20.05.2014, 20:11:32
Go to the top of the page
+Quote Post
Wazniak96
post
Post #3





Grupa: Zarejestrowani
Postów: 550
Pomógł: 75
Dołączył: 5.06.2012
Skąd: Lębork

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


Kolego dzieje się tak ponieważ dałeś apostrofy w apostrofach w linijce numer 10.
  1. $atakujacy=mysql_query("SELECT * FROM users WHERE login='".$_SESSION['login']."' LIMIT 1");


PS: wyciągnąłem* (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
awek520
post
Post #4





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 28.08.2013

Ostrzeżenie: (20%)
X----


No działa działa (IMG:style_emoticons/default/smile.gif)

Ale dalej mam problem z tym.. że obojętnie jaki nick wpisze.. zawsze jest błąd że dany użytkonwik nie istnieje.. no i można samego siebie atakowac..


PS: wyciągnąłem* - racja.. Jestem z śląska.. a do tego dyslektyk ; /

Ten post edytował awek520 20.05.2014, 21:08:51
Go to the top of the page
+Quote Post
daniel1302
post
Post #5





Grupa: Zarejestrowani
Postów: 602
Pomógł: 30
Dołączył: 1.08.2007
Skąd: Nowy Sącz

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


1) Sprawdź jak zabezpieczyć skeypt przed SQL INJECTION
2) Przeczytaj poradnik PHP i zabieraj sie za pisanie gier. Ja kiedyś testowałem grę gdzie ktoś sobie dodawał kase nonstop i nie wiadomo gdzie, testowaliśmy zmienne po koleji i wykryliśmy 2 błędy SQL injection ale to nie było to, bo proceder dalej był aktualny, okozało się po nasłuchu danego usera i sprawdzeniu co robi akcja po akcji, że sprzedawał niesttniejące przedmioty. Więc ludzie nieźle kombinują i wbrew pozorom nie tylko laicy grają w viawww.
3) Linię:
  1. $przeciwnik=mysql_query("SELECT * FROM users WHERE login=$_POST[$przeciwnik] LIMIT 1");

zmień na
  1. $przeciwnik=mysql_query("SELECT * FROM users WHERE login='".$_POST[$przeciwnik]."' LIMIT 1");


Jeśli wstawiasz jakiś tekst do zapytania SQL musi on być w apostrofie '

http://multimedia.journalism.berkeley.edu/...ning-variables/


Go to the top of the page
+Quote Post
Wazniak96
post
Post #6





Grupa: Zarejestrowani
Postów: 550
Pomógł: 75
Dołączył: 5.06.2012
Skąd: Lębork

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


1. Nie $_POST[$przeciwnik] a $_POST['przeciwnik'], daniel trochę uwagi (IMG:style_emoticons/default/smile.gif)
2. Nie sprawdzasz bardzo ważnego warunku, a raczej robisz to źle. isset empty
3. W twoim skrypcie nie widzę session_start stąd wnioskuję, że sesja nie zaeiera twojego nicku bo nie zostala otworzona. Do tego Wazniak != WAZNIAK dlatego użyj strtolower (IMG:style_emoticons/default/tongue.gif)
4. Używar raczej mysql_num_rows($query) == 0
Go to the top of the page
+Quote Post
awek520
post
Post #7





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 28.08.2013

Ostrzeżenie: (20%)
X----


Ok, dziękujemy każdemu (IMG:style_emoticons/default/smile.gif) cały skrypcik działa dobrze (IMG:style_emoticons/default/wink.gif)

Ten post edytował awek520 21.05.2014, 11:54:02
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.12.2025 - 17:58