![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 84 Pomógł: 0 Dołączył: 12.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam. Mam skrypt który wyświetla, dodaje, usuwa i edytuje rekordy z bazy. Problem mam tylko z edycją. Kod nie wypluwa błędu ale też nie zatwierdzał zmian i nie wiem czemu. Prosił bym o sprawdzenie, a dla ułatwienia wstawiam tylko fragmenty dotyczące edycji.
Więc tak. Najpierw łączę się z bazą i wyświetlam listę rekordów za pomocą poniższej pętli: Kod $i = 1; while($wyswietl = mysql_fetch_array($result)) { $id = $wyswietl['id']; $nazwa = $wyswietl['nazwa']; $lista .=<<<EOD <tr> <td>$i</td> <td>$nazwa</td> <td><a href="usun_kategorie.php?type=zmien&id=$id&nazwa=$nazwa">Zmień</a></td> </tr> EOD; $i++; } Gdy kliknę w link "zmien" uruchamia się strona z formularzem: Kod <form action="usun_kategorie.php?opcja=edit" method="post"> <input type="text" name="nowa_nazwa" size="20"> <input type="submit" name="wyslij" value="Dodaj"> </form> Gdy wyślę nową nazwę wpisaną w formularzu otwiera się jeszcze raz ta sama strona z tym, że użyłem instrukcji warunkowej if która dokona zmian w rekordzie: Kod if(isset($_GET['opcja']) == edit) { $edytuj = "UPDATE kategorie SET nazwa = '" . $_GET['nowa_nazwa'] . "' WHERE id = '" . $_GET['id'] . "'"; $result = mysql_query($edytuj) or die("Edycja kategorii nie powiodła się!" . mysql_error()); echo "<p id=\"text\">Edycja nazwy kategorii powiodła się.</p>"; Dziwne jest, że gdy wpiszę nową nazwę dla kategorii w formularzu otrzymuje potwierdzenie, że została zmieniona a gdy sprawdzam rekord w bazie albo przez stronę nie zmienia się ![]() |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 317 Pomógł: 58 Dołączył: 6.11.2005 Ostrzeżenie: (0%) ![]() ![]() |
A pokaż mi kolego, gdzie w Twoim formularzu edycji jest ID kategorii
![]() -------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Ze swojej strony dodam jeszcze, że niepotrzebnie przesyłasz tutaj
Kod <td><a href="usun_kategorie.php?type=zmien&id=$id&nazwa=$nazwa">Zmień</a></td> nazwę. Po to tworzymy i przesyłamy unikalny identyfikator, aby tylko z niego korzystać. Odnośnie formularza, to luck zapomniał wspomnieć, abyś value tego ukrytego pola pobrał z tablicy $_GET.Natomiast sam UPDATE odbywa się po wysłaniu formularza metodą post, zatem nie powinno być $_GET['nowa_nazwa'] tylko $_POST['nowa_nazwa'] i nie powinno być $_GET['id'] tylko $_POST['id'] (trzecia linijka w ostatnim listingu). |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 84 Pomógł: 0 Dołączył: 12.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
Chłopaki działa - dzięki wielkie:D Już podaję co zmieniłem. Zaraz nad formularzem utworzyłem zmienną i zapisałem w niej wartość 'id' pobierana z linka w momencie kliknięcia:
Kod $wartosc = $_GET['id']; A w formularzu dodałem ukryte pole które przesyła numer identyfikatora kategorii która ma zostać zmieniona: Kod <input type=\"hidden\" name=\"id\" value=\"$wartosc\"> W "UPDATE..." pozmieniałem na $_POST[] Ale mam jeszcze jedno pytanko. Mortus napisałeś, że niepotrzebnie przesyłam nazwę w linkach, że powinienem użyć identyfikatora i racja ale zrobiłem to tylko z jednego powodu. Przed formularzem mam echo który wyświetla informacje o tym, że poniższy formularz zmieni nazwę tej kategori: "tutaj_wyswietla_sie_nazwa_pobranej_kategorii" więc wystarczy, że wpisze $_GET['nazwa'] i problem z głowy. Gdy bym chciał to zrobić używając identyfikatora musiał bym się połączyć z bazą po raz drugi i pobrać nazwę za pomocą identyfikatora i wtedy ją zapisać w zmiennej i ją użyć. Moje rozwiązanie ogranicza się do przesłania wartości i odczytania jej co jest znacznie szybsze. Jeśli jest jakieś inne wyjście to chętnie się dowiem ![]() |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Gdy bym chciał to zrobić używając identyfikatora musiał bym się połączyć z bazą po raz drugi i pobrać nazwę za pomocą identyfikatora i wtedy ją zapisać w zmiennej i ją użyć. I to jest jedyne sensowne rozwiązanie. Dlaczego? Dlatego, że nazwę w linku możemy bez problemu zmienić i nie musi się ona wcale zgadzać z nazwą, jaka odpowiada przesyłanemu identyfikatorowi (który również możemy w linku zmienić). Dla przykładu weźmy tabelę:Kod id kategoria Adres możemy spreparować w taki sposób, że identyfikator będzie wskazywał na kategorię 1, ale nazwa będzie odpowiadać kategorii 2, przykładowy adres w przeglądarce1 kategoria 1 2 kategoria 2 Kod http://www.moja-strona.pl/index.php?id=1&nazwa=kategoria%202 Użytkownik zostanie wtedy poinformowany, że zmianie ulegnie nazwa 'kategoria 2', gdy w rzeczywistości będziemy zmieniać nazwę 'kategoria 1'. Zatem jeśli przesyłasz zarówno identyfikator, jak i nazwę, to wypadałoby zapytaniem do bazy danych sprawdzić, czy dany identyfikator odpowiada danej nazwie. A czy w związku z tym nie lepiej przesłać sam identyfikator i pobrać odpowiednią nazwę?
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 84 Pomógł: 0 Dołączył: 12.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
Rozumiem o co Ci chodzi i rzeczywiście sposób jest dobry ale boli mnie trochę to, że w jednym kodzie wykonuje dwa razy to samo (odczytuje te same wartości z tej samej tabeli) mam wrażenie, że kod taki był by strasznie lamerski. Wiem, że z moich ust to brzmi żałośnie bo sam się uczę i zabłysnąć z PHP to nie mogę
![]() ![]() Zastanawiając się nad inną metodą zamiast ponownie pobierać wartości z bazy, to w miejscu gdzie po raz pierwszy je wyświetliłem jakoś zapisać je w do tabeli i jakoś przesłać a następnie odczytać albo stworzyć jakąś funkcję. Miało by to sens? |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 18.07.2025 - 07:51 |