Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [PHP]Pobiera dwa takie same rekordy., Problem czy edycji jednego rekordu.
szczalpi
post
Post #1





Grupa: Zarejestrowani
Postów: 336
Pomógł: 0
Dołączył: 25.10.2006

Ostrzeżenie: (10%)
X----


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.  
Go to the top of the page
+Quote Post
Daimos
post
Post #2





Grupa: Zarejestrowani
Postów: 1 319
Pomógł: 118
Dołączył: 26.11.2003
Skąd: Lublin

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


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

Ten post edytował Daimos 31.08.2014, 20:20:33
Go to the top of the page
+Quote Post
szczalpi
post
Post #3





Grupa: Zarejestrowani
Postów: 336
Pomógł: 0
Dołączył: 25.10.2006

Ostrzeżenie: (10%)
X----


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.

Ten post edytował szczalpi 1.09.2014, 07:34:15
Go to the top of the page
+Quote Post
Pyton_000
post
Post #4





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Błąd masz w założeniu. Nie powinno być więcej niż 1 rekord z z takim samym loginem.
Go to the top of the page
+Quote Post
szczalpi
post
Post #5





Grupa: Zarejestrowani
Postów: 336
Pomógł: 0
Dołączył: 25.10.2006

Ostrzeżenie: (10%)
X----


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ę.
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




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....
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #7





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


Nie przekazuj hasła GETem, bo się zdziwisz...
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Czy on to przekaze GETem czy POSTem to jeden grzyb w przypadku, gdy i tak hasła trzyma w bazie zapisane jawnie
Go to the top of the page
+Quote Post
szczalpi
post
Post #9





Grupa: Zarejestrowani
Postów: 336
Pomógł: 0
Dołączył: 25.10.2006

Ostrzeżenie: (10%)
X----


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.
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




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.
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #11





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


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.
Go to the top of the page
+Quote Post
nospor
post
Post #12





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




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...
Go to the top of the page
+Quote Post
szczalpi
post
Post #13





Grupa: Zarejestrowani
Postów: 336
Pomógł: 0
Dołączył: 25.10.2006

Ostrzeżenie: (10%)
X----


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ć.
Go to the top of the page
+Quote Post
nospor
post
Post #14





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




NUMER masz przekazywac razem z danymi, ktore wysylasz w formie. Ty tego nie robisz. Tracisz informacje o rekordzie, ktory edytujesz...
Go to the top of the page
+Quote Post
szczalpi
post
Post #15





Grupa: Zarejestrowani
Postów: 336
Pomógł: 0
Dołączył: 25.10.2006

Ostrzeżenie: (10%)
X----


Mam rozumieć że w tym miejscu:
  1. if(isset($_GET['changes'])):
  2. {
Go to the top of the page
+Quote Post
Pyton_000
post
Post #16





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


nie, dodaj sobie jeszcze input hidden z Nr. rekordu który pobierasz, a potem odwołuj się do tego ID przy UPDATE

Ten post edytował Pyton_000 1.09.2014, 12:55:44
Go to the top of the page
+Quote Post
nospor
post
Post #17





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Pyton nie mieszaj mu.... nie ID a NR. On wszystko bierze doslownie.
Go to the top of the page
+Quote Post
Pyton_000
post
Post #18





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Wybacz poprawiłem (IMG:style_emoticons/default/wink.gif)
Zapominam czasami że są ludzie mniej rozgarnięci na tym świecie którzy nie muszą wiedzieć wszystkiego (IMG:style_emoticons/default/wink.gif) (To nie miała być obraza)
Go to the top of the page
+Quote Post
szczalpi
post
Post #19





Grupa: Zarejestrowani
Postów: 336
Pomógł: 0
Dołączył: 25.10.2006

Ostrzeżenie: (10%)
X----



Dodałem. Czy dobrze
  1. <input type="hidden" name="nr" value="nr">
Go to the top of the page
+Quote Post
nospor
post
Post #20





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




No ale za wartosc masz wstawic aktualnie edytowany numer a nie tekst 'nr'...
Go to the top of the page
+Quote Post
szczalpi
post
Post #21





Grupa: Zarejestrowani
Postów: 336
Pomógł: 0
Dołączył: 25.10.2006

Ostrzeżenie: (10%)
X----


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 (IMG:style_emoticons/default/sad.gif)
  1. if(($_GET['user_menu']=="edycja")||($_GET['user_menu']=="edycja")&&($_GET['nr']=="nr")):
  2. {
  3. include("edycja.php");
  4. }


Ten post edytował szczalpi 1.09.2014, 21:05:47
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 4.10.2025 - 00:41