Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SQL][MySQL][PHP][MYSQL & PHP] Zmiana avatara pomocy!
MefjuU
post 25.04.2018, 18:09:01
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 25.04.2018

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


Witam otóż mam problem z bazą danych, stosowałem poniższy kod aby zmienić avatara poprzez przyciski INPUT RADIO ale gdy daję zmień to nic się nie dzieje. Błąd jest w kodzie który zmienia wartość w bazie (UPDATE).

  1. <?php
  2.  
  3. require './site/header.php'; // Dołącz początkowy kod HTML
  4. require './config/config.php'; // Dołącz plik konfiguracyjny i połączenie z bazą
  5. require_once './config/user.class.php';
  6.  
  7.  
  8. IF (!user::isLogged()) {
  9. echo '<p class="error">Przykro nam, ale ta strona jest dostępna tylko dla zalogowanych użytkowników.</p>';
  10. }
  11.  
  12. else {
  13. @$id = $_GET['id'];
  14. $profile = user::getDataById ($id);
  15. /**
  16. * Sprawdź czy formularz został wysłany
  17. */
  18. IF (@$_POST['send'] == 1) {
  19. // Zabezpiecz dane z formularza przed kodem HTML i ewentualnymi atakami SQL Injection
  20. @$avatar = mysql_real_escape_string(htmlspecialchars($_POST['avatar']));
  21.  
  22. $errors = ''; // Zmienna przechowująca listę błędów które wystąpiły
  23.  
  24.  
  25. // Sprawdź, czy nie wystąpiły błędy
  26. IF (!$avatar ) $errors .= '- Musisz wybrać avatara aby go zmienić.<br />';
  27.  
  28. /**
  29. * Jeśli wystąpiły jakieś błędy, to je pokaż
  30. */
  31. IF ($errors != '') {
  32. echo '<p class="error">Zmiana avatara nie powiodła się, popraw następujące błędy:<br />'.$errors.'</p><br/>';
  33. }
  34.  
  35. /**
  36. * Jeśli nie ma żadnych błędów - kontynuuj rejestrację
  37. */
  38. else {
  39.  
  40. // Szukanie czy użytkownik istnieje
  41. $userExist = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM users WHERE id = '$id'"));
  42. // Zapisz dane do bazy
  43. mysql_query("UPDATE users SET avatar='".$avatar."' WHERE id = '$profile'") OR die ('<p class="error">Wystąpił błąd podczas zmiany avatara.</p>');
  44. // TUTAJ WŁAŚNIE NIE WIEM JAK TO ZROBIĆ ^
  45.  
  46.  
  47. echo '<p class="success">Avatar został zmieniont.</p><br/>';
  48. }
  49. }
  50. }
  51. ?>


a tak wygląda do tego formularz HTML (zdefiniowałem tu własny styl taki jak <p4> itp..):
  1. <p4>Zmiana avatara</p4>
  2. <div class="hr"></div>
  3. <p>Wybierz jeden z dostępnych avatarów.</p><br/>
  4. <form method="post" action="">
  5. <table style="width: 100%; text-align: center; margin-top: 10px; margin-bottom: 20px;">
  6. <tr style="height: 64px;">
  7. <td><input style="box-shadow: inset 0 0px 0px 0 transparent;" type="radio" name="avatar" value="default-avatar.png"><br/><img src="./avatars/default-avatar.png"></img></input></td>
  8. <td><input style="box-shadow: inset 0 0px 0px 0 transparent;" type="radio" name="avatar" value="avatar1.png"><br/><img src="./avatars/avatar1.png"></img></input></td>
  9. <td><input style="box-shadow: inset 0 0px 0px 0 transparent;" type="radio" name="avatar"><br/><img src="./avatars/default-avatar.png"></img></input></td>
  10. </tr>
  11. <tr style="height: 64px;">
  12. <td><input style="box-shadow: inset 0 0px 0px 0 transparent;" type="radio" name="avatar"><br/><img src="./avatars/default-avatar.png"></img></input></td>
  13. <td><input style="box-shadow: inset 0 0px 0px 0 transparent;" type="radio" name="avatar"><br/><img src="./avatars/default-avatar.png"></img></input></td>
  14. <td><input style="box-shadow: inset 0 0px 0px 0 transparent;" type="radio" name="avatar"><br/><img src="./avatars/default-avatar.png"></img></input></td>
  15. </tr>
  16. <tr style="height: 64px;">
  17. <td><input style="box-shadow: inset 0 0px 0px 0 transparent;" type="radio" name="avatar"><br/><img src="./avatars/default-avatar.png"></img></input></td>
  18. <td><input style="box-shadow: inset 0 0px 0px 0 transparent;" type="radio" name="avatar"><br/><img src="./avatars/default-avatar.png"></img></input></td>
  19. <td><input style="box-shadow: inset 0 0px 0px 0 transparent;" type="radio" name="avatar"><br/><img src="./avatars/default-avatar.png"></img></input></td>
  20. </tr>
  21. </table>
  22. <input type="hidden" name="send" value="1" />
  23. <input type="submit" class="sub" style="margin-left: 38.5%; text-align: center; text-shadow: 0 -1px 1px rgba(0,0,0,0.4);" value="Wybierz"></input>
  24. </form>



wcześniej zamiast:
  1. // Zapisz dane do bazy
  2. mysql_query("UPDATE users SET avatar='".$avatar."' WHERE id = '$profile'") OR die ('<p class="error">Wystąpił błąd podczas zmiany avatara.</p>');


stosowałem poniższy kod ale on zamiast zmieniać danemu użytkownikowi avatar to tworzył tak jakby nowego (oznaczyłem to na screenie bazy danych na czerwono) który miał już dobrze wypełnione pole avatar. Ale nie o to mi chodzi. To ma podmieniać a nie tworzyć wink.gif

  1. // Zapisz dane do bazy
  2. mysql_query("INSERT INTO users (avatar) VALUES('$avatar');") OR die ('<p class="error">Wystąpił błąd podczas zmiany avatara.</p>');


Dodam jeszcze screen bazy danych:
http://ifotos.pl/z/qnanrep << LINK 1
https://ibb.co/gs04Rx << LINK 2


(JAKBY LINK DO OBRAZU NIE DZIAŁAŁ TO TUTAJ MOŻESZ GO POBRAĆ)
http://hostuje.net/file.php?id=b5090eab152...ec86d290abf3166
Go to the top of the page
+Quote Post
Kshyhoo
post 25.04.2018, 18:17:32
Post #2





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




A action gdzieś idzie?
  1. <form method="post" action="">


--------------------
Go to the top of the page
+Quote Post
MefjuU
post 25.04.2018, 19:11:57
Post #3





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 25.04.2018

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


Nie action nigdzie nie idzie bo ten skrypt jest w tym samym pliku. Tak samo mam zrobioną rejestrację i logowanie i tam wszystko działa dobrze. tutaj też action działa bo wcześniej dodawało mi nowego usera z wartością avatar tyko więc to chyba dowód na to że działać działa ten action.

Ten post edytował MefjuU 25.04.2018, 19:13:46
Go to the top of the page
+Quote Post
leonpro778
post 25.04.2018, 20:23:46
Post #4





Grupa: Zarejestrowani
Postów: 146
Pomógł: 19
Dołączył: 1.03.2012

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


Czemu w linijce:

  1. $userExist = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM users WHERE id = '$id'"));


Szukasz po ID a w linijce:
  1. mysql_query("UPDATE users SET avatar='".$avatar."' WHERE id = '$profile'")


Dajesz profile. Co się kryje pod $profile ?
Go to the top of the page
+Quote Post
MefjuU
post 26.04.2018, 00:34:17
Post #5





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 25.04.2018

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


Ta 1 linijka co jest po ID to sam dodałem żeby poeksperymentować bo chciałem wyszukać użytkownika (tego co zmienia avatara) po ID a pod profile kryje się chyba użytkownik jak się nie mylę obczaj ten kod pobrałem z niego wartości do innego stworzonego pliku profile.php a to ten standardowy:

  1. <?php
  2. session_start();
  3.  
  4. require 'header.php'; // Dołącz początkowy kod HTML
  5. require 'config.php'; // Dołącz plik konfiguracyjny i połączenie z bazą
  6. require_once 'user.class.php';
  7.  
  8. /**
  9.  * Tylko dla zalogowanych użytkowników
  10.  */
  11. IF (!user::isLogged()) {
  12. echo '<p class="error">Przykro nam, ale ta strona jest dostępna tylko dla zalogowanych użytkowników.</p>';
  13. }
  14.  
  15. else {
  16. $id = $_GET['id'];
  17.  
  18. /**
  19.   * Sprawdź czy użytkownik o podanym ID istnieje
  20.   */
  21. $userExist = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM users WHERE id = '$id'"));
  22.  
  23. // Użytkownik nie istnieje
  24. IF ($userExist[0] == 0) {
  25. die ('<p>Przykro nam, ale użytkownik o podanym identyfikatorze nie istnieje.</p>');
  26. }
  27.  
  28. /**
  29.   * Użytkownik istnieje, tak więc pokaż jego profil
  30.   */
  31.  
  32. // Zapisz dane użytkownika o podanym ID, do zmiennej $profile
  33. $profile = user::getDataById ($id);
  34.  
  35. echo '<h1>Profil użytkownika '.$profile['login'].'</h1>';
  36.  
  37. echo '<b>Nick:</b> '.$profile['login'].'<br />';
  38. echo '<b>Email:</b> '.$profile['email'].'<br />';
  39.  
  40. }
  41.  
  42. require 'footer.php'; // Dołącz końcowy kod HTML
  43.  
  44. ?>



tutaj jest jeszcze 1 ważny plik może go rozszyfrujesz i dowiesz się jak tu tego użytkownika znaleść bo ja z dobre 3 godziny się tak bawiłem i zrobiłem tylko taki postęp że niby działa ale nic nie zmienia avatara w bazie danych:

  1. <?php
  2. /**
  3.  * Klasa wykonująca wszystkie podstawowe operacje
  4.  */
  5.  
  6. class user {
  7.  
  8. public static $user = array();
  9.  
  10. /**
  11.   * Zwraca tablicę ze wszystkimi danymi o użytkowniku.
  12.   * Indeksy tablicy odpowiadają nazwom pól w bazie danych (login, pass etc...)
  13.   * @param string $login
  14.   * @param string $pass
  15.   * @return array
  16.   */
  17. public FUNCTION getData ($login, $pass) {
  18. IF ($login == '') $login = $_SESSION['login'];
  19. IF ($pass == '') $pass = $_SESSION['pass'];
  20.  
  21. self::$user = mysql_fetch_array(mysql_query("SELECT * FROM users WHERE login='$login' AND pass='$pass' LIMIT 1;"));
  22. RETURN self::$user;
  23. }
  24.  
  25.  
  26. /**
  27.   * Zwraca tablicę ze wszystkimi danymi o użytkowniku, tak jak powyższa metoda klasy,
  28.   * ale rozpoznaje użytkownika nie po podaniu loginu i hasła tylko po podaniu ID.
  29.   * Używana np. do wyświetlania strony profilu.
  30.   * @param int $id
  31.   * @return array
  32.   */
  33. public FUNCTION getDataById ($id) {
  34. $user = mysql_fetch_array(mysql_query("SELECT * FROM users WHERE id='$id' LIMIT 1;"));
  35. RETURN $user;
  36. }
  37.  
  38. /**
  39.   * Jeśli użytkownik jest zalogowany - zwraca true, w przeciwnym wypadku - false
  40.   * @return bool
  41.   */
  42. public FUNCTION isLogged () {
  43. IF (empty($_SESSION['login']) || empty($_SESSION['pass'])) {
  44. RETURN false;
  45. }
  46.  
  47. else {
  48. RETURN true;
  49. }
  50. }
  51.  
  52. /**
  53.   * "Soli" hasło przed jego zahashowaniem funkcją md5()
  54.   * @param string $pass
  55.   * @return string
  56.   */
  57. public FUNCTION passSalter ($pass) {
  58. $pass = '$@@#$#@$'.$pass.'q2#$3$%##@';
  59. RETURN md5($pass);
  60. }
  61.  
  62. }



UDAŁO MI SIĘexclamation.gif Problem polegał w tej linijce powinna ona wyglądać tak o:

  1. // Zapisz dane do bazy
  2. mysql_query("UPDATE users SET avatar='$avatar' WHERE id='$user[id]';") OR die ('<p class="error">Wystąpił błąd podczas zmiany avatara.</p>');
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 18.04.2024 - 11:57