Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Jak zapisać dane pochodzące z $_SESSION do mysql?
Forum PHP.pl > Forum > Przedszkole
FliSs_tCv
Witam.

Problem dotyczy zapisywania danych sesyjnych do bazy.
Otóż mam koszyk zamówień, gdzie dane są przekazywane $_SESSION i na koniec chcę je przekazać(zapisać) do bazy danych(mysql).
Jak to wykonać sciana.gif

Mam skrypt który ma dodać dane $_SESSION oraz dane kontaktowe z formularza
  1. <?php
  2.  
  3. $sql_serwer = "localhost";
  4. $sql_login = "****";
  5. $sql_haslo = "*****";
  6. $sql_baza  = "baza";
  7. $sql_tabela = "produkty_zamowione";
  8. mysql_connect($sql_serwer, $sql_login, $sql_haslo);
  9. mysql_select_db($sql_baza);
  10.  
  11. $imie = $_POST['imie'];
  12. $adres = $_POST['adres'];
  13. $telefon = $_POST['telefon'];
  14.  
  15. foreach ($_SESSION['koszyk'] as $rzadek)
  16. {
  17. $id = $rzadek['id'];
  18. $nazwa = $rzadek['nazwa'];
  19. $ilosc = $rzadek['ilosc'];
  20. $wielkosc = $rzadek['wielkosc'];
  21. $uwagi = $rzadek['uwagi'];
  22. $dodatki = $rzadek['dodatki'];
  23.  
  24. $query = "INSERT INTO $sql_tabela VALUES ('$id','$nazwa', '$ilosc', '$wielkosc', '$uwagi', '$dodatki', '$imie','$adres', '$telefon')";
  25. $result = mysql_query($query);
  26. if(!$result || !mysql_affected_rows())
  27. {
  28. echo 'Zamówienie nie może zostać przyjęte w tym momencie. Proszę spróbować póĽniej.';
  29. }
  30. }
  31. unset($_SESSION);
  32. header('Location: index.php?page=dodano');
  33. ?>


Dane kontaktowe zostają zapisane, lecz dane pochodzące z $_SESSION niestety nie i nie mam zielonego pojęcia dlaczego sciana.gif.
Jedno jest pewne dane z $_SESSION są przekazywane do tego pliku sprawdzałem to var_dump(); oraz var_export(); więc problem na 99% leży w tym skrypcie:)

Prosiłbym o jakieś porady/sugestie co do mojego problemu. Pozdrawiam FliSs cool.gif
uli
Mógłbyś pokazać jak dopisujesz zamówienie do $_SESSION['koszyk']?

Wydaje mi się, że tu może tkwić błąd.

I daj po zapytaniu jego wyświetlenie.

  1. <?php
  2. echo $query;
  3. ?>


Zobaczymy, co Tobie pokaże.
misiek172
"INSERT INTO $sql_tabela VALUES ('$id','$nazwa', '$ilosc', '$wielkosc', '$uwagi', '$dodatki', '$imie','$adres', '$telefon')";

daj:

"INSERT INTO `".$sql_tabela ."` SET nazwa_kolumny1='".$id."', nazwa_kolumny2='".$nazwa."', nazwa_kolumny3='".$ilosc"'"; itd
uli
Cytat(misiek172 @ 16.10.2007, 11:24:52 ) *
"INSERT INTO $sql_tabela VALUES ('$id','$nazwa', '$ilosc', '$wielkosc', '$uwagi', '$dodatki', '$imie','$adres', '$telefon')";

daj:

"INSERT INTO `".$sql_tabela ."` SET nazwa_kolumny1='".$id."', nazwa_kolumny2='".$nazwa."', nazwa_kolumny3='".$ilosc"'"; itd


Pierwszy raz widzę (i pewnie ostatni) żeby słowo SET zostało ujęte w INSERT. Przecież to się tyczy UPDATE.

Poprawna składnia:
  1. INSERT INTO $sql_tabela VALUES ('$id','$nazwa', '$ilosc', '$wielkosc', '$uwagi', '$dodatki', '$imie','$adres', '$telefon')


lub (jeśli nie wypełniasz wszystkich pól tylko wybrane):

  1. INSERT INTO $sql_tabela (nazwa_kolumny_z_id, nazwa_kolumny_z_nazwa, nazwa_kolumny_z_wielkosc, nazwa_kolumny_z_uwagi, nazwa_kolumny_z_ dodatki, nazwa_kolumny_z_imie, nazwa_kolumny_z_adres, nazwa_kolumny_z_telefon) VALUES ('$id','$nazwa', '$ilosc', '$wielkosc', '$uwagi', '$dodatki', '$imie','$adres', '$telefon')
FliSs_tCv
koszyk wygląda tak:
  1. <?php
  2.  
  3. // tutaj funkcja która określaczy mała czy duża pizza
  4.  
  5. $_SESSION['koszyk']['pizza'][$_POST['pizza']]['nazwa'] = $_POST['pizza'];
  6. $_SESSION['koszyk']['pizza'][$_POST['pizza']]['ilosc'] = $_POST['ilosc'];
  7. $_SESSION['koszyk']['pizza'][$_POST['pizza']]['wielkosc'] = $_POST['wielkosc'];
  8. $_SESSION['koszyk']['pizza'][$_POST['pizza']]['uwagi'] = $_POST['uwagi'];
  9. $_SESSION['koszyk']['pizza'][$_POST['pizza']]['dodatki'] = $_POST['dodatek'];
  10.  
  11. // wyświetlanie 
  12. foreach($_SESSION['koszyk'] as $jedzenie => $wartosc){
  13. foreach ($wartosc as $cecha){
  14. echo '<tr>
  15.  <td style="border : 1px solid white; text-align : center;">
  16. '.$cecha['nazwa'].'
  17. </td>
  18.  <td style="border : 1px solid white; text-align : center;">
  19. '.$cecha['ilosc'].'
  20. </td>
  21. <td style="border : 1px solid white; text-align : center;">
  22.  '.$cecha['wielkosc'].'
  23. </td>
  24. </tr>';
  25. }
  26. }
  27. //koniec wyświetlania
  28. ?>
Cezar708
dobra rada, polecam sposób przedstawiony przez ULI

zawsze określaj do jakich po kolei kolumn będziesz wrzucał wartości. W przyszłości może być możliwość, że dodasz jakąś kolumnę do schematu tej tabeli i wszystkie skrypty gdzie jest insert będziesz musiał poprawić, bo inaczej będziesz miał błędy.

czyli (w pseudokodzie)
  1. INSERT INTO tableName( col1Name, col2Name ... ) VALUES ( 'val1', val2 ... );
FliSs_tCv
właśnie nie rozumiem o co chodzi z tym:
  1. INSERT INTO $sql_tabela (nazwa_kolumny_z_id, nazwa_kolumny_z_nazwa, nazwa_kolumny_z_wielkosc, nazwa_kolumny_z_uwagi, nazwa_kolumny_z_ dodatki, nazwa_kolumny_z_imie, nazwa_kolumny_z_adres, nazwa_kolumny_z_telefon) VALUES ('$id','$nazwa', '$ilosc', '$wielkosc', '$uwagi', '$dodatki', '$imie','$adres', '$telefon')

a dokładniej z tym:
  1. nazwa_kolumny_z_id
co ja muszę wpisać tam w nazwa kolumny tongue.gif nie rozumiem tego sad.gif

zrobiłem tak:(i wywala że "Zamówienie nie może zostać przyjęte w tym momencie. Proszę spróbować póĽniej":()
  1. <?php
  2.  
  3. // Logowanie
  4.  
  5. $imie = $_POST['imie'];
  6. $adres = $_POST['adres'];
  7. $telefon = $_POST['telefon'];
  8.  
  9. foreach ($_SESSION['koszyk'] as $rzadek)
  10. {
  11. $id = $rzadek['id'];
  12. $nazwa = $rzadek['nazwa'];
  13. $ilosc = $rzadek['ilosc'];
  14. $wielkosc = $rzadek['wielkosc'];
  15. $uwagi = $rzadek['uwagi'];
  16. $dodatki = $rzadek['dodatki'];
  17.  
  18. $query = "INSERT INTO $sql_tabela 
  19. (nazwa_kolumny_z_id, nazwa_kolumny_z_nazwa, nazwa_kolumny_z_wielkosc,
  20. nazwa_kolumny_z_uwagi, nazwa_kolumny_z_ dodatki, nazwa_kolumny_z_imie,
  21. nazwa_kolumny_z_adres, nazwa_kolumny_z_telefon) 
  22. VALUES 
  23. ('$id','$nazwa', '$ilosc', '$wielkosc', '$uwagi', '$dodatki', '$imie',
  24.  '$adres', '$telefon')
  25.  ";
  26. $result = mysql_query($query);
  27. if(!$result || !mysql_affected_rows())
  28. {
  29. echo 'Zamówienie nie może zostać przyjęte w tym momencie. Proszę spróbować póĽniej.';
  30. }
  31. }
  32. unset($_SESSION);
  33. header('Location: index.php?page=dodano');
  34. ?>
Cezar708
no to wyjaśnię na przykładzie:

1. tworzysz tabelę:
  1. CREATE TABLE test(
  2. `id` NOT NULL AUTO_INCREMENT PRIMARY KEY,
  3. `col1` varchar(10) NOT NULL DEFAULT "test",
  4. `col2` varchar(10)
  5. )

czyli tabelę z trzema kolumnami

2. wrzucanie danych
przykład 1. Wrzucanie do wszystkich kolumn
  1. INSERT INTO test (id, col1, col2 ) VALUES ( '100', 'test1', 'testtest1' )

przykład 2. wrzucanie tylko do części kolumn (tu tylko do col2):
  1. INSERT INTO test ( col2 ) VALUES ( 'testtest2' )

przykład 2. wrzucanie tylko do części kolumn (tu tylko do col1):
  1. INSERT INTO test ( col1 ) VALUES ( 'test3' )


3. sprawdzenie co znajduje się w bazie danych:
  1. SELECT * FROM test

Kod
id  | col1  | col2
-----------------------
100 | test1 | testtest1 --> bo wrzuciles wartosci do wszyskich kolumn
1   | test  | testtest2  --> bo wrzuciles wartosci tylko do col3, a col1 i id system sam wypelnil
2   | test3 | NULL  --> bo wrzuciles do col1 a id system sam wypelnil, col3 zostala ominieta bo nie ma default
FliSs_tCv
Ok udało mi się wpisać te dane do bazy teraz tylko mam problem z tym, że z jednego zamówienia chciałbym mieć wszystko w jednym id bo teraz mam tak że mi np pizze i danie rozdziela na 2 wpisy do bazy jak temu zaradzić ?

To ten kod:
  1. <?php
  2.  
  3. // Dane do logowania
  4.  
  5. mysql_connect($sql_serwer, $sql_login, $sql_haslo);
  6. mysql_select_db($sql_baza);
  7.  
  8. $imie = $_POST['imie'];
  9. $adres = $_POST['adres'];
  10. $telefon = $_POST['telefon'];
  11.  
  12. foreach ($_SESSION['koszyk'] as $jedzenie => $wartosc){
  13.  foreach ($wartosc as $cecha){
  14. $id = $cecha['id'];
  15. $nazwa = $cecha['nazwa'];
  16. $ilosc = $cecha['ilosc'];
  17. $wielkosc = $cecha['wielkosc'];
  18. $uwagi = $cecha['uwagi'];
  19. $dodatki = $cecha['dodatki'];
  20.  
  21. mysql_query("INSERT INTO produkty_zamowione (id, nazwa, ilosc, wielkosc, uwagi, dodatki, imie, adres, telefon)
  22.  VALUES ('$id', '$nazwa', '$ilosc', '$wielkosc', '$uwagi', '$dodatki', '$imie', '$adres', '$telefon')
  23.  ");
  24.  }
  25. }
  26. unset($_SESSION);
  27. header('Location: index.php?page=dodano');
  28. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.