Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Pobiera dwa takie same rekordy.
Forum PHP.pl > Forum > Przedszkole
szczalpi
Witam was.
Mam mały problem przy edycji rekordów. Otóż to. Kiedy zaloguję się na danego użytkownika pobiera mi wpisy, które są przypisane dla danego użytkownika. Kiedy zamierzam edytować wpis i zaczynam robić zmiany to wtedy zmienia mi wszystkie rekordy na taki sam wpis, które są przypisane dla danego uzytkownika.
Chciałbym edytować jeden rekord i dla jednego rekordu zrobić zmiany. Szukam gdzie mam błąd, ale nie potrafię znaleźć. Proszę was o pomoc. Poniżej przedstawiam kod, który posiadam.

plik user_panel.php

  1. <?
  2. connect();
  3. $user = $_SESSION['user_name'];
  4. mysql_query("SET NAMES 'latin2'");
  5. $sql="select * from users_b where login='$user'";
  6. $result=mysql_query($sql);
  7. $row=mysql_fetch_array($result);
  8.  
  9. $nr=$_GET['nr'];
  10. mysql_query("SET NAMES 'latin2'");
  11. $sql2="select * from users_a where id='$row[0]'";
  12. $result2=mysql_query($sql2);
  13.  
  14.  
  15.  
  16.  
  17. while ($row2 = mysql_fetch_array($result2)) {
  18.  
  19. echo "<a href=logowanie.php?frame=user_panel&user_menu=edycja&nr=$row2[1] >uzytkfereteownik: ".$row2[2]." ;haslo: ".$row2[3]."<br/></a>";
  20.  
  21. }
  22. ?>
  23. <?
  24. connect();
  25.  
  26.  
  27. ################################################################################
  28. ?>
  29.  
  30.  
  31. <?
  32. if($_GET['user_menu']=="podglad"):
  33. {
  34. include("podglad.php");
  35. }
  36. elseif($_GET['user_menu']=="edycja"):
  37. {
  38. include("edycja.php");
  39. }
  40. elseif(($_GET['user_menu']=="nr")||($_POST['user_menu']=="nr")):
  41. {
  42. include("edycja.php");
  43. }
  44.  
  45. endif;
  46. ?>




plik edycja.php
  1.  
  2.  
  3.  
  4.  
  5. <?
  6. connect();
  7.  
  8. /*mysql_query("SET NAMES 'latin2'");
  9.  $sql="select * from users_a where login='$user'";
  10.  $result=mysql_query($sql);
  11.  $row=mysql_fetch_array($result);
  12. */
  13. $nr=$_GET['nr'];
  14. mysql_query("SET NAMES 'latin2'");
  15. $sql2="select * from users_a where id='$row[0]' ";
  16. $result2=mysql_query($sql2);
  17. $row2 = mysql_fetch_array($result2);
  18.  
  19. if(isset($_GET['changes'])):
  20. {
  21. $login = $_GET['login'];
  22. $password = $_GET['password'];
  23.  
  24. $sql="update users_a set login='$login' where id='$row[0]'";
  25.  
  26. $sql="update users_a set password='$password' where id='$row[0]'";
  27.  
  28.  
  29.  
  30.  
  31.  
  32. echo "<p align=\"center\">Twoje dane zostały zmienione.</p>";
  33.  
  34. }
  35. else:
  36. {
  37. ### wyœwietlenie wpisu #######################################################?>
  38. <form action="logowanie.php" method="get">
  39.  
  40.  
  41. <div id="main">
  42. <div id="tlo">Imię:</div>
  43. <div id="cap3"><input class="long3" type="text" name="login" value="<? echo $row2['login']; ?>"></div>
  44. </div>
  45.  
  46. <div id="main">
  47. <div id="tlo">Nazwisko:</div>
  48. <div id="cap3"><input class="long3" type="text" name="password" value="<? echo $row2['password']; ?>"></div>
  49. </div>
  50.  
  51. <input type="submit" name="changes" value="ok">
  52.  
  53. <input type="hidden" name="frame" value="user_panel">
  54. <input type="hidden" name="user_menu" value="edycja">
  55. </form>
  56.  
  57. <?
  58. }
  59. endif;
  60. ?>
  61.  
  62.  
Daimos
W pliku edycja masz:
  1. $sql="update users_a set login='$login' where id='$row[0]'";

A skąd bierzesz zmienną $row?
-- edit, ok już widzę, przeoczenie
Sprawdzaj każde zapytanie, które idzie do bazy.
Po każdym zapytaniu, wyświetl je, np.
  1. $sql="update users_a set login='$login' where id='$row[0]'";
  2. echo $sql;

W chwilę wtedy znajdziesz błąd
szczalpi
Z pliku user_panel.php
  1. $user = $_SESSION['user_name'];
  2. mysql_query("SET NAMES 'latin2'");
  3. $sql="select * from users_b where login='$user'";
  4. $result=mysql_query($sql);
  5. $row=mysql_fetch_array($result);



gdzie id='$row[0]' ma być przepisane dla danego uzytkownika. W bazie mam dla '$row[0]' w tej chwili dwa rekordy. Kiedy zmieniam jeden zmieniają się obydwa.


Zmieniłem zapytanie do bazy
na takie
  1. $sql="update users_a set password='$password' where nr='$row2[1]'";
  2. echo $sql;

i prawie wszystko działa. Tylko jest mały problem. Kiedy wyświetla mi 2 rekordy dla danego użytkownika to mogę zmieniać dane tylko dla 1 rekordu. Jeżeli chcę edytować 2 rekord to pojawiają się dane z pierwszego rekordu. Nie potrafię rozwiązać tego prboelmu.
Wydaje mi się , że gdzieś mam błąd w zapytaniu że nie może edytować 2 rekordu.
Pyton_000
Błąd masz w założeniu. Nie powinno być więcej niż 1 rekord z z takim samym loginem.
szczalpi
Dlaczego uważasz, że mam błąd. Np login as ma dwa rekordy i chciałbym te obydwa rekordy edytować, ale edytuje się zawsze pierwszy. Drugiego już nie mogę.
nospor
Przyjmij na "wiare", że Twoja baza jest źle zaprojektowana.

Napisz słownie, co tam mialo byc, po co i dlaczego, a pomozemy ci to poprawic. Nie ma sensu bys teraz grzebal w tym kodzie, skoro baze masz zwaloną....
No i te przechowywanie jawne hasła....
mmmmmmm
Nie przekazuj hasła GETem, bo się zdziwisz...
nospor
Czy on to przekaze GETem czy POSTem to jeden grzyb w przypadku, gdy i tak hasła trzyma w bazie zapisane jawnie
szczalpi
Struktra bazy "users_a"
  1. id | nr | login | password
  2. 1 2 AS ddddd
  3. 1 3 de ddddd
  4. 2 4 proba proba
  5. 2 5 kod kod


Struktra bazy "users_b"
  1. id | login | password
  2. 1 adam adam
  3. 2 darek darek

Póki co pola login i password są umowne. Na razie chcę tylko, aby działało na dwóch polach później będę rozbudowywał.
I tak.
Użytkownik adam kiedy się zaloguje pobiera dwa rekordy 1 i 1, kiedy darek 2 i 2 z bazy users_a. Obydwa wpisy się pojawiają. Kiedy edutuje piewrszy jest ok. Kiedy następny to pojawiają się te same dane.
nospor
Ale po co tak? Czemu ta struktura ma sluzyc?

Dobra, niewazne.... zasada jest banalnie prosta: edytujac rekord, musisz jednoznacznie okreslic rekord. Z tego co widze, to kolumna NR jednoznacznie okresla rekord i to ją masz przekazywac razem z danymi do edycji. Wowczas wszystko bedzie jednoznaczne.
mmmmmmm
Cytat(nospor @ 1.09.2014, 09:25:52 ) *
Czy on to przekaze GETem czy POSTem to jeden grzyb w przypadku, gdy i tak hasła trzyma w bazie zapisane jawnie

Nieprawda. Może przekazać niezaszyfrowane (jeśli koduje swoją funkcją w bazie). Ale nie GETem. Bo hasło może zawierać np &# i się zdziwi.
nospor
Po pierwsze: przeciez widac ze nic nie szyfruje...

Po drugie: znaki takie jak $#& itp nie są zadnym zdziwieniem... przeciez przegladarka wysyla je zakodowane, by nie zepsuc adresu... troche podstaw...
szczalpi
Nie wiem już. Mam tak
  1. $sql="update users_a set login='$login' where nr='$row2[1]'";



Link do strony http://www.log.ewypoczywaj.pl/logowanie.php?frame=login
haslo: daniel
haslo: daniel

Możecie zobaycz jak to wygląda. Może nie potrafię tego wytłumaczyć o co mi chodzi.
Na razie to jest próba i proszę się nie zrażać.
nospor
NUMER masz przekazywac razem z danymi, ktore wysylasz w formie. Ty tego nie robisz. Tracisz informacje o rekordzie, ktory edytujesz...
szczalpi
Mam rozumieć że w tym miejscu:
  1. if(isset($_GET['changes'])):
  2. {
Pyton_000
nie, dodaj sobie jeszcze input hidden z Nr. rekordu który pobierasz, a potem odwołuj się do tego ID przy UPDATE
nospor
Pyton nie mieszaj mu.... nie ID a NR. On wszystko bierze doslownie.
Pyton_000
Wybacz poprawiłem wink.gif
Zapominam czasami że są ludzie mniej rozgarnięci na tym świecie którzy nie muszą wiedzieć wszystkiego wink.gif (To nie miała być obraza)
szczalpi

Dodałem. Czy dobrze
  1. <input type="hidden" name="nr" value="nr">
nospor
No ale za wartosc masz wstawic aktualnie edytowany numer a nie tekst 'nr'...
szczalpi
Wydaje mi się, że problem tkwi gdzieś z pobieraniem "nr" w pętli.
  1. while ($row2 = mysql_fetch_array($result2)) {
  2.  
  3. echo "<a href=logowanie.php?frame=user_panel&user_menu=edycja&nr=$row2[nr] >uzytkfereteownik: ".$row2[2]." ;haslo: ".$row2[3]."</a><br/><br/><br/>";
  4.  
  5. }
. Z pierwszego rekordu da się edytować wpis a z drugiego już nie. Nie chce załadować danych z drugiego rekordu.

i chyba tutaj też jest źle sad.gif
  1. if(($_GET['user_menu']=="edycja")||($_GET['user_menu']=="edycja")&&($_GET['nr']=="nr")):
  2. {
  3. include("edycja.php");
  4. }
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.