![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 366 Pomógł: 0 Dołączył: 2.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
witam!
mam maly problem, przedstawia sie on nastepujaco: mam pewna tablice $_SESSION['aa'] w ktorej przechowuje rozne dane (tzn tablica ta moze ale nie musi zawieraz jedna lub wiecej danych); w dalszej czesci skryptu musze dane z tej tablicy wyciagnac i wstawic do bazy (postgres).. i tu zaczynaja sie schody, gdyz jesli moja tablica $_SESSION['aa'] zawiera wiecej niz 1 dana, wszystkie one sa wstawiane do jednej komorki.. przyklad:
w takim wypadku do bazy dodana zostanie jedna komorka zawierajaca (w tym wypadku jedna dana..) 'xxyyzz'; no ale 'xx', 'yy' i 'zz' to trzy rozne dane przechowywane tylko w tej samej tablicy.. jak zrobic by dane zostaly rozdzielone i kazde z nich z osobna dodane do swojej wlasnej komorki? z gory dzieki za sugestie! pzdr! |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 407 Pomógł: 1 Dołączył: 4.03.2003 Skąd: warszawa Ostrzeżenie: (0%) ![]() ![]() |
Oczywiście przy założeniu, że dane w sesji są w tablicy. czyli np.:
Ten post edytował babejsza 10.04.2007, 15:28:41 |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 999 Pomógł: 30 Dołączył: 14.01.2007 Skąd: wiesz ? Ostrzeżenie: (0%) ![]() ![]() |
Super i wykonujesz dzięki temu 5 zapytań jeśli jest 5 pól w tablicy.
<?php Kod $values ='';
foreach($_SESSION['aa'] as $value) { $values .= "'$value',"; } // i trzeba jeszcze usunac ostatni przecinek z $values $values = substr($values, 0, strlen($values)-1); $zapytanie="insert into testowa (nazwa_pola) values($values)"; $wynik=pg_query($polaczenie, $zapytanie); ?> |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 366 Pomógł: 0 Dołączył: 2.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
babejsza-dziekuje:)
orglee, wystarczy:
i chodzi ladnie i bez problemow. a co do tego ze wczesniej zliczalam elementy tablicy to po prostu myslalam ze moze zrobic jakas petle ktora bedzie rozdzielac dane w tablicy $_SESSION i bedzie je wrzucac do bazy az do momentu < wielkosc_tablicy + 1. no ale moj pomysl nie byl najlepszy, po prostu probowalam cos wykombinowac;) za to babejszy smiga:) |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 999 Pomógł: 30 Dołączył: 14.01.2007 Skąd: wiesz ? Ostrzeżenie: (0%) ![]() ![]() |
Faaaajnie (ironia)
Wyobraź sobie tylko kiedy na stronę wejdzie powiedzmy 1 K użytkowników i nagle będzie trzeba wywołać to dla nich wszystkich. Ile będzie zapytań do bazy ? 1000 * 5 = Owszem są to rozważania czysto teoretyczne, ale jak już się pisze skrypty to powinno się zwracać uwagę na wydajność. Przynajmniej tak mi się wydaje... |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 366 Pomógł: 0 Dołączył: 2.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
ej no wyluzuj..
przeciez zdaje sobie z tego sprawe ze moj pomysl nie jest dobry, dlatego poszukalam porady na tym forum. a to ze wczesniej na wlasna reke probowalam znalezc jakies wlasne rozwiazanie (w tym przypadku zle mi wyszlo) to chyba nic haniebnego? btw. wiesz moze jak zrobic zlaczenie 2ch foreach? tzn tych tablic sesyjnych mam wiecej.. czyli w wiekszej ilosci tabel musze rozdzielic dane nim je wprowadze do bazy. chodzi mi o cos takiego:
tzn oczywiscie ten warunek zlaczenia '&&' tu jest zle, chodzi mi o to jak uzyskac taki efekt jak za pomoca 'and' (rozdziel jedno i drugie wtedy wstaw do bazy) |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 999 Pomógł: 30 Dołączył: 14.01.2007 Skąd: wiesz ? Ostrzeżenie: (0%) ![]() ![]() |
Ja jestem całkowicie wyluzowany, natomiast ironizowanie wypowiedzi zdarzeń etc. to mój specyficzny styl bycia - taki znak firmowy
![]() Pozwól że uściślę swoją wypowiedź. Wykonujecie zapytanie w pętli zamiast posłużyć się składnią alternatywną polecenia SQL co może skutkować spadkiem wydajności. Mam nadzieję że to napisałem mniej .... nieuprzejmym sposobem ![]() edit> I jak edytujesz posta to nie wykorzystuj błędu forum IPB ![]() Ten post edytował orglee 10.04.2007, 19:05:35 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 366 Pomógł: 0 Dołączył: 2.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
spoko nie gniewam sie prawie
![]() a bede jeszcze mniej sie gniewac jak mi podpowiesz jak te foreach polaczyc ![]() |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 999 Pomógł: 30 Dołączył: 14.01.2007 Skąd: wiesz ? Ostrzeżenie: (0%) ![]() ![]() |
Nie da się łączyć dwóch tablic w jednej instrukcji foreach() aha nawiasy klamrowe {,} są do tego żeby ich zawartość została odczytana jako wyrażenie. Bez nich zostało by to odczytane jako $array1 a [$i] było by potraktowane jako tekst. Hmm co jeszcze. No chyba to wszystko co do wyjaśnienia. Pięć złotych zadość uczynienia proszę ![]() |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 366 Pomógł: 0 Dołączył: 2.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
ciezki ten Twoj zapis..
gdzie on rozdziela jedna tablice od drugiej? a zapytanie w postaci:
przeciez nie przejdzie, bo bedzie krzyczal ze ma wiecej kolumn niz podales mu wartosci.. no i bez sensu ze sie nie da laczyc dwoch tabel w foreac ![]() przerobilam to mniej wiecej na cos takiego:
no ale ni w cholere.. zreszta jakos nie do konca do mnie przemawia ten kod :/ |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 999 Pomógł: 30 Dołączył: 14.01.2007 Skąd: wiesz ? Ostrzeżenie: (0%) ![]() ![]() |
Przetestuj to co ci napisałem bo to co podałem jest składnią alternatywną polecenia INSERT w SQL'u i nie ma mowy żeby nie działało.
Jak to gdzie rozdziela jedną tablicę od drugiej ? Jeżeli masz string w postaci 1,2,3,4,5,6,7,8 to zastosuj na nim funkcję explode() żeby każda z liczb znalazła się w osobnym elemencie tablicy. $tablica = explode(',' , '1,2,3,4,5,6,7,8'); I masz to co ja napisałem czyli: $array1 = array(1,2,3,4,5); |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 366 Pomógł: 0 Dołączył: 2.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
no ja to wlasnie testuje i kombinuje..
wyglada to u mnie dokladnie tak jak podalam w poprzednim poscie.. ale to co otrzymuje: Warning: pg_query() [function.pg-query]: Query failed: ERROR: column "zrodlo_finansowania_id" is of type integer but expression is of type record LINE 1: insert into t_przejsciowa (zadanie_id, zrodlo_finansowania_i... ^ HINT: You will need to rewrite or cast the expression. in /var/www/htdocs/dodaj_zrodlov2.php on line 233" title="Zobacz w manualu PHP" target="_manual |
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 999 Pomógł: 30 Dołączył: 14.01.2007 Skąd: wiesz ? Ostrzeżenie: (0%) ![]() ![]() |
Wyświetl zapytanie jakie wykonujesz przez pg_query() przed wysłaniem.
I wklej tutaj na forum. |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 366 Pomógł: 0 Dołączył: 2.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
gdzie zadanie_id to jest cos co na razie wpisuje na sztywno (wartosc=1), zrodlo_finansowania to elementy tablicy $_SESSION['cc'], zas kwota to elementy tablicy $_SESSION['bb'].. |
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 999 Pomógł: 30 Dołączył: 14.01.2007 Skąd: wiesz ? Ostrzeżenie: (0%) ![]() ![]() |
Ehh no i źle robisz skoro wartości są generowane dynamicznie to jak w pozostałych nawiasach ma się znaleźć 1 ?
i napisz tutaj wynik. |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 366 Pomógł: 0 Dołączył: 2.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
wkleilam dokladnie to co podales, nie zmieniajac zupelnie nic. a oto wynik:
insert into t_przejsciowa (zadanie_id, zrodlo_finansowania_id, kwota) values (1, ('Array' , 'Array'), ('Array' , 'Array'));" title="Zobacz w manualu PHP" target="_manual no a w bazie pusto.. z tego co rozumiem ( a przynajmniej probuje ![]() tzn rozdzielic te 2 tablice, to nie problem wystarczy zamiast samego $values dac np. $values1 i $values2 i kazda tablice do osobnej zmiennej. tylko ze on nie widzi wartosci tych tablic, tzn tego co w nich jest. wie tylko ze to 'array'.. |
|
|
![]()
Post
#17
|
|
![]() Grupa: Zarejestrowani Postów: 999 Pomógł: 30 Dołączył: 14.01.2007 Skąd: wiesz ? Ostrzeżenie: (0%) ![]() ![]() |
echo '<b>'.$_SESSION['cc'].'<br>';
echo $_SESSION['bb'].'</b><br>'; To jeszcze ten kod wykonaj i podaj na forum, lub jeśli dane są ważne (nie do upubliczniania) to je zmień, ale niech struktura jaka była taka pozostanie. ![]() |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 366 Pomógł: 0 Dołączył: 2.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
obie zwrocily Array..
no wlasnie po to potrzebne foreach.. by mi elementy pokazalo tablicy.. co za dziadostwo! |
|
|
![]()
Post
#19
|
|
![]() Grupa: Zarejestrowani Postów: 999 Pomógł: 30 Dołączył: 14.01.2007 Skąd: wiesz ? Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#20
|
|
Grupa: Zarejestrowani Postów: 366 Pomógł: 0 Dołączył: 2.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
otrzymalam:
insert into t_przejsciowa (zadanie_id, zrodlo_finansowania_id, kwota) values (1, ('Array'), ('Array')); ------------------------------------------------------ Array ( [0] => 1 [1] => 2 ) ------------------------------------------- Array ( [0] => 111 [1] => 666 ) " title="Zobacz w manualu PHP" target="_manual i wiesz, to by sie nawet zgadzalo. tzn pierwsza tablica przechowuje id pewnych elementow ktore wybieram z listy rozwijanej, wybralam elementy o id 1 i 2 wiec wyswietlilo ok. co do drugiej tablicy tez sie zgadza, bo wyswietlila wpisane przeze mnie przykladowe kwoty, czyli 111 i 666.. tylko czemu w takim razie nie dziala to wstawianie do bazy? |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 16:30 |