![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 156 Pomógł: 1 Dołączył: 25.09.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Rekordy wyświetlam w pętli z bazy danych: ![]() I załóżmy, że chcemy zaktualizować dane w bazie, więc pewnie trzeba to zrobić w pętli. I tutaj mam problem:
Jak zaktualizować te dane w bazie ? |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 729 Pomógł: 346 Dołączył: 4.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
Bez nawiasu po set
-------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 156 Pomógł: 1 Dołączył: 25.09.2007 Ostrzeżenie: (0%) ![]() ![]() |
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1 = 'W', 2 = 'W', 3 = 'W' WHERE id ='1'' at line 1
Niestety nadal nie działa. |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 450 Pomógł: 135 Dołączył: 18.11.2010 Skąd: Wschowa Ostrzeżenie: (0%) ![]() ![]() |
Witaj.
Pozdrawiam. -------------------- “ Computers are good at following instructions, but not at reading your mind. ” - Donald Knuth |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 156 Pomógł: 1 Dołączył: 25.09.2007 Ostrzeżenie: (0%) ![]() ![]() |
Teraz działa.
Jednak aktualizuje tylko ostatni wiersz. Może pokaże cały kod.
jak to naprawić ? Ten post edytował max_mcee 1.04.2012, 15:46:57 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 195 Pomógł: 109 Dołączył: 3.11.2011 Ostrzeżenie: (10%) ![]() ![]() |
Czym jest $_POST[1] i $_POST[2] ?- jeśli któreś id pola ma nazwę zaczynającą się od liczby to jest to błąd.
Ten post edytował Niktoś 1.04.2012, 16:01:06 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 156 Pomógł: 1 Dołączył: 25.09.2007 Ostrzeżenie: (0%) ![]() ![]() |
Tak wygląda baza:
To błąd ? ![]() |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 195 Pomógł: 109 Dołączył: 3.11.2011 Ostrzeżenie: (10%) ![]() ![]() |
Przecież ja nie mówiłem o bazie tylko,tylko o polach input do których odwołujesz się $_POST["cośtam"];
Ty się jakoś w ogóle dziwnie odwołujesz do tablicy $_POST jak do tablicy indeksowanej ,a jest ona przecież hiperglobalną asocjacyjną. |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 156 Pomógł: 1 Dołączył: 25.09.2007 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 1 195 Pomógł: 109 Dołączył: 3.11.2011 Ostrzeżenie: (10%) ![]() ![]() |
<input type="text" name="1" value="r"></td>
<input type="text" name="2" value="r"></td> <input type="text" name="3" value="r"> To co jest pogrubione jest nie poprawne.Wiesz jak będzie wyglądała tablica POST?Przykładowo,to coś takiego: 1=1 2=2 3=3 4=4 itd. I jak potem chcesz się odwoływać?Powiedz co jest kluczem ,a co wartością? Ten post edytował Niktoś 1.04.2012, 16:51:43 |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 156 Pomógł: 1 Dołączył: 25.09.2007 Ostrzeżenie: (0%) ![]() ![]() |
Chciałem się odwoływać, do id użytkownika.
załóżmy $_POST[1] = W $_POST[2] = R jakoś nie mogę zrozumieć Twojego toku myślenia.. Możesz to dokładnie opisać ? Ten post edytował max_mcee 1.04.2012, 17:01:22 |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 1 195 Pomógł: 109 Dołączył: 3.11.2011 Ostrzeżenie: (10%) ![]() ![]() |
|
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
@Niktoś: Zapis:
jest niepoprawny, ale tylko z punktu widzenia specyfikacji (X)HTML. W PHP kluczem jest zawsze indeks w tablicy $_POST, a wartością wartość elementu z tablicy $_POST o wspomnianym indeksie. To nie jest błąd pod względem obslugi po stronie PHP. No i nadal nie będzie działać. @max_mcee: Najpierw kod:
W pętli while generujesz wiele elementów o nazwie id (name="id"), a po zatwierdzeniu formularza wysyłany jest identyfikator tylko jednego, ostatniego z tych elementów. Dzieje się tak właśnie dlatego, że elementy mają taką samą nazwę. Podobnie jest w przypadku pętli for. W momencie, gdy chcesz edytować wiele wierszy w tabeli musisz posłużyć się nazwami "tablicowymi", tj. takimi, które po zatwierdzeniu formularza przesyłają w $_POST tablice. Wyglądałoby to tak:
Przesłane w ten sposób dane odbierasz w taki sposób:
Pozostaje jeszcze kwestia optymalności skryptu. Niestety wykonywanie UPDATE-ów w pętli nie jest optymalnym rozwiązaniem, lepiej posłużyć się tutaj zapytaniem MULTI-INSERT z opcją ON DUPLICATE KEY UPDATE. Ale o tym może później, jak już ogarniesz powyższy kod. Ten post edytował mortus 1.04.2012, 17:27:34 |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 156 Pomógł: 1 Dołączył: 25.09.2007 Ostrzeżenie: (0%) ![]() ![]() |
Nadal jest problem przy takim rozwiązaniu, ponieważ jak wpisuje w pierwszym polu W to nic się nie zmienia, a jak wpisuje w drugie pole W to i w pierwsze się wpisuje automatycznie.
|
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Nadal jest problem przy takim rozwiązaniu, ponieważ jak wpisuje w pierwszym polu W to nic się nie zmienia, a jak wpisuje w drugie pole W to i w pierwsze się wpisuje automatycznie. Nie ma innego rozwiązania, a to które podałem jest jedynym słusznym. Musisz je tylko u siebie wprowadzić... czy to zrobiłeś, nie wiem, bo nie widzę. Mam tylko nadzieję, że w ogóle wyrzuciłeś pętle for po zmiennej $z, bo ta pętla w ogóle nie powinna się tam znajdować. Nie uważam, żeby napisanie całości za Ciebie było dobrym podejściem, więc pokaż kod, sprawdzę, czy są błędy i gdzie, i podpowiem co trzeba naprawić. Czy manual kłamie? Tablica asocjacyjna charakteryzuje się kluczami do których się odwołujesz,nie odwołujesz się do indexów. Znajdź mi jeden choćby przykład w manualu, gdzie odwołuje się do wartości poprzez indeksy jak $_POST[0],$_POST[1],$_POST[2]. Zdanie wyrwane z kontekstu o niczym nie świadczy. To, że $_POST jest tablicą asocjacyjną to ja wiem doskonale. Ale w tablicy asocjacyjnej mogą się znaleźć również elementy indeksowane liczbami, więc nie ma w ogóle o czym gadać. Przykłady w manualu PHP są dostosowane do specyfikacji (X)HTML. Skoro zatem name w elemencie HTML nie może zaczynać się cyfrą, to i tak jest, i będzie w każdym z przykładów, jaki znajdziesz, co nie oznacza, że pole o nazwie 1 nie zostanie przesłane, i co nie oznacza, że wartością pola o nazwie 1 nie będzie inna z góry określona wartość. Klucze i wartości się nie pomieszają tylko dlatego, że nazwa pola będzie cyfrą. Najpierw to przetestuj, a później zgłaszaj sprzeciwy... ja testowałem kiedyś przesyłanie danych przez pola formularza o niewłaściwych nazwach i... działa. Dobra kończę offtop. Widzę, że kolega Niktoś usunął swoją odpowiedź, ech... Ten post edytował mortus 1.04.2012, 17:54:32 |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 156 Pomógł: 1 Dołączył: 25.09.2007 Ostrzeżenie: (0%) ![]() ![]() |
To rozwiązanie nie zmienia zawartości bazy, nic się nie dzieje, przeanalizowałem całoś co mi wysłałeś i rozumiem mechanizm działania, jednak nie wiem czemu nie zapisuje danych do bazy. Unknown column 'w' in 'field list' Ten post edytował max_mcee 1.04.2012, 19:06:00 |
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Niektóre z aktualizowanych wartości są łańcuchami znaków i trzeba je objąć apostrofami:
EDIT: Oczywiście zauważ, że brakuje reszty kolumn. Kolumny do zapytania możesz dodawać dynamicznie (np. w pętli for) lub tak, jak zaprezentowałem w przykładzie. Kolumn jest dużo, więc lepszym rozwiązaniem będzie pętla. Ten post edytował mortus 1.04.2012, 23:57:45 |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 156 Pomógł: 1 Dołączył: 25.09.2007 Ostrzeżenie: (0%) ![]() ![]() |
Nadal ten sam błąd:
bo rozumiem, że to powinno działać, nawet jeśli są tylko 2 pola ? Bo w zasadzie updatem aktualizujemy tylko te pola które chcemy. Dobrze rozumiem ? |
|
|
![]()
Post
#19
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Nadal brakuje apostrofów, przyjrzyj się uważnie mojej poprzedniej wypowiedzi. Jeśli wartość (to co po znaku =, a nie przed), która ma być umieszczona w komórce jest napisem/łańcuchem znaków, to trzeba ją objąć apostrofami, w przeciwnym przypadku zostanie ona potraktowana, jak kolumna.
Oczywiście w ramach testów możesz aktualizować tylko dwie kolumny. |
|
|
![]()
Post
#20
|
|
Grupa: Zarejestrowani Postów: 156 Pomógł: 1 Dołączył: 25.09.2007 Ostrzeżenie: (0%) ![]() ![]() |
Ok działa
![]() Czyli twierdzisz, że zamiast UPDATE warto by użyć: http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 24.07.2025 - 10:16 |