Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zmiana wartości w tabeli.
Forum PHP.pl > Forum > Bazy danych
Gruchol
Witam,
Próbuje zrobić panel sterowania do serwera pewnej gry ( w ramach ćwiczeń, dopiero się uczę PHP i MySQL )
I mam taką tabelę :

I chcę zrobić tak aby gdy ktoś wpisze w formularzu mushroom, tam gdzie jest EVENT wartość value zmieniła się z 3 na 5.
Formularz wygląda tak :

  1. <form method="post" action="" >
  2. <h5>Event <b>mushroom/gold/epic/christmas/tp</b></h5>
  3. <input type="text" name="rodzaj" />
  4. <br />
  5. <input type="submit" value="Zmień Event!" />
  6. </form>


A zapytanie które próbowałem zrobić tak :

  1. <?php
  2. @$rodzaj = $_POST["rodzaj"];
  3.  
  4. if($rodzaj == "mushroom") {
  5. mysql_query("UPDATE game_settings SET value='5' WHERE EVENT");
  6.  
  7. }
  8.  
  9. ?>

Jednak to nie działa.
Proszę o pomoc i pozdrawiam.
SpiritCode
Masz mały błąd w zapytaniu:
Warunek powinien być setting='EVENT'

Całość:
  1. UPDATE game_settings SET value='5' WHERE setting = 'EVENT'


edit: W sumie wystarczy by 'EVENT' było stringiem:
  1. UPDATE game_settings SET value='5' WHERE 'EVENT'
Gruchol
Dziala wielkie dzięki smile.gif

Aby nie zakładać nowego tematu napiszę tutaj.
Mam taki problem, że gdy w swoim "panelu" wpiszę jakąś wartość to inne znikają.
Np. gdy wpiszę w panelu mushroom to MUSH_CHANCE oraz MUSH_DROP_FOUND to pole zmienia się na puste.
Kod strony wygląda tak :
  1. <!DOCTYPE HTML>
  2. <html lang="pl">
  3. <head>
  4. <meta charset="utf-8" />
  5. <title>Panel Administracyjny</title>
  6. </head>
  7. <body>
  8.  
  9. <center><h1>Ustawienia serwera<h1/></center>
  10. <center>
  11. <form method="post" action="">
  12. <h5>Event <b>mushroom/gold/epic/christmas/tp/brak</b></h5>
  13. <input type="text" name="rodzaj" />
  14. <br />
  15. <input type="submit" value="Zmień Event!" />
  16. </center>
  17. </form>
  18.  
  19. <?php
  20.  
  21. include "dtoverride.php";
  22. dbc();
  23. @$rodzaj = $_POST["rodzaj"];
  24.  
  25. if($rodzaj == "mushroom") {
  26. mysql_query("UPDATE game_settings SET value='4' WHERE setting='EVENT'");
  27. echo "<h3><center>Event zostal zmieniony na $rodzaj</center></h3>";
  28. }
  29. if($rodzaj == "gold") {
  30. mysql_query("UPDATE game_settings SET value='3' WHERE setting='EVENT'");
  31. echo "<h3><center>Event zostal zmieniony na $rodzaj</center></h3>";
  32. }
  33. if($rodzaj == "epic") {
  34. mysql_query("UPDATE game_settings SET value='2' WHERE setting='EVENT'");
  35. echo "<h3><center>Event zostal zmieniony na $rodzaj</center></h3>";
  36. }
  37. if($rodzaj == "christmas") {
  38.  
  39. mysql_query("UPDATE game_settings SET value='5' WHERE setting='EVENT'");
  40. echo "<h3><center>Event zostal zmieniony na $rodzaj</center></h3>";
  41. }
  42. if($rodzaj == "tp") {
  43.  
  44. mysql_query("UPDATE game_settings SET value='1' WHERE setting='EVENT'");
  45. echo "<h3><center>Event zostal zmieniony na $rodzaj</center></h3>";
  46. }
  47. if($rodzaj == "brak") {
  48.  
  49. mysql_query("UPDATE game_settings SET value='0' WHERE setting='EVENT'");
  50. echo "<h3><center>Event zostal zmieniony na $rodzaj</center></h3>";
  51.  
  52. }
  53. ?>
  54.  
  55. <center>
  56. <form method="post" action="">
  57. <h5>Szansa na grzybki w %, 100 = (Na 100% wypadnie grzybek)</h5>
  58. <br>
  59. <input type="text" name="szansa" />
  60. <br>
  61. <input type="submit" value="Zmień szansę!" />
  62. </center>
  63. </form>
  64.  
  65. <?php
  66.  
  67. @$szansa = $_POST["szansa"];
  68.  
  69. mysql_query ("UPDATE game_settings SET value='$szansa' WHERE setting='MUSH_CHANCE'");
  70.  
  71. ?>
  72.  
  73. <center>
  74. <form method="post" action="">
  75. <h5>Ilosc grzybkow za 1 misje :</h5>
  76. <br>
  77. <input type="text" name="ilosc" />
  78. <br>
  79. <input type="submit" value="Zmień ilość grzybków!" />
  80. </form>
  81. </center>
  82.  
  83. <?php
  84.  
  85. @$ilosc = $_POST["ilosc"];
  86.  
  87. mysql_query("UPDATE game_settings SET value='$ilosc' WHERE setting='MUSH_DROP_FOUND'");
  88.  
  89. ?>
  90.  
  91. </body>
  92. </html>
SpiritCode
  1. @$ilosc = $_POST["ilosc"];
  2. @$szansa = $_POST["szansa"];


Jeśli nie ma tych klczuy w $_POST to te zmienne przyjmują wartość NULL
Zabrakło Ci warunków przed updateami
Gruchol
Średni to rozumiem.
W takim razie jak to powinno wyglądać ?
SpiritCode
  1. <?php
  2.  
  3. @$szansa = $_POST["szansa"];
  4.  
  5. mysql_query ("UPDATE game_settings SET value='$szansa' WHERE setting='MUSH_CHANCE'");
  6.  
  7. ?>
  8.  
  9. <center>
  10. <form method="post" action="">
  11. <h5>Ilosc grzybkow za 1 misje :</h5>
  12. <br>
  13. <input type="text" name="ilosc" />
  14. <br>
  15. <input type="submit" value="Zmień ilość grzybków!" />
  16. </form>
  17. </center>
  18.  
  19. <?php
  20.  
  21. @$ilosc = $_POST["ilosc"];
  22.  
  23. mysql_query("UPDATE game_settings SET value='$ilosc' WHERE setting='MUSH_DROP_FOUND'");
  24.  
  25. ?>

zamień na:
  1. <?php
  2.  
  3. @$szansa = $_POST["szansa"];
  4. if(!empty($szansa))
  5. mysql_query ("UPDATE game_settings SET value='$szansa' WHERE setting='MUSH_CHANCE'");
  6.  
  7. ?>
  8.  
  9. <center>
  10. <form method="post" action="">
  11. <h5>Ilosc grzybkow za 1 misje :</h5>
  12. <br>
  13. <input type="text" name="ilosc" />
  14. <br>
  15. <input type="submit" value="Zmień ilość grzybków!" />
  16. </form>
  17. </center>
  18.  
  19. <?php
  20.  
  21. @$ilosc = $_POST["ilosc"];
  22. if(!empty($ilosc))
  23. mysql_query("UPDATE game_settings SET value='$ilosc' WHERE setting='MUSH_DROP_FOUND'");
  24.  
  25. ?>
Gruchol
Super działa.
Tylko czy mógł byś "opisać" to
  1. if(!empty($ilosc))
?
Tak jak pisałem dopiero się uczę i chciałbym wiedzieć dlaczego to tam jest tongue.gif.
SpiritCode
Jeśli nie ma w $_POST klucza 'ilosc' to:
  1. @$ilosc = $_POST['ilosc'];

staje się tym:
  1. @$ilosc = NULL;


  1. if(!empty($ilosc))

sprawdza czy $ilosc nie jest pusta (czyli czy jej wartość nie jest równa NULL lub '' lub "")

Co do pisowni. Można to też napisać tak:
  1. if(!empty($ilosc))
  2. {
  3. mysql_query("UPDATE game_settings SET value='$ilosc' WHERE setting='MUSH_DROP_FOUND'");
  4. }


w przypadku kodu nie przekraczającego jednej linii w warunku można pominąć klamry

  1. if($warunek)
  2. $jedna_linia;
  3. else
  4. $jedna_linia_znow;

w takim wypadku klamry nie są konieczne
com
lepiej tak
  1. <?php
  2. if(!empty($_POST["szansa"])){
  3. $szansa = (int) $_POST["szansa"];
  4. mysql_query ("UPDATE game_settings SET value='$szansa' WHERE setting='MUSH_CHANCE'");
  5. }
  6. ?>
  7.  
  8. <center>
  9. <form method="post" action="">
  10. <h5>Ilosc grzybkow za 1 misje :</h5>
  11. <br>
  12. <input type="text" name="ilosc" />
  13. <br>
  14. <input type="submit" value="Zmień ilość grzybków!" />
  15. </form>
  16. </center>
  17.  
  18. <?php
  19. if(!empty($_POST["ilosc"])){
  20. $ilosc = (int) $_POST["ilosc"];
  21. mysql_query("UPDATE game_settings SET value='$ilosc' WHERE setting='MUSH_DROP_FOUND'");
  22. }
  23.  
  24. ?>


bezpieczniej smile.gif
SpiritCode
A no bezpieczniej ale tamta wersje też jest w porządku wink.gif
com czepiasz się strasznie moich wypowiedzi tongue.gif Coś osobistego? wink.gif

edit: a co do Twojego dobrze też dodać
  1. isset($_POST['ilosc'])

analogicznie do przy $szansa
Gruchol
Zależy mi aby wszystko było jak najprościej napisane ponieważ ciężko mi zrozumieć takie zapisy.
Ale dziękuję smile.gif.
SpiritCode
Dobrze żebyś i takie zapisy znał wink.gif Jak się uczyć to najlepiej wszystkich możliwości
com
nie powiedziałem, że nie..
kolego luzik, nie chodzi o Ciebie, ale o kwestie merytoryczne, a @ przed niczym nie chroni, ona tylko ukrywa błedy kiedy sa włączone(ale php itak te błędy generuje tylko ich nie widać), które itak wyłancza się na produkcji, a skoro to ma być gra to stwórzmy choć pozory bezpieczeństwa biggrin.gif

btw obecnie !empty działa jak isset wink.gif ale to fakt powinien również je znać biggrin.gif
Gruchol
Kurde, mam jeszcze 1 plik w którym każda zmienna ma @ przed sobą a ma ponad 250 linijek.
Muszę jeszcze raz przeanalizować to co napisaliście.
com
generalnie chodzi o to że najpierw musisz sprawdzić czy taka zmienna, którą chcesz pod nią podstawić istnieje i czy nie jest pusta, dlatego używasz !empty, isset sprawdza tylko czy istnieje https://www.virendrachandak.com/techtalk/ph...pty-vs-is_null/ (patrz tabelka), bo jak odwołujesz się do czegoś czego nie stworzyłeś to php wygeneruje notice z informacja o tym stad ten warunek który to sprawdza, a druga rzecz która Ci pokazałem to kiedy chcesz dodawać do bazy i wiesz że to będzie na pewno liczba to taki zapis (int) przed zmienną konwertuje ten napis na liczbę przykład mimo iż podałem literę a dostaje liczbe http://ideone.com/HYR4EX wink.gif
SpiritCode
com tylko żartowałem biggrin.gif

Gruchol zabezpieczenia zmieniają się z każdą wersją PHP. Zadeklaruj się pod którą wersję piszesz bo to będzie skuteczne pod jedną a pod inną już np będzie coś lepszego.
Gruchol
Hm części nauczyłem się z tego : https://www.youtube.com/watch?v=tD0Q5QwoQJI
A zapytania do SQL to przerobiłem z internetu.

Moim serwerem WWW na moim VPSie jest Nginx z PHP Version 5.4.35-0+deb7u2

Co do tego poradnika nie wiem pod jaką wersję PHP on jest :/
com
to akurat to są podstawy, nwm co miał kolega na myśli ale to jeszcze przez długi czas Ci będzie działać, bo ani isset ani empty nie usuną tak samo jawnej konwersji do danego typu, o to się nie martw z php niedługo zniknie mysql_* którego używasz, ale mając wersje 5,4 możesz jeszcze na nim działać wink.gif choć lepiej iść w kierunku mysqli_* już wink.gif
SpiritCode
com moja wzmianka akurat odniosła się własnie do mysql_*
Poza tym (oczywiście to już zależy od człowieka) jak dla mnie lepsze jest PDO smile.gif

com moja wzmianka akurat odniosła się własnie do mysql_*
Poza tym (oczywiście to już zależy od człowieka) jak dla mnie lepsze jest PDO smile.gif
Gruchol
Chodzi o to ?
http://screenshooter.net/101736853/bosygqs
com
tak w zapytaniach masz mysql_query, które lepiej zastąpić jego odpowiednikiem w mysqli http://php.net/manual/en/class.mysqli.php, SpiritCode ok w porządku jednakże autor był zdezorientowany, osobiście również preferuje pdo, ze względu na uniwersalność, ale autowi będzie łatwiej się wdrożyć w mysqli skoro juz ma wiedzę o mysql_* biggrin.gif
Gruchol
Może żeby znowu nie zakładać nowego tematu napiszę tutaj.
Mam taki kod :
  1. <h5>Dodawanie grzybków :</h5>
  2. <form method="post" action="" >
  3. Nick :
  4. <input type="text" name="nick" />
  5. <br>
  6. Dodaj grzybkow :
  7. <input type="text" name="grzybkidodac" />
  8. <br>
  9. Odejmij grzybkow :
  10. <input type="text" name="grzybkiodejmij" />
  11. <br>
  12. <input type="submit" value="Grzybki!" />
  13. <br>
  14. <br>
  15. <br>
  16. <br>
  17. <?php
  18. @$nick = $_POST["nick"];
  19. @$grzybkidodac = (int)$_POST["grzybkidodac"];
  20. @$grzybkiodejmij = (int)$_POST["grzybkiodejmij"];
  21.  
  22. if($nick and $grzybkidodac and !empty($grzybkidodac)) {
  23. die('tutaj');
  24. mysql_query("UPDATE user_data SET mushroom=mushroom+$grzybkidodac WHERE user_name='$nick'");
  25. echo "Dodano $grzybkidodac grzybkow";
  26. }
  27. elseif($nick and $grzybkiodejmij and !empty($grzybkiodejmij)) {
  28. die('a jednak tu');
  29. mysql_query("UPDATE user_data SET mushroom=mushroom-$grzybkiodejmij WHERE user_name='$nick'");
  30. }
  31. ?>

I gdy wpiszę wartość do pola i zatwierdzę w bazie nie ma żadnych zmian.
Do tego jeszcze nie wyświetla się echo ani "die".
com
and zastąp && to po pierwsze, no i die sprawi że ten kod się nigdy nie wykona co masz za nim smile.gif
Gruchol
Teraz mam :

  1. <h5>Dodawanie grzybków :</h5>
  2. <form method="post" action="" >
  3. Nick :
  4. <input type="text" name="nick" />
  5. <br>
  6. Dodaj grzybkow :
  7. <input type="text" name="grzybkidodac" />
  8. <br>
  9. Odejmij grzybkow :
  10. <input type="text" name="grzybkiodejmij" />
  11. <br>
  12. <input type="submit" value="Grzybki!" />
  13. <br>
  14. <br>
  15. <br>
  16. <br>
  17. <?php
  18. @$nick = $_POST["nick"];
  19. @$grzybkidodac = (int)$_POST["grzybkidodac"];
  20. @$grzybkiodejmij = (int)$_POST["grzybkiodejmij"];
  21.  
  22. if($nick && $grzybkidodac && !empty($grzybkidodac)) {
  23. mysql_query("UPDATE user_data SET mushroom=mushroom+$grzybkidodac WHERE user_name='$nick'");
  24. echo "Dodano $grzybkidodac grzybkow";
  25. }
  26. elseif($nick && $grzybkiodejmij && !empty($grzybkiodejmij)) {
  27. mysql_query("UPDATE user_data SET mushroom=mushroom-$grzybkiodejmij WHERE user_name='$nick'");
  28. }
  29. ?>

I echo nadal się nie wyświetla.
W bazie również żadnych zmian.

@EDIT
Zrobiłem nowy plik .php i o dziwo działa...
Nie rozumiem dla czego.
Wkleiłem to co podałem wyżej.
Dla czego tak się dzieje..?
com
przed if w 22 lini daj var_dump($_POST);
i pokaż wynik ale po wysłaniu formularza smile.gif i skasuj te action z forma
Gruchol
Jezu o takiej rzeczy zapomnieć.
Oczywiście ja zapomniałem </form> na końcu..
Teraz już wszystko pięknie śmiga. Wielkie dzięki za pomoc.
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.