![]() |
![]() ![]() |
![]() |
![]()
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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
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 (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) edit> I jak edytujesz posta to nie wykorzystuj błędu forum IPB (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) 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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
a bede jeszcze mniej sie gniewac jak mi podpowiesz jak te foreach polaczyc (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) |
|
|
![]()
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ę (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) |
|
|
![]()
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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) 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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) ) to w $values sa obie tablice.. i nie sa one rozdzielane.. 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. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
![]()
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? |
|
|
![]()
Post
#21
|
|
Grupa: Zarejestrowani Postów: 999 Pomógł: 30 Dołączył: 14.01.2007 Skąd: wiesz ? Ostrzeżenie: (0%) ![]() ![]() |
Wykonaj i wklej zapytanie które zostanie zwrócone. Jeszcze jedna sprawa jeśli w twojej bazie danych pole zadanie_id jest ustawione na auto_increment to nie musisz go podawać a wydaje mi się że właśnie tak jest skoro za każdym razem chcesz podawać jeden więc powyższy kod może równie dobrze wyglądać tak: Daj tutaj kod który zostanie wyświetlony teraz będzie już prawdopodobnie dobrze i możesz zamienić kod wyświetlający zapytanie na ekranie na kod który wysyła je do bazy. |
|
|
![]()
Post
#22
|
|
Grupa: Zarejestrowani Postów: 366 Pomógł: 0 Dołączył: 2.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
zrobilam tak:
sorki, ale troche mnie razi to wrzucanie tablic do jednej zmiennej, tzn jest dla mnie malo czytelne. efekt: insert into t_przejsciowa (zadanie_id, zrodlo_finansowania_id, kwota) values (1,('898')('8888888'), ('1')('3'));" title="Zobacz w manualu PHP" target="_manual z zerowym skutkiem w bazie:/ co do dalszej czesci Twojego posta zadanie_id nie jest identyfikatorem tej tablicy. id tej tablicy jest serial i sam sie zwieksza przy kazdym dodaniu. zadanie_id to bedzie pozniej pobierane skad inad jak sie z tym uporam, na razie dla swietego spokoju daje '1'. zreszta to i tak baza testowa.. |
|
|
![]()
Post
#23
|
|
Grupa: Zarejestrowani Postów: 999 Pomógł: 30 Dołączył: 14.01.2007 Skąd: wiesz ? Ostrzeżenie: (0%) ![]() ![]() |
Zrozum dziewczyno, kobieto, babo czy jak tam wolisz żeby cię nazywano (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) ,
że nigdy tego nie wrzucisz do bazy w ten sposób. To musi być w tej właśnie jednej zmiennej więc najpierw sprawdź jak ja to rozwiązałem a potem zacznij marudzić (IMG:http://forum.php.pl/style_emoticons/default/laugh.gif) insert into t_przejsciowa (zrodlo_finansowania_id, kwota) values ('898''8888888'), ('1','3'); Taki powinien być efekt końcowy. Tak powinno wyglądać zapytanie żadnych dodatkowych nawiasów. Zlituj się nad moderatorami forum bo będą wycinać, jak się obudzą 60 % naszej rozmowy (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Wykonaj kod który ci napisałem bo jest on dobrze napisany a jak uważasz inaczej to napisz PM do któregoś z opiekunów forum niech cię ochrzanią że im głowę zawracasz. ------- Jeżeli cię obraziłem swoją wypowiedzią to przepraszam, ale ja staram się ci tylko pomóc ;( |
|
|
![]()
Post
#24
|
|
Grupa: Zarejestrowani Postów: 366 Pomógł: 0 Dołączył: 2.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
dobrze szefie, juz wrzucilam tak jak poprzednio pisales (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) nic nie zmienialam!
i otrzymalam: insert into t_przejsciowa (zadanie_id, zrodlo_finansowania_id, kwota) values(1,'9898' , '1')(1,'898' , '2');" title="Zobacz w manualu PHP" target="_manual ps. nie obraziles mnie w zaden sposob, na prawde dziekuje ze probujesz mi pomoc bo ja tu strasznie utknelam i nie moge nic dalej robic :/ ps2. milo ze wreszcie ktos na tym forum zwraca sie do mnie w formie zenskiej (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) |
|
|
![]()
Post
#25
|
|
Grupa: Zarejestrowani Postów: 999 Pomógł: 30 Dołączył: 14.01.2007 Skąd: wiesz ? Ostrzeżenie: (0%) ![]() ![]() |
Hehe
No i w takiej postaci powinno się udać dodać do tabeli. Trzeba tylko zamiast wyświetlania dać dodawanie do bazy. ---- Eee guzik. Nie wiem dlaczego ale zniknął przecinek między nawiasami .. (1,'9898' , '1'),(1,'898' , '2'); - tak powinno być. Zobacz czy nie wywaliłaś przez przypadek tego przecinka. Cytat ps2. milo ze wreszcie ktos na tym forum zwraca sie do mnie w formie zenskiej biggrin.gif Bo to przecież takie nie kobiece zajęcie - do garów (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Ten post edytował orglee 10.04.2007, 22:41:14 |
|
|
![]()
Post
#26
|
|
Grupa: Zarejestrowani Postów: 366 Pomógł: 0 Dołączył: 2.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
no nie mialam faktycznie, juz dodalam:
tylko, tej, teraz to o jeden za duzo przecinek daje i dane sie i tak nie dodaja: Warning: pg_query() [function.pg-query]: Query failed: ERROR: syntax error at or near ";" LINE 1: ...finansowania_id, kwota) values(1,'787','1'),(1,'7777','8'),; ^ in /var/www/htdocs/dodaj_zrodlov2.php on line 242 insert into t_przejsciowa (zadanie_id, zrodlo_finansowania_id, kwota) values(1,'787','1'),(1,'7777','8'),;" title="Zobacz w manualu PHP" target="_manual tej, no to juz zmeczenie;) mialam jakis srednik niepotrzebny.. chodzi i dodaje;) i powiem Ci ze jak na poczatku oporna bylam Twojemu pomyslowi tak wreszcie juz kumam co i jak. nie wiem jak Ci dziekowac chlopie:) |
|
|
![]()
Post
#27
|
|
Grupa: Zarejestrowani Postów: 999 Pomógł: 30 Dołączył: 14.01.2007 Skąd: wiesz ? Ostrzeżenie: (0%) ![]() ![]() |
$zapytanie02=substr($zapytanie02,0,strlen($zapytanie02)-1).';'; Ta linijka wycina łańcuch znaków zostawiając ostatni przecinek. W zmiennej $zapytanie02 zostają nawiasy bez ostatniego przecinka. Dlaczego to nie działa ? Bo dodałaś na końcu poniższej linijki średnik: $zapytanie02="insert into t_przejsciowa (zadanie_id, zrodlo_finansowania_id, kwota) values$values;"; Poniższy kod generuje poprawne zapytanie:
------------------ Kto by pomyślał że we mnie tyle cierpliwości. Typowa jedynaczka. Zawsze musi mieć ostatnie zdanie i coś zmienić (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) |
|
|
![]()
Post
#28
|
|
Grupa: Zarejestrowani Postów: 366 Pomógł: 0 Dołączył: 2.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
to Cie zdziwie bo nie jestem jedynaczka:P i nic nie zmieniam tylko kombinuje:P cale zycie trzeba kombinowac;)
ps. a wogole to wyprzedzilam Twojego ost posta: tej, no to juz zmeczenie;) mialam jakis srednik niepotrzebny.. chodzi i dodaje;) i powiem Ci ze jak na poczatku oporna bylam Twojemu pomyslowi tak wreszcie juz kumam co i jak. nie wiem jak Ci dziekowac chlopie:)" title="Zobacz w manualu PHP" target="_manual nie czytasz moich postow dokladnie tylko ochrzaniasz;) no nic, jeszcze raz dzieki za pomoc!!:) milego dnia!:) |
|
|
![]()
Post
#29
|
|
Grupa: Zarejestrowani Postów: 999 Pomógł: 30 Dołączył: 14.01.2007 Skąd: wiesz ? Ostrzeżenie: (0%) ![]() ![]() |
Nie ma za co właściwie to ja powinienem być wdzięczny nabiłem sobie dzięki tobie 1,2,3....14 postów O_O normalnie wytrzeszcz oczu.
(IMG:http://forum.php.pl/style_emoticons/default/laugh.gif) edit> Pierwsze zdanie out. Może faktycznie nie zwróciłem uwagi Masz rodzeństwo ? ... biedaki (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Ten post edytował orglee 11.04.2007, 09:10:10 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 16:39 |