Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] skrypt zadań nie działa jak powinien
Forum PHP.pl > Forum > Przedszkole
Th0e
Witam. stworzyłem skrypt zadań, jednak jeśli wykonamy zadanie pierwsze, to złoto nam doda, jednak zawartość kolumny "zadanie" i "wykonanezadania" ustawi na 0, chociaż jest napisane by podało co innego. Przez co gracz może brać dane zadanie bez końca i zgarniać nagrodę. Po wzięciu zadania normalnie wysyła do kolumny "zadanie" informacje o wziętym zadaniu. oto kod:


  1. <strong>PODNIEŚ SWOJE MORALE!</strong>
  2. <br /><a>zadanie 1.</a>
  3. <form method="post">
  4. <input type="hidden" name="zc01" value="zc01" />
  5. <input type="submit" value="rozpocznij zadanie!" />
  6. </form>
  7.  
  8. <strong>DOŁĄCZ DO GILDII!</strong>
  9. <br /><a>zadanie 2</a>
  10. <form method="post">
  11. <input type="hidden" name="zc02" value="zc02" />
  12. <input type="submit" value="rozpocznij zadanie!" />
  13. </form>
  14.  
  15. <strong>ZYSKAJ HONOR!</strong>
  16. <br /><a>zadanie 3</a>
  17. <form method="post">
  18. <input type="hidden" name="zc03" value="zc03" />
  19. <input type="submit" value="rozpocznij zadanie!" />
  20. </form>



  1. <?php
  2.  
  3. $graczyk = mysql_query("SELECT * FROM uzytkownicy WHERE `nick`='$nick'"); // pobranie danych o graczu
  4. $gracz = mysql_fetch_array($graczyk);
  5. $wykonane_zadanka = explode(",", $gracz['wykonanezadania']);
  6.  
  7. if(isset($_POST["zc01"]) && $wykonane_zadanka !== 'zc01'){ //jeśli button kliknięty - zapisze dane o pobraniu zadania.
  8. mysql_query("update uzytkownicy set zadanie= 'zc01' WHERE nick='$nick'")or die(mysql_error());
  9. header("Location: miasto_czlowiek.php?co=wzietozadaniezc01");
  10. }
  11.  
  12. if(isset($_GET["co"]) && $_GET["co"] == "wzietozadaniezc01") { //info że zadanie zostało zaakceptowane
  13. echo "zadanie PODNIEŚ SWOJE MORALE, zostało akceptowane. ";
  14. }
  15.  
  16. //zadanie 02
  17.  
  18. if(isset($_POST["zc02"]) && $wykonane_zadanka !== 'zc01'){ //jeśli button kliknięty - zapisze dane o pobraniu zadania.
  19. mysql_query("update uzytkownicy set zadanie= 'zc02' WHERE nick='$nick'")or die(mysql_error());
  20. header("Location: miasto_czlowiek.php?co=wzietozadaniezc02");
  21. }
  22.  
  23. if(isset($_GET["co"]) && $_GET["co"] == "wzietozadaniezc02") { //info że zadanie zostało zaakceptowane
  24. echo "zadanie DOŁĄCZ DO GILDII, zostało akceptowane. ";
  25. }
  26.  
  27. //zadanie 03
  28.  
  29. if(isset($_POST["zc03"]) && $wykonane_zadanka !== 'zc03'){ //jeśli button kliknięty - zapisze dane o pobraniu zadania.
  30. mysql_query("update uzytkownicy set zadanie= 'zc03' WHERE nick='$nick'")or die(mysql_error());
  31. header("Location: miasto_czlowiek.php?co=wzietozadaniezc03");
  32. }
  33.  
  34. if(isset($_GET["co"]) && $_GET["co"] == "wzietozadaniezc03") { //info że zadanie zostało zaakceptowane
  35. echo "zadanie ZYSKAJ HONOR, zostało akceptowane. ";
  36. }
  37.  
  38. //nagroda za wykonanie zadanie pierwszego
  39. if($gracz['level'] >= '10' && $gracz['zadanie'] == "zc01" && $gracz['wykonanezadania'] !== "zc01" ){
  40. mysql_query("update uzytkownicy set zadanie= "wykonane", wykonanezadania=`wykonanezadania` + "zc01" WHERE nick='$nick'")or die(mysql_error());
  41. header("Location: miasto_czlowiek.php?co=wykonanozadaniezc01");
  42. }
  43.  
  44. if(isset($_GET["co"]) && $_GET["co"] == "wykonanozadaniezc01") {
  45. echo "<br />Gratulacje! wykonałeś zadanie PODNIEŚ SWOJE MORALE!";
  46. }
jaslanin
podaj strukturę tabeli, wydaje mi się że albo masz kolumny typu int a nie varchar

albo problemem jest to że znak plus w mysql nie łączy stringów, służy do tego funkcja CONCAT

dodatkowo kod nie wygląda na zabezpieczony przed SQL INJECTION
abort
Stosujesz konstrukcję:
  1. mysql_query("update uzytkownicy set zadanie= "wykonane", wykonanezadania=`wykonanezadania` + "zc01" WHERE nick='$nick'")or die(mysql_error());

I tu masz problem.
Rozbij sobie to na:
  1. $q = "update........"; // wszystko co potrzebujesz

I jak Ci query nie zadziała, to możesz sobie je wyrzucić np. do przeglądarki.
Celowo piszę "jak nie zadziała", bo wiem że nie działa.

Mało tego: wiem, że w konstrukcji zapytania jest problem - aż się dziwię, że php nie pluje conajmniej warningami smile.gif
-Th0e-
zrobilem juz ze dziala:

  1. <strong>PODNIEŒ SWOJE MORALE!</strong>
  2. <br /><a>Czas zdobyć szacunek w tutejszym otoczeniu, pokaż na co Cię stać. ZdobšdŸ 10 poziom doœwiadczenia i otrzymaj nagrodę.</a>
  3. <form method="post">
  4. <input type="hidden" name="zc01" value="zc01" />
  5. <input type="submit" value="rozpocznij zadanie!" />
  6. </form>
  7.  
  8.  
  9. <?php
  10. //pobieranie danych o graczu
  11. $graczyk = mysql_query("SELECT * FROM uzytkownicy WHERE `nick`='$nick'"); // pobranie danych o graczu
  12. $gracz = mysql_fetch_array($graczyk);
  13.  
  14. //zadanie 01
  15. if(isset($_POST["zc01"])){
  16.  
  17. if($gracz['wykonanezadania'] !== 'zc01'){ //jeœli button kliknięty - zapisze dane o pobraniu zadania.
  18. mysql_query("update uzytkownicy set zadanie= 'zc01' WHERE nick='$nick'")or die(mysql_error());
  19. header("Location: miasto_zadania.php?co=wzietozadaniezc01");
  20. }
  21. else {
  22. header("Location: miasto_zadania.php?co=nie_mozna_zaakceptowac_zadania");
  23.  
  24. }
  25. }
  26.  
  27. if(isset($_GET["co"]) && $_GET["co"] == "wzietozadaniezc01") { //info że zadanie zostało zaakceptowane
  28. echo "zadanie PODNIEŒ SWOJE MORALE, zostało akceptowane. ";
  29. }
  30. //nagroda za wykonanie zadanie pierwszego
  31. if($gracz['level'] >= '10' && $gracz['zadanie'] == "zc01" && $gracz['wykonanezadania'] !== "zc01" ){
  32. $zadaneczko01 = 'dupa';
  33. $wykonane01 = 'zc01';
  34. mysql_query("update uzytkownicy set zadanie= '$zadaneczko01', wykonanezadania = +'$wykonane01' WHERE nick='$nick'")or die(mysql_error());
  35. header("Location: miasto_zadania.php?co=wykonanozadaniezc01");
  36. }
  37. if(isset($_GET["co"]) && $_GET["co"] == "wykonanozadaniezc01") {
  38. echo "<br />Gratulacje! wykonałeœ zadanie PODNIEŒ SWOJE MORALE!";
  39. }
  40.  
  41.  
  42. ?>


jednak chcialbym zrobic by w kolumnie wykonanezadania wyszukiwalo czy nie ma tam informacji "zc01", jak na razie dziala bo jest jedno zadanie. ale jak zrobie wiecej to kolumnapewnie bedzie wygladac tak: zc01zc02 - a wtedy bedzie mozna powtorzyc zadanie bo zawartosc juz nie bedzie zc01... probowalem to zrobic z tym: http://kursphp.com/szukanie_podciagu.php

ale po zastosowaniu tego po wykonaniu zadania wysyla mi do kolumny wykonanezadania tylko "0". czy da sie to jakos zrobic z explode?
viking
Cytat(-Th0e- @ 18.10.2012, 13:58:09 ) *
zrobilem juz ze dziala:

[php]html...
header...
header...

Jesteś pewien? Ja tu widzę "headers already sent".
abort
Cytat(-Th0e- @ 18.10.2012, 13:58:09 ) *
mysql_query("update uzytkownicy set zadanie= '$zadaneczko01', wykonanezadania = +'$wykonane01' WHERE nick='$nick'")or die(mysql_error());
[/php]

Znak "+" w MySQL nie służy do dodawania CIĄGÓW ZNAKÓW.
user jaslanin już Ci to napisał.
Nie czytasz tego, co inni piszą.
Th0e
czyli jak mam napisać takie coś? :
  1. mysql_query("update uzytkownicy set zadanie= '$zadaneczko01', wykonanezadania =`wykonanezadania` CONCAT '$wykonane01' WHERE nick='$nick'")or die(mysql_error());


viking na samej górze strony mam:

  1. <?php ob_start(); ?>


i próbowałem robić to z IN ARRAY, ale po każdym kliknięciu na przycisk by wziąć misje pokazuje mi Gratulacje... (że wykonałem) mimo że w tabeli wykonanezadania mam już informacje o wykonanym zadaniu. oto mój aktualny kod:

  1. <?php
  2. //pobieranie danych o graczu
  3. $graczyk = mysql_query("SELECT * FROM uzytkownicy WHERE `nick`='$nick'"); // pobranie danych o graczu
  4. $gracz = mysql_fetch_array($graczyk);
  5. //$dane_o_wykonanych = explode(",", $gracz['wykonanezadania']);
  6.  
  7. //zadanie 01
  8. if(isset($_POST["zc01"])){
  9.  
  10. if(in_array("zc01",$gracz['wykonanezadania'])){
  11. echo "wykonałeś już kiedyś to zadanie!";
  12. }
  13. else{
  14. mysql_query("update uzytkownicy set zadanie= 'zc01' WHERE nick='$nick'")or die(mysql_error());
  15. header("Location: miasto_zadania.php?co=wzietozadaniezc01");
  16. }
  17. }
  18.  
  19. if(isset($_GET["co"]) && $_GET["co"] == "wzietozadaniezc01") { //info że zadanie zostało zaakceptowane
  20. echo "zadanie PODNIEŚ SWOJE MORALE, zostało akceptowane. ";
  21. }
  22. //nagroda za wykonanie zadanie pierwszego
  23. if($gracz['level'] >= '10' && $gracz['zadanie'] == "zc01"){
  24.  
  25. if(in_array("zc01",$gracz['wykonanezadania'])){
  26. echo "ech beng beng";
  27. }
  28.  
  29. else {
  30. $zadaneczko01 = 'dupa';
  31. $wykonane01 = 'zc01';
  32. mysql_query("update uzytkownicy set zadanie= '$zadaneczko01', wykonanezadania = +'$wykonane01' WHERE nick='$nick'")or die(mysql_error());
  33. header("Location: miasto_zadania.php?co=wykonanozadaniezc01");
  34. }
  35. }
  36.  
  37. if(isset($_GET["co"]) && $_GET["co"] == "wykonanozadaniezc01") {
  38. echo "<br />Gratulacje! wykonałeś zadanie PODNIEŚ SWOJE MORALE!";
  39. }
  40.  
  41.  
  42. ?>
jaslanin
wchodzisz na google.pl wpisujesz w pole tekstowe "mysql concat", klikasz wyszukaj, wchodzisz na pierwszy link, wciskasz ctrl + f, wpisujesz concat, znajdujesz link CONCAT(), klikasz, czytasz dopóki nie trafisz na CONCAT_WS
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.