Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> rozdzielenie danych przechowywanych w $_SESSION
misty
post
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:
  1. <?php
  2. $tablica=implode($_SESSION['aa']); //powiedzmy ze zawiera ona kilka danych, np. 'xx', 'yy', 'zz'
  3. $policz_elementy=count($_SESSION['aa']);
  4. //wstawiamy dane
  5.  
  6. for ($i=1; $i<$policz_dane+1; $i++)
  7. {
  8. $zapytanie="insert into testowa (wartosci) values ('$tablica');";
  9. $wynik=pg_query($polaczenie, $zapytanie);
  10. }
  11. ?>


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!
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
babejsza
post
Post #2





Grupa: Zarejestrowani
Postów: 407
Pomógł: 1
Dołączył: 4.03.2003
Skąd: warszawa

Ostrzeżenie: (0%)
-----


  1. <?php
  2. foeach($_SESSION['aa'] as $value)
  3. {
  4.  $zapytanie="insert into testowa (wartosci) values ('$value')";
  5. $wynik=pg_query($polaczenie, $zapytanie);
  6. }
  7. ?>


Oczywiście przy założeniu, że dane w sesji są w tablicy.

czyli np.:

  1. <?php
  2. $_SESSION['aa'] = array(1, 2, 3, 4);
  3. ?>


Ten post edytował babejsza 10.04.2007, 15:28:41
Go to the top of the page
+Quote Post
starach
post
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);
?>
Go to the top of the page
+Quote Post
misty
post
Post #4





Grupa: Zarejestrowani
Postów: 366
Pomógł: 0
Dołączył: 2.01.2007

Ostrzeżenie: (0%)
-----


babejsza-dziekuje:)

orglee, wystarczy:
  1. <?php
  2. foreach ($_SESSION['aa'] as $data)
  3. {
  4. $zapytanie="insert into testowa (wartosci) values ('$data');";
  5. $wynik=pg_query($polaczenie, $zapytanie);
  6. }
  7. ?>


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:)
Go to the top of the page
+Quote Post
starach
post
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...
Go to the top of the page
+Quote Post
misty
post
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:

  1. <?php
  2. foreach (($_SESSION['aa'] as $data) && ($_SESSION['bb'] as $value))
  3. {
  4. $pyt="insert into tabela (wartosc_jeden, wartosc_dwa) values ('$data', '$value');";
  5. $wynik=pg_query($polaczenie, $pyt);
  6. }
  7. ?>


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)
Go to the top of the page
+Quote Post
starach
post
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 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 tongue.gif

edit>
I jak edytujesz posta to nie wykorzystuj błędu forum IPB tongue.gif

Ten post edytował orglee 10.04.2007, 19:05:35
Go to the top of the page
+Quote Post
misty
post
Post #8





Grupa: Zarejestrowani
Postów: 366
Pomógł: 0
Dołączył: 2.01.2007

Ostrzeżenie: (0%)
-----


spoko nie gniewam sie prawie winksmiley.jpg
a bede jeszcze mniej sie gniewac jak mi podpowiesz jak te foreach polaczyc winksmiley.jpg
Go to the top of the page
+Quote Post
starach
post
Post #9





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

Ostrzeżenie: (0%)
-----


  1. <?php
  2. $array1 = array(1,2,3,4,5);
  3. $array2 = array('jeden','dwa','trzy','cztery','piec');
  4. $values='';
  5. for($i=0; $i<count($array1); $i++)
  6. {
  7. $values .= "('{$array1[$i]}','{$array2[$i]}'),";
  8. }
  9.  
  10. $pyt="INSERT INTO `tabela` (`wartosc_jeden`, `wartosc_dwa`) values$values";
  11. $pyt=substr($pyt,0,strlen($pyt)-1).';';
  12. echo "<hr>$pyt<hr>";
  13. ?>

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ę tongue.gif
Go to the top of the page
+Quote Post
misty
post
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:
  1. <?php
  2. $pyt="INSERT INTO `tabela` (`wartosc_jeden`, `wartosc_dwa`) values ($values)";
  3. ?>

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 winksmiley.jpg

przerobilam to mniej wiecej na cos takiego:
  1. <?php
  2. $tablica_jeden=array($_SESSION['bb']);
  3. $tablica_dwa=array($_SESSION['cc']);
  4.  
  5. $values='';
  6. for($i=0; $i<count($tablica_jeden); $i++)
  7. {
  8. $values .="('{$tablica_jeden[$i]}' , '{$tablica_dwa[$i]}')";
  9. }
  10.  
  11. $zapytanie02="insert into t_przejsciowa (zadanie_id, zrodlo_finansowania_id, kwota) values (1, $values, $values);";
  12. $zapytanie02=substr($zapytanie02,0,strlen($zapytanie02)-1).';';
  13. $wynik02=pg_query($polaczenie, $zapytanie02);
  14. ?>

no ale ni w cholere.. zreszta jakos nie do konca do mnie przemawia ten kod :/
Go to the top of the page
+Quote Post
starach
post
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);
Go to the top of the page
+Quote Post
misty
post
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
Go to the top of the page
+Quote Post
starach
post
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.
Go to the top of the page
+Quote Post
misty
post
Post #14





Grupa: Zarejestrowani
Postów: 366
Pomógł: 0
Dołączył: 2.01.2007

Ostrzeżenie: (0%)
-----


  1. <?php
  2. $zapytanie02="insert into t_przejsciowa (zadanie_id, zrodlo_finansowania_id, kwota) values (1, $values, $values);"
  3. ?>


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']..
Go to the top of the page
+Quote Post
starach
post
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 ?
  1. <?php
  2. $tablica_jeden=array($_SESSION['bb']);
  3. $tablica_dwa=array($_SESSION['cc']);
  4.  
  5. $values='';
  6. for($i=0; $i<count($tablica_jeden); $i++)
  7. {
  8. $values .="('{$tablica_jeden[$i]}' , '{$tablica_dwa[$i]}')";
  9. }
  10.  
  11. $zapytanie02="insert into t_przejsciowa (zadanie_id, zrodlo_finansowania_id, kwota) values (1, $values, $values);";
  12. $zapytanie02=substr($zapytanie02,0,strlen($zapytanie02)-1).';';
  13. echo '<b>'.$zapytanie02.'</b>';
  14. ?>

i napisz tutaj wynik.
Go to the top of the page
+Quote Post
misty
post
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 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'..
Go to the top of the page
+Quote Post
starach
post
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. smile.gif
Go to the top of the page
+Quote Post
misty
post
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!
Go to the top of the page
+Quote Post
starach
post
Post #19





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

Ostrzeżenie: (0%)
-----


Tfu źle pomyliłem się.
Zamiast echo daj print_r()
a dokładnie:
  1. <?php
  2. echo '<hr><pre>'.print_r($_SESSION['cc'],true).'<hr>'.print_r($_SESSION['bb'],true).'</pre><hr>';
  3. ?>


Ten post edytował orglee 10.04.2007, 21:15:03
Go to the top of the page
+Quote Post
misty
post
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?
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 16:30