szczalpi
31.08.2014, 19:39:33
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
<?
connect();
$user = $_SESSION['user_name'];
$sql="select * from users_b where login='$user'";
$nr=$_GET['nr'];
$sql2="select * from users_a where id='$row[0]'";
echo "<a href=logowanie.php?frame=user_panel&user_menu=edycja&nr=$row2[1] >uzytkfereteownik: ".$row2[2]." ;haslo: ".$row2[3]."<br/></a>";
}
?>
<?
connect();
################################################################################
?>
<?
if($_GET['user_menu']=="podglad"):
{
include("podglad.php");
}
elseif($_GET['user_menu']=="edycja"):
{
include("edycja.php");
}
elseif(($_GET['user_menu']=="nr")||($_POST['user_menu']=="nr")):
{
include("edycja.php");
}
endif;
?>
plik edycja.php
<?
connect();
/*mysql_query("SET NAMES 'latin2'");
$sql="select * from users_a where login='$user'";
$result=mysql_query($sql);
$row=mysql_fetch_array($result);
*/
$nr=$_GET['nr'];
$sql2="select * from users_a where id='$row[0]' ";
if(isset($_GET['changes'])): {
$login = $_GET['login'];
$password = $_GET['password'];
$sql="update users_a set login='$login' where id='$row[0]'";
$sql="update users_a set password='$password' where id='$row[0]'";
echo "<p align=\"center\">Twoje dane zostały zmienione.</p>";
}
else:
{
### wywietlenie wpisu #######################################################?>
<form action="logowanie.php" method="get">
<div id="main">
<div id="tlo">Imię:</div>
<div id="cap3"><input class="long3" type="text" name="login" value="
<? echo $row2['login']; ?>"></div>
</div>
<div id="main">
<div id="tlo">Nazwisko:</div>
<div id="cap3"><input class="long3" type="text" name="password" value="
<? echo $row2['password']; ?>"></div>
</div>
<input type="submit" name="changes" value="ok">
<input type="hidden" name="frame" value="user_panel">
<input type="hidden" name="user_menu" value="edycja">
</form>
<?
}
endif;
?>
Daimos
31.08.2014, 20:18:45
W pliku edycja masz:
$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.
$sql="update users_a set login='$login' where id='$row[0]'";
W chwilę wtedy znajdziesz błąd
szczalpi
1.09.2014, 07:32:31
Z pliku user_panel.php
$user = $_SESSION['user_name'];
$sql="select * from users_b where login='$user'";
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
$sql="update users_a set password='$password' where nr='$row2[1]'";
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
1.09.2014, 07:44:20
Błąd masz w założeniu. Nie powinno być więcej niż 1 rekord z z takim samym loginem.
szczalpi
1.09.2014, 08:12:38
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
1.09.2014, 08:19:33
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
1.09.2014, 08:23:33
Nie przekazuj hasła GETem, bo się zdziwisz...
nospor
1.09.2014, 08:25:52
Czy on to przekaze GETem czy POSTem to jeden grzyb w przypadku, gdy i tak hasła trzyma w bazie zapisane jawnie
szczalpi
1.09.2014, 09:15:10
Struktra bazy "users_a"
id | nr | login | password
1 2 AS ddddd
1 3 de ddddd
2 4 proba proba
2 5 kod kod
Struktra bazy "users_b"
id | login | password
1 adam adam
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
1.09.2014, 09:26:24
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
1.09.2014, 10:33:03
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
1.09.2014, 10:49:24
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
1.09.2014, 11:31:27
Nie wiem już. Mam tak
$sql="update users_a set login='$login' where nr='$row2[1]'";
Link do strony
http://www.log.ewypoczywaj.pl/logowanie.php?frame=loginhaslo: 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
1.09.2014, 11:36:16
NUMER masz przekazywac razem z danymi, ktore wysylasz w formie. Ty tego nie robisz. Tracisz informacje o rekordzie, ktory edytujesz...
szczalpi
1.09.2014, 11:52:48
Mam rozumieć że w tym miejscu:
if(isset($_GET['changes'])): {
Pyton_000
1.09.2014, 12:24:47
nie, dodaj sobie jeszcze input hidden z Nr. rekordu który pobierasz, a potem odwołuj się do tego ID przy UPDATE
nospor
1.09.2014, 12:28:09
Pyton nie mieszaj mu.... nie ID a NR. On wszystko bierze doslownie.
Pyton_000
1.09.2014, 13:42:00
Wybacz poprawiłem

Zapominam czasami że są ludzie mniej rozgarnięci na tym świecie którzy nie muszą wiedzieć wszystkiego

(To nie miała być obraza)
szczalpi
1.09.2014, 14:34:31
Dodałem. Czy dobrze
<input type="hidden" name="nr" value="nr">
nospor
1.09.2014, 19:00:29
No ale za wartosc masz wstawic aktualnie edytowany numer a nie tekst 'nr'...
szczalpi
1.09.2014, 19:34:17
Wydaje mi się, że problem tkwi gdzieś z pobieraniem "nr" w pętli.
echo "<a href=logowanie.php?frame=user_panel&user_menu=edycja&nr=$row2[nr] >uzytkfereteownik: ".$row2[2]." ;haslo: ".$row2[3]."</a><br/><br/><br/>";
}
. 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

if(($_GET['user_menu']=="edycja")||($_GET['user_menu']=="edycja")&&($_GET['nr']=="nr")):
{
include("edycja.php");
}
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.