![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 36 Pomógł: 0 Dołączył: 7.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
Dzień dobry,
Mam małe doświadczenie w pisaniu aplikacji WWW. Mam stronę enter_announcement.php (główna, wprowadzanie ogłoszenia) zawierającą session_start() i stronę summary.php (podsumowanie, też z session_start()). Kiedy użytkownik chce cofnąć się wstecz strzałką w lewo przeglądarki z podsumowania to przechodzi do modyfikacji ogłoszenia (formularz enter_announcement.php wypełniony danymi ogłoszenia). Na zmiennej $_SESSION['full_announcement_no'] przekazywany jest numer ogłoszenia w bazie. Na stronie z podsumowaniem jest też link do strony głównej (żeby móc DODAĆ nowe ogłoszenie): <img src="images/home.png"><a href="java script:goToMain();">Powrót na stronę główn±</a> Nie mogłem zrobić po prostu href="enter_announcement.php" bo wtedy przechodziłoby się do edycji ogłoszenia o numerze $_SESSION['full_announcement_no'] a nie do dodawania nowego. Oto funkcja goToMain(): function goToMain() { document.announcement.action = 'goto_main.php'; document.announcement.submit(); } A oto plik goto_main.php: <?php require_once 'include/functions.inc.php'; session_start(); $_SESSION = array(); session_destroy(); headerLocation('enter_announcement.php'); ?> Jak widać aby przejść do dodawania ogłoszenia a nie modyfikacji, czyszczę zmienną sesji. Nie podoba mi się to rozwiązanie (użycie sztucznego pliku goto_main.php) ale nie wymyśliłem lepszego. Czy macie jakiś lepszy pomysł jak rowiązać przechodzenie do dodawanie ogłoszenia ze strony podsumowania żeby przy cofaniu się wstecz otrzymywać edycję ogłoszenia? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 85 Pomógł: 1 Dołączył: 2.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 36 Pomógł: 0 Dołączył: 7.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
Nie, przy dodawaniu ogłoszenia zmienna $_SESSION['full_announcement_no'] powinna być pusta. Dlatego czyszczę ją w goto_main.php. Numer ogłoszenia jest generowany w transakcji po submicie forumlarza z enter_announcement.php. Musi być tak zrobione, by generować kolejne numery ogłoszeń. Nie mogę generować numeru ogłoszenia w enter_announcement.php przed edycją formularza bo z góry nie wiem czy użytkownik nie zaniecha edycji i numer nie zostanie wykorzystany, co spowodowałoby "dziury" w numeracji, a to u mnie jest niepożądane.
> zrób cos takiego Zmienna $_SESSION['full_announcement_no'] nie może być bo prostu wyzerowana, bo to by spowodowało, że przy cofaniu się ze strony podsumowania otrzymywalibyśmy dodawanie ogłoszenia, a ja chcę edycję istniejącego ogłoszenia, którego numer jest zapisany na $_SESSION['full_announcement_no']. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 42 Pomógł: 8 Dołączył: 30.04.2008 Ostrzeżenie: (0%) ![]() ![]() |
Jeśli dobrze zrozumiałem, to powinno rozwiązać Twój problem:
w pliku enter_announcement.php:
I jeszcze jedna kwestia na marginesie, z tego co opisałeś domyślam się, że masz straszną dziurę w skrypcie. Nie wiem w jaki sposób znasz numer ogłoszenia przed dodaniem, a już po wczytaniu strony, ale mam nadzieję, że wziąłeś pod uwagę to, że kilka osób na raz może dodawać ogłoszenie? ![]() Ten post edytował norbis 18.10.2010, 06:50:13 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 36 Pomógł: 0 Dołączył: 7.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
Dokładniej rozwiązanie działa tak, że strona enter_announcement.php na submicie ma stronę submit_announcement.php, która na koniec dopiero wywołuje summary.php.
Oto szkic submit_announcement.php: START TRANSACTION LOCK TABLES announcements WRITE if (empty($_POST['announcement_no'])) { // nowe ogłoszenie $announcement = new Announcement; $announcement->initializeWithPOST(); INSERT INTO announcements z nowym numerem MAX+1 } else { // modyfikacja ogłoszenia $announcement = new Announcement; $announcement->initializeWithPOST(); $announcement->initializeWithNumber($_POST['announcement_no'])); UPDATE announcements } UNLOCK TABLES COMMIT header('Location: summary.php'); |
|
|
![]()
Post
#6
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Po co robisz lokowanie tabelo przy transakcji??
-------------------- |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 36 Pomógł: 0 Dołączył: 7.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
ze względu na współbieżność (wielu użytkowników) przy generowaniu numeru kolejnego ogłoszenia
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
A dlaczego nie korzystasz po prostu z autoincrement?
-------------------- |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 36 Pomógł: 0 Dołączył: 7.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
Bo numer ogłoszenia składa się z trzech części: rok, miesiąc, nr kolejny w miesiącu.
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 2 958 Pomógł: 574 Dołączył: 23.09.2008 Skąd: wiesz, że tu jestem? Ostrzeżenie: (0%) ![]() ![]() |
A zamiast babrać się w dodawanie miesiącÓw lecisz po ID [co jest nie tylko wygodne ale i wydajniejsze]
ps. nie możesz wstawić dodatkowego pola do session? Jeżeli ktoś rozpoczął edycje wstawiasz $_SESSION['edit_start'] = true; a przy zapisie sprawdzasz if(!$_SESSION['edit_start']) { //edytuj } else { //dodaj } Ten post edytował CuteOne 12.11.2010, 08:45:02 |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 36 Pomógł: 0 Dołączył: 7.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
Przyznam jednak, że nie jestem pewien czy (pozostając przy mojej metodzie generowania numerów) lokowanie tabel wewnątrz transakcji jest potrzebne. Czy ktoś wie?
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 14:00 |