Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Nie chce mi wyswietlic danych z bazy
Forum PHP.pl > Forum > Przedszkole
Rafiks1992
Witam! To moj pierwszy post, zaczynam uczyc sie php ogladalem troche filmikow i zaczalem tworzyc strone, wlasciwie to moze byc nawet cos podobnego do gry via www w celach nauki lecz mam pewien problem dlatego chcialem prosic tutaj o pomoc

Dokladniej chodzi mi o to ze nie chce wyswietlic mi danych z bazy, dodalem do tabeli users kolumne money i ustawilem wartosc domyslna na 3.
Teraz w pliku ktory wyswietla profil uzytkownika chce dodac opcje ktora bedzie wyswietlala aktualny stan konta uzytkownika czyli 3.

Tak wiec w pliku youraccount.php dodaje taki kod:
  1. <?php
  2.  
  3. $money = 'SELECT money FROM users';
  4. echo 'Twoja ilosc pieniedzy to:'.$money;
  5.  
  6. ?>

Jednak gdy zaktualizuje plik i odswieze strone to pokazuje mi poprostu moje zapytanie czyli:

Twoja ilosc pieniedzy to: SELECT money FROM users

Moglby ktos mnie nakierowac jak to poprawic? Szukalem w internecie kilka sposobow i probowalem tez w innych formatach to zrobic ale nic mi nie pomoglo. Mam nadzieje ze nie zostane na dzien dobry zlinczowany za to ale kazdy kiedys zaczynal wink.gif!
viking
Wyświetlasz teraz string. Musisz jeszcze to zapytanie jakoś wykonać i przetworzyć. Najlepiej za pomocą PDO.
Pyton_000
Oglądałeś filmiki... Albo nie doszedłeś jeszcze do etapu pracy z BD albo pominąłeś kilka odcinków...
Rafiks1992
Wporzadku bede uzywal bbcode jesli bedzie jakis kod odemnie biggrin.gif! Co do mojego pytania w jaki sposob moge przetworzyc to zapytanie do sql? Bo wyswietlenie chyba nie jest zle poprzez echo? Co do kolegi wyzej owszem wiele rzeczy pominalem ale tak to jest jak chce sie szybko szybko cos zrobic ^^ bez podstaw i ksiazki jakiejs chyba nie ogarne tego ale chcialem odrazu poprzez praktyke sie uczyc smile.gif
viking
Podałem ci link gdzie masz wszystko opisane. Szybki przykład
Rafiks1992
Wybacz kolego Viking nie zauwazylem tego PDO myslalem ze to tylko podkreslenie jakies a tu link fajny biggrin.gif

No wiec tak przerobilem to wszystko i wyszlo mi mniej wiecej cos takiego:

  1. <?php
  2.  
  3. $sql = 'SELECT money FROM users WHERE money = ?';
  4.  
  5. $dbh = new PDO('mysql:host=nazwa hosta;dbname=nazwa bazy danych', 'nazwa uzytkownika', 'haslo');
  6. array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'");
  7.  
  8. $sth = $dbh->prepare($sql);
  9.  
  10. $sth->bindParam(1, $_POST['money']);
  11.  
  12. $sth->execute();
  13.  
  14. $result = $sth->fetchAll();
  15.  
  16. foreach ($result as $row) {
  17. echo 'Twoja kasa to:' .$row['money'];
  18.  
  19. }
  20. ?>


Oczywiscie pod nazwy podlozylem polaczenie z baza uzytkownik i tak dalej zmienilem takze zmienne na money wkleilem to zaktualizowalem i w sumie na stronie jak odswiezylem to nie wyswietla sie absolutnie nic zadnego bledu nie ma, ale nie ma tez wyswietlonego pustka na stronie nawet nie wyswietla sie tekst Twoja kasa to:.. Dodam ze dodaje to pod danymi uzytkownika prawie na samym koncu kodu.
Pyton_000
Bo do zapytania odbierasz zmienną z `$_POST['money']`;
Rafiks1992
A pownienem uzyc $_GET? Bo nie rozumiem teraz jak wyjsc na prostą i wyeliminowac ten problem tongue.gif
nospor
Miedzy uszami masz taki malutki guzik. Wlacz go, on odpowiada za myslenie tongue.gif

Szukasz teraz usera na podstawie pieniedzy.... Nie sadzisz ze powinienes go szukac na podstawie ID tudziez LOGIN? I to ID czy LOGIN masz pobrac z sesji, get czy skadkolwiek gdzie to trzymasz
viking
Wszystko zależy skąd pochodzi ta zmienna. form method=post będzie w $_POST, z pasku adresu w $_GET.
Rafiks1992
No tak jedna dobra wiadomosc ktora dobrze nakieruje i juz ma to jakis sens biggrin.gif w pliku Twoj profil mam taki kod:


  1. <?php
  2.  
  3. $title = "Twoje konto";
  4. include_once 'header.php';
  5.  
  6. if (!$session->is_logged_in()) {
  7. $session->message("Musisz sie zalogowac!", "success");
  8. redirect_to("login.php");
  9. }
  10.  
  11.  
  12. ?>
  13.  
  14. <h1>Twoje konto</h1>
  15.  
  16. <?php
  17. if (isset($_POST['submit'])) {
  18. $newpassword = sanitize($_POST['newpassword']);
  19. $newemail = sanitize($_POST['newemail']);
  20. $oldpassword = sanitize($_POST['oldpassword']);
  21.  
  22. $userdata = User::getUser($session->user_name);
  23.  
  24. $validate = new Validation();
  25. $validate->addSource($_POST);
  26. $validate->addRule('newpassword', 'string', false, '4', '20', true);
  27. $validate->addRule('newemail', 'email', false, '3', '30', true);
  28. $validate->addRule('oldpassword', 'string', true, '4', '20', true);
  29. $validate->run();
  30.  
  31. if (!empty($newemail)) {
  32. $email_result = User::exists("email",$newemail);
  33.  
  34. if($email_result) {
  35. $session->message("Inny uzytkownik zarejestrowany jest juz na tego e-maila!", "warning");
  36. redirect_to("account.php");
  37. }
  38. }
  39.  
  40. if (!empty($oldpassword)) {
  41. if (secure_string($oldpassword) !== $userdata->password) {
  42. $session->message("Niepoprawne stare haslo!", "warning");
  43. redirect_to("account.php");
  44. }
  45. }
  46.  
  47.  
  48. if (sizeof($validate->errors) > 0) {
  49. echo("<div id='normal'><div class='warning'>");
  50. foreach ($validate->errors as $error) { echo "- ".$error."<br/>"; }
  51. echo("</div></div><br />");
  52.  
  53. } else {
  54.  
  55. $user = new User();
  56. $user->id = $userdata->id;
  57. $user->username = $userdata->username;
  58. if (!empty($newpassword)) {
  59. $user->password = secure_string($newpassword);
  60. } else {
  61. $user->password = $userdata->password;
  62. }
  63. if (!empty($newemail)) {
  64. $user->email = $newemail;
  65. } else {
  66. $user->email = $userdata->email;
  67. }
  68. $user->status = $userdata->status;
  69. $user->actcode = $userdata->actcode;
  70. $user->created_at = $userdata->created_at;
  71. $result = $user->update();
  72.  
  73. if ($result) {
  74. $session->message("Zmiany zapisane!", "success");
  75. redirect_to("account.php");
  76. } else {
  77. $session->message("Blad, nie zapisano zmian!", "warning");
  78. redirect_to("account.php");
  79. }
  80.  
  81. }
  82. }
  83.  
  84. if (isset($_POST['delete'])) {
  85.  
  86. $userdata = User::getUser($session->user_name);
  87. $oldpassword = sanitize($_POST['oldpassword']);
  88.  
  89. $validate = new Validation();
  90. $validate->addSource($_POST);
  91. $validate->addRule('oldpassword', 'string', true, '4', '20', true);
  92. $validate->run();
  93.  
  94. if (!empty($oldpassword)) {
  95. if (secure_string($oldpassword) !== $userdata->password) {
  96. $session->message("Niepoprawne stare haslo!", "warning");
  97. redirect_to("account.php");
  98. }
  99. }
  100.  
  101. if (sizeof($validate->errors) > 0) {
  102. echo("<div id='normal'><div class='warning'>");
  103. foreach ($validate->errors as $error) { echo "- ".$error."<br/>"; }
  104. echo("</div></div><br />");
  105.  
  106. } else {
  107.  
  108. $user = new User();
  109. $user->id = $userdata->id;
  110. $result = $user->delete();
  111.  
  112. if($result) {
  113. $session->logout();
  114. $session->message("Twoje konto zostalo usuniete!!", "success");
  115. redirect_to("index.php");
  116. }
  117. }
  118. }
  119.  
  120. ?>
  121.  
  122. <form method="post" name="submit" id="submit" action="account.php">
  123. <table>
  124. <tr>
  125. <td>Nick: </td>
  126. <td><input name="username" id="username" readonly="readonly" type="text" maxlength="15" size="15" value="<?php echo $session->user_name; ?>"/></td>
  127. </tr>
  128. <tr>
  129. <td>Nowe hasło: </td>
  130. <td><input name="newpassword" id="newpassword" type="password" maxlength="30" size="15" value="<?php
  131.  
  132. if(isset($_POST['newpassword'])) {
  133. echo $_POST['newpassword'];
  134. }
  135.  
  136. ?>"/></td>
  137. </tr>
  138.  
  139. <tr>
  140. <td>Nowy E-mail : </td>
  141. <td><input name="newemail" id="newemail" type="text" maxlength="30" size="15" value="<?php
  142.  
  143. if(isset($_POST['newemail'])) {
  144. echo $_POST['newemail'];
  145. }
  146.  
  147. ?>"/></td>
  148. </tr>
  149.  
  150. <tr>
  151. <td>Stare haslo: </td>
  152. <td><input name="oldpassword" id="oldpassword" type="password" maxlength="30" size="15" value="<?php
  153.  
  154. if(isset($_POST['oldpassword'])) {
  155. echo $_POST['oldpassword'];
  156. }
  157.  
  158. ?>"/></td>
  159. </tr>
  160.  
  161. </table>
  162. <input class="button" type="submit" name="delete" id="delete" value="Usun konto!"/>
  163. <input class="button" type="submit" name="submit" id="submit" value="Zapisz!"/>
  164. </form>
  165.  
  166.  
  167. <?php
  168.  
  169. include_once 'footer.php';
  170.  
  171. ?>




Pobralem jakis silnik strony z chomikuj sam poczatek bez stylow niczego tylko rejestracja logowanie i wyswietlanie profilu i z tego co tutaj wychodzi to logowanie opiera sie na sesji skoro jest $session dobrze mysle wink.gif? I teraz zeby zrobic to na podstawie loginu czy id tak jak napisal kolega moderator musialbym to napisac tak:?
SELECT id FROM users WHERE money?questionmark.gif Probowalem ale nic nie pomoglo biggrin.gif
nospor
Wcisnij ten guzik do konca.... tongue.gif


Chcesz pobrac MONEY dla user o danym ID. Szukac masz wiec po ID a nie po MONEY....

NIe
SELECT id FROM users WHERE money?

a:
SELECT money FROM users WHERE id=tu_szukane_id

ps: inna kwestia to to, ze juz te dane i tak pewnie masz, o tu:

$userdata = User::getUser($session->user_name);

pobierasz cale info o userze wiec i pewnie MONEY tam masz.
Rafiks1992
Zanim guzik do konca wcisniety bedzie to troszke minie biggrin.gif

W kazdym razie to prawda mam w jednej tabeli zrobione id login haslo mail i tak dalej i na koncu dodalem money, tylko jak to teraz wyswietlic..

$userdata = User::getUser($session->user_name);

Jesli zmienilbym tutaj w nawiasie username na money a pozniej dal echo .$userdata to powinno zadzialac dobry mam tok rozumowania czy mam sie wrocic do żłobka biggrin.gif?

Albo teraz wpadlem na to zeby wykorzystac faktycznie to zapytanie sql tak jak napisales

$money = 'SELECT money FROM users WHERE id=tu_szukane_id - tylko teraz tak w tym id= mam dac nazwe kolumny z tabeli o nazwie id? Bo probowalem dac takie cos:

$money = 'SELECT money FROM users WHERE id='$id';
echo $money; i tez dupa zbita tongue.gif
nospor
$userdata = User::getUser($session->user_name);
echo $userdata['money'];
?

Jak nie zadziala to pokaz kod funkcji
User::getUser
Rafiks1992
Sprobowalem tak jak podales wyskoczyl mi blad:
Fatal error: Cannot use object of type User as array in /home/.../account.php on line 172

Linia 172:
echo $userdata['money'];


A w pliku o ktorym mowiles gdzie podaje sie klase uzytkownika znalazlem dane ktore wyswietlane sa w tabeli dokladniej takie cos:

plik userclass.php
  1. <?php
  2.  
  3. class User {
  4.  
  5. protected static $table_name = "users";
  6. protected static $db_fields = array('id', 'username', 'password', 'email', 'status', 'actcode' ,'created_at' ,'money');
  7.  
  8. public $id;
  9. public $username;
  10. public $password;
  11. public $email;
  12. public $status = "pending";
  13. public $actcode;
  14. public $created_at;
  15. public $money;
  16.  
  17. public static function authenticate($username = "", $password = "") {
  18. global $database;
  19.  
  20. $username = $database->escape_value($username);
  21. $password = $database->escape_value($password);
  22. $password = secure_string($password);
  23.  
  24. $sql = "SELECT * FROM " . self::$table_name . " users WHERE username = '{$username}' AND password = '{$password}' LIMIT 1";
  25. $result_array = self::find_by_sql($sql);
  26. return !empty($result_array) ? array_shift($result_array) : false;
  27. }
  28.  
  29. public static function activate($username, $actcode) {
  30. global $database;
  31. global $session;
  32.  
  33. $username = $database->escape_value($username);
  34. $actcode = $database->escape_value($actcode);
  35.  
  36. $sql = "SELECT status FROM users WHERE username = '{$username}' AND actcode = '{$actcode}' AND status = 'pending' LIMIT 1";
  37. $database->query($sql);
  38. if($database->affected_rows() == 1) {
  39. $sql = "UPDATE users SET status = 'confirmed' WHERE username = '{$username}' AND actcode = '{$actcode}'";
  40. $result = $database->query($sql);
  41.  
  42. if($result) {
  43. return true;
  44. } else {
  45. return false;
  46. }} else {
  47. return false;
  48. }
  49. }
  50.  
  51. public static function getUser($username) {
  52. global $database;
  53.  
  54. $username = $database->escape_value($username);
  55.  
  56. $sql = "SELECT * FROM users WHERE username = '{$username}' LIMIT 1";
  57. $result_array = self::find_by_sql($sql);
  58. return !empty($result_array) ? array_shift($result_array) : false;
  59.  
  60. }
  61.  
  62. public static function user_email($username, $email) {
  63. global $database;
  64.  
  65. $username = $database->escape_value($username);
  66. $email = $database->escape_value($email);
  67.  
  68. $sql = "SELECT username FROM users WHERE username = '{$username}' AND email = '{$email}' LIMIT 1";
  69. $database->query($sql);
  70. if($database->affected_rows() == 1) {
  71. return true;
  72. } else
  73. return false;
  74. }
  75.  
  76. public static function exists($where,$username) {
  77. global $database;
  78.  
  79. $username = $database->escape_value($username);
  80. $where = $database->escape_value($where);
  81.  
  82. $sql = "SELECT '{$where}' FROM users WHERE {$where} = '{$username}' LIMIT 1";
  83. $database->query($sql);
  84. if($database->affected_rows() == 1) {
  85. return true;
  86. } else
  87. return false;
  88. }
  89.  
  90.  
  91. public static function find_all() {
  92. return self::find_by_sql("SELECT * FROM " . self::$table_name);
  93. }
  94.  
  95. public static function find_by_id($id = 0) {
  96. $result_array = self::find_by_sql("SELECT * FROM " . self::$table_name . " WHERE id={$id} LIMIT 1");
  97. return !empty($result_array) ? array_shift($result_array) : false;
  98. }
  99.  
  100. public static function find_by_sql($sql = "") {
  101. global $database;
  102. $result_set = $database->query($sql);
  103. $object_array = array();
  104. while($row = $database->fetch_array($result_set)) {
  105. $object_array[] = self::instantiate($row);
  106. }
  107. return $object_array;
  108. }
  109.  
  110. public static function count_all() {
  111. global $database;
  112. $sql = "SELECT COUNT(*) FROM " . self::$table_name;
  113. $result_set = $database->query($sql);
  114. $row = $database->fetch_array($result_set);
  115. return array_shift($row);
  116. }
  117.  
  118. private static function instantiate($record) {
  119. $object = new self;
  120. foreach($record as $attribute => $value) {
  121. if($object->has_attribute($attribute)) {
  122. $object->$attribute = $value;
  123. }
  124. }
  125. return $object;
  126. }
  127.  
  128. private function has_attribute($attribute) {
  129. return array_key_exists($attribute, $this->attributes());
  130. }
  131.  
  132. protected function attributes() {
  133. $attributes = array();
  134. foreach(self::$db_fields as $field) {
  135. if(property_exists($this, $field)) {
  136. $attributes[$field] = $this->$field;
  137. }
  138. }
  139. return $attributes;
  140. }
  141.  
  142. protected function sanitized_attributes() {
  143. global $database;
  144. $clean_attributes = array();
  145. foreach($this->attributes() as $key => $value) {
  146. $clean_attributes[$key] = $database->escape_value($value);
  147. }
  148. return $clean_attributes;
  149. }
  150.  
  151. public function create() {
  152. global $database;
  153. $attributes = $this->sanitized_attributes();
  154. $sql = "INSERT INTO " . self::$table_name . " (";
  155. $sql .= join(", ", array_keys($attributes));
  156. $sql .= ") VALUES ('";
  157. $sql .= join("', '", array_values($attributes));
  158. $sql .= "')";
  159. if($database->query($sql)) {
  160. $this->id = $database->insert_id();
  161. return true;
  162. } else {
  163. return false;
  164. }
  165. }
  166.  
  167. public function update() {
  168. global $database;
  169. $attributes = $this->sanitized_attributes();
  170. $attribute_pairs = array();
  171. foreach($attributes as $key => $value) {
  172. $attribute_pairs[] = "{$key}='{$value}'";
  173. }
  174. $sql = "UPDATE " . self::$table_name . " SET ";
  175. $sql .= join(", ", $attribute_pairs);
  176. $sql .= " WHERE id=" . $database->escape_value($this->id);
  177. $database->query($sql);
  178. return ($database->affected_rows() == 1) ? true : false;
  179. }
  180.  
  181. public function delete() {
  182. global $database;
  183. $sql = "DELETE FROM " . self::$table_name;
  184. $sql .= " WHERE id=" . $database->escape_value($this->id);
  185. $sql .= " LIMIT 1";
  186. $database->query($sql);
  187. return ($database->affected_rows() == 1) ? true : false;
  188. }
  189.  
  190. }
  191.  
  192. ?>



Dodalem tam na koncu money oraz public $money ale i tak nic nie pomoglo gdzies jeszcze tego mi brakuje tongue.gif
nospor
Nie:
echo $userdata['money'];

a:
echo $userdata->money;
Rafiks1992
Oczywiscie zmienilem to i ogolnie wyglada to tak:

$userdata = User::getUser($session->user_name);
echo 'Twoja kasa to:' .$userdata->money;


Podmienilem plik na serwerze i teraz wyswietla sie Twoja kasa to: i pustka nic nie wyswietla znow, albo jest to jakis prosciutki malutki blad albo cos tu jest grubo nie halo biggrin.gif
nospor
Powinno dzialac teraz. Jestes pewien ze ten user ma jakakolwiek kase w bazie wpisana?
Rafiks1992
Jak najbadziej ustawilem w phpmyadmin w money zeby poczatkowa wartosc wynosila 3 i tak rzeczywiscie jest. Moze w zlym miejscu wklepuje ten kod? na samym koncu praktycznie dodaje bo chce zeby byl pod spodem
viking
var_dump($userdata);
Rafiks1992
Kolega pomysl dobry ma bo wklepalem pomiedzy tymi dwiema linijkami i wyszlo cos takiego w przegladarce:

object(User)#3 (7) { ["id"]=> string(1) "1" ["username"]=> string(10) "Rafiks1992" ["password"]=> string(40) "57d206b023ff88d0c16666291be493ff5db61b2a" ["email"]=> string(22) "rafal_waw@o2.pl" ["status"]=> string(9) "confirmed" ["actcode"]=> string(20) "jfq5yWklKHAk6CXV4gBc" ["created_at"]=> string(19) "2017-06-23 21:05:43" } Twoja kasa to:


I jak widac chyba nie znajduje tej tabeli money skoro nie ma ['money'] na koncu ^^
nospor
Wyglada jakbys edytowal zly plik user przez co zmiany co wprowadzasz nie ida na serwer wink.gif
viking
A gdzie dodałeś kolumnę? Na której pozycji w bazie? Kod robi tam array_shift a id jest w dumpie.
Rafiks1992
Kolumne dodalem na samym koncu
w tabeli pozycje mam takie:

id
username
password
email
status
actcode
created_at
money

Czyli jest na pozycji 8 jak dobrze mysle wink.gif
viking
To jeszcze w linii 57 var_dump($result_array);
Rafiks1992
W ktorym kodzie masz na mysli linijke 57 wink.gif? w account?


edit: w user_class jak sadze bo widze podobienstwo zmiennej biggrin.gif! juz dzialam wink.gif


Dobra podmienilem szybciutko i mamy progres, madry z Ciebie czlowiek bez kitu biggrin.gif

teraz jak daje odswiez na przegladarce to zobaczcie na koncu pokazuje sie ta 3 smile.gif!

object(User)#3 (8) { ["id"]=> string(1) "1" ["username"]=> string(10) "Rafiks1992" ["password"]=> string(40) "57d206b023ff88d0c16666291be493ff5db61b2a" ["email"]=> string(22) "rafal_wawrzyniak@o2.pl" ["status"]=> string(9) "confirmed" ["actcode"]=> string(20) "jfq5yWklKHAk6CXV4gBc" ["created_at"]=> string(19) "2017-06-23 21:05:43" ["money"]=> string(1) "3" } Twoja kasa to:3

Tylko teraz jak pozbyc sie tego calutkiego kodu aby zostalo tylko Twoja kasa to 3 biggrin.gif?
nospor
facepalmxd.gif

No wywal ten var_dump to sie pozbedziesz go.
Rafiks1992
Ehh naprawde moja glupota by Was zadziwila czasami panowie biggrin.gif tak czy inaczej dziala i dzieki wielkie za pomoc, choc uwazam ze jeszcze nie jeden raz sie odezwe a tymczasem czas na nauke bo bez tego ani rusz. Nigdy nie wpadlbym na tego var_dumpa biggrin.gif jeszcze raz dziekuje smile.gif
nospor
Cytat
Nigdy nie wpadlbym na tego var_dumpa
Przeciez ten dodatkowy syf pojawil ci sie po dodaniu var_dump. Naprawde nie kojarzysz faktow?
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.