![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 14 Pomógł: 0 Dołączył: 21.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Chciałbym poprosić forumowiczów o pomoc w dobrze rozwiązań i algorytmów. Potrzebuję zrobić taką jedna rzecz dla kolegów z roboty. Sprawa wygląda tak że serwisanci wracają z roboty u klienta, wsiadają na program, piszą co robili, jakie materiały zużyli, ile itd. Pracują na wersji którą napisałem jakiś czas temu, ale teraz trzeba ją ulepszyć, a w ogóle napisać na nowo bo coś się kaszani, a tamta była pisana na żywca, mało przemyślana i w ogóle teraz chcę mieć 'wypasa' ![]() Interfejs jest intuicyjny na tyle, że każdy potrafi z niego korzystać. Jednak dla mnie jest kilka spraw teraz do rozstrzygnięcia i chciałem zapytać Was - bardziej doświadczonych programistów jak wszystko razem poskładać i jakie problemy mogą nastąpić w pracach itp. Wszystko chodzi w oparciu o MySQL-a. Teraz tak... pierwszy problem z którym się spotkałem, to taki że podczas tworzenia nowego takiego zgłoszenia, jeśli w nazwie występują polskie znaki tudzież znaki specjalne typu "&" to całość się krzaczy, bo ... GET - o tym wcześniej nie pomyślałem. Już teraz takiej ilości danych nie chcę przepuszczać w GET-cie, i zdecydowałem się na POST-a. Generalnie zastanawiałem się jeszcze nad mechanizmem sesji, czyli przy każdym otwarciu nowego zlecenia jest generowany nowy identyfikator sesji przekazywany GET-em. Tylko jak teraz połączyć formularze żeby jedna cześć przekazywana była POST-em a identyfikator GET-em - tutaj mechanizm sesji, right ? Formularz wygląda mniej więcej tak że wybiera się z listy po prostu materiały, po wyborze materiału strona się przeładowuje z listą cech dla tych materiałów i potem wypełnia się opcjonalnie opis, ilość i jednostkę miary. Klika się dodaj i leci do bazy. Strona się przeładowuje do "pierwotnego stanu" i już na ekranie widać od razu to co dodaliśmy. Jeśli całość przekażę POST-em to nie będę widział nic, bo najważniejsza zmienna identyfikująca konkretnie ten "dokument" zniknie. Drugi problem jest taki, że musi to być uwierzytelnianie. Teraz chodzi to w oparciu o plik .htaccess a już chciałem zrobić uwierzytelnianie poprzez PHP, ale... teraz problem jest taki. Jeśli wezmę użyję sesji do dodawania nowych dokumentów, to jak użyć dwóch sesji na raz, bo użytkownik też będzie musiał być uwierzytelniony poprzez sesję. Może jakieś inne pomysły ? Na razie tylko tyle z problemów które mnie spotkają w niedalekiej przyszłości ![]() Z góry dziękuję za każdą pomoc ![]() |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 873 Pomógł: 152 Dołączył: 9.04.2006 Skąd: Berlin Ostrzeżenie: (0%) ![]() ![]() |
Jak dwie sesje?
$_SESSION['userid'] = 1; $_SESSION['dokument'] = 'nie rozumiem'; Co do posta? Nie rozumiem troche, ale działać to by miało tak. Masz główną stronę i tam formularz a pod nim co już ktoś dziś dodał. Wpisujesz dane do formularza, gość klika dodaj, dane do bazy lecą, a ty na stronie glównej je normalnie pobierasz (SELECT * FROM) :] -------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 1 116 Pomógł: 119 Dołączył: 10.05.2005 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Myśl, że kolega JarekG trochę nie rozumie mechanizmu sesji.
Otóż nie jest Ci w tym przypadku potrzebne przekazywanie identyfikatora sesji w url, ba! nawet nie jest to wskazane (bezpieczeństwo). każdy plik wykorzystujący mechanizm sesji musi być rozpoczęty funkcją: session_start(); dopiero po użyciu tej funkcji możesz używać zmiennych sessyjnych ($_SESSION), zmienna ta jest zwykłą tablicą, która ma tę właściwość, że jest widoczna w każdym miejscu Twojego systemu (oczywiscie wszędzie po użyciu session_start()). Dlatego łatwo możesz zrobić tak:
jako, że $_SESSION jest tablicą możesz normalnie z niej korzystać jak z normalnej tablicy i zapisywać do niej wszystko co zapragniesz, na przykład wszelkie informacje o dodawanych dokumentach:
a następnie wszelkie dane z sesji możesz wpisywać do bazy danych (jeśli $_POST Ci nie wystarczy), mniej więcej tak:
oczywiście tu Ci tylko naświetliłem o co mniej więcej chodzi (na pewno nie musisz używać dwóch sesji), więcej o sesjach poszukaj w google lub na tym forum. Pozdrawiam Cezar708 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 14 Pomógł: 0 Dołączył: 21.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
Super. Dziękuję za rozświetlenie mi tego czarnego obszaru
![]() ![]() ![]() Fakt że nie do końca rozumiałem mechanizm sesji, nie wpadłem na to żeby zastosować w sesji tablice - tu moje niedoświadczenie - i fakt że na internecie przykładów jakiś jak dla mnie fajnych, niestety nie znalazłem ![]() ![]() Idąc dalej... Mniej więcej jasne jest dla mnie to co napisaliście ale... Jeśli mam formularz dodawania jakiś pozycji do bazy, to powiedzmy wypełniam go sobie, korzystając z sesji, dodaję jeden rekord do bazy i teraz muszę jakoś wyczyścić pamięć elementów $_SESSION['dokument']['elementy'], ponieważ mechanizm sesji mi je zapamięta chyba, prawda ? Czy po wpisaniu wartości do pól dopisze zupełnie inne - nowe rekordy do bazy ? Jeśli będę chciał dodać zupełnie nowy dokument, to będę musiał również mieć jakiś unikalny identyfikator którym ten dokument będzie się identyfikował. Wymyśliłem sobie żeby to była wartość właśnie session_id(); ale generalnie z tej sytuacji która przedstawiliście mi tutaj może to być poprostu numer id dokumentu i wtedy session_id(); nie będzie wartością zapisywaną w bazie. Dodatkowo chciałem wystartować na głęboką wodę i użyć elementów javy script żeby przy pomocy jakby jednej sesji stworzyć cały dokument do dodania poprzez dynamiczne dodawanie poszczególnych edytowalnych elementów, znalazłem sobie nawet skrypt do tego, ale niestety póki co za wysoko mierzę ![]() ![]() Nie wiem czy w ogóle dobrze myślę ale tak czy inaczej dziękuję za naprowadzanie na dobrą drogę ![]() |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 1 116 Pomógł: 119 Dołączył: 10.05.2005 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
tak, zmienne w sesji zawsze będą, (oczywiście w szerszym sensie), a do usuwania zmiennych z sesji służy po prostu funkcja: unset(), za jej pomocą usuniesz wszelkie nipotrzebne dane z sesji.
a jeśli chodzi o javaScript proponuję abyś poczytał sobie na temat ajaxa. Mogę Ci polecić advAJAX. Myślę, że do Twoich potrzeb będzie idealny. Pozdrawiam Cezar708 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 14 Pomógł: 0 Dołączył: 21.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
tak, zmienne w sesji zawsze będą, (oczywiście w szerszym sensie), a do usuwania zmiennych z sesji służy po prostu funkcja: unset(), za jej pomocą usuniesz wszelkie nipotrzebne dane z sesji. Czyli generalnie jeśli zrobię sobie dodawanie danych do bazy to najpierw muszę zrobić insert into... a zaraz po nim unset('zmienna1)... itd. ? a jeśli chodzi o javaScript proponuję abyś poczytał sobie na temat ajaxa. Mogę Ci polecić advAJAX. Myślę, że do Twoich potrzeb będzie idealny. Pozdrawiam Cezar708 Fajne i ciekawe ![]() ![]() A co do moich zastosowań to ten skrypt który miałem to byłby ok, tylko problem pojawia się w momencie dodawania do bazy, ponieważ wszystkie pola w sensie ze ich tag NAME musi być taki sam, więc jak dodać wszystko na raz ? Hm... foreach ? Ten post edytował JarekG 29.04.2008, 09:25:34 |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 1 116 Pomógł: 119 Dołączył: 10.05.2005 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Czyli generalnie jeśli zrobię sobie dodawanie danych do bazy to najpierw muszę zrobić insert into... a zaraz po nim unset('zmienna1)... itd. ? lub zamiast usuwać możesz ewentualnie nadpisywać nowymi wartościami Fajne i ciekawe ![]() no niekoniecznie... perl również jest językiem, który ewentualnie byłby wykonywany po stronie serwera (podobnie jak PHP, popraw mnie jak się mylę) a do komunikacji z tym serwerem może być użyty również ajax, bo on jest oparty o JavaScript i działa po stronie przeglądarki internetowej Hm... foreach ? dokładnie.. foreach byłby idealny, oczywiście musisz inaczej zapisywać dane do bazy, coś na styl:
a następnie wrzucając do bazy danych:
Ten post edytował Cezar708 29.04.2008, 15:25:31 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 14 Pomógł: 0 Dołączył: 21.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
Dziękuję Ci za pomoc
![]() W razie pytań będę je po prostu zadawał ![]() Witam ![]() W końcu przysiadłem do tego co miałem napisać i odświeżam swój temat. Już na samym początku pracy z sesjami [chyba jednak nie do końca to rozumiem ![]() Otóż mam taką sytuację, że podczas tworzenia nowego dokumentu chciałbym żeby była tworzona sesja i w niej zapisywane wartości o identyfikatorze sesji, oraz nazwie wybranej z listy "SELECT". Na początek tworzę sesję oraz generuję identyfikator.
Teraz łączę się z bazą danych, wyciągam informację i chcę je przekazać dalej, zapisując w zmiennej $_SESSION['nazwa_firmy'] informację z tego co wyciągnę z SELECT-a.
No i teraz pobierana jest zmienna z select name i ... no właśnie nie mam pomysłu jak to wymyślić żeby było tak jak chcę, a chcę tak, że jak wybiorę sobie z listy pozycję to ma ona być zapisana w zmiennej [najlepiej] $_SESSION['firma']['id_firmy'] oraz $_SESSION['firma']['nazwa_firmy']. Dokument z form action to dokument który ma za zadanie wyświetlić dane z sesji, i wyświetla... ale cały czas to samo :/, bez względu na to co wybiorę z listy. Proszę o pomoc. Dziękuję. |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 83 Pomógł: 3 Dołączył: 21.04.2007 Skąd: Sosnowiec Ostrzeżenie: (0%) ![]() ![]() |
Tak trochę an offtopie ale jako ciekawostka dla młodych.
ogólnie zasada działania sesji polega na tym że dane są zapisywane gdzieś przeważnie do pliku o nie znanym rozszerzeniu na twoim serwerku. Lecz większość firm hostingowych blokuje dostęp do nich. Przykładowym plikiem będzie lang|s:2:"pl";id|s:1:"1";login|s:6:"costam";haslo|s:3:"lul"; Przyjmijmy że wyślemy $_SESSION['lang'] = 'pl'; i zostaje zapisane: lang|s:2:"pl"; Pewnie wielu z was zastanawia się dlaczego to jest tak zbudowane, a więc lang - nazwa elementu tablicy | - separator oddzielający dane o nazwie elementu tablicy ($_SESSION) od przypisanej wartości s:2 - oznacza że będzie składać się z 2 liter : - a po tym treść treść "..." - w miejsce kropek jest wpisane wartość przypisana. Napisałem to przy okazji by młodzi szybciej zrozumieli jak to działa Ten post edytował Landon 9.06.2008, 20:35:27 -------------------- ![]() |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 28.06.2025 - 02:14 |