Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wybór opcji w formularzu z zapisem do bazy
Forum PHP.pl > Forum > Przedszkole
andrzej11
Witam, sprawa wygląda następująco..
Mam do wyboru trzy opcje - jedna musi być koniecznie zaznaczona ponieważ jest to potwierdzenie na przesyłanie ofert handlowych, a dwie pozostałe są opcjonalne i maksymalnie tylko jedna z nich może być zaznaczona.
Mam zrobione zapisywanie w sesji zaznaczeń oraz adresu email wpisanego w formularzu, tak aby w razie niepowodzenia nie było potrzeby wpisywania drugi raz adresu czy zaznaczania ponownie wyboru (bo wszystko jest sprawdzane i jak coś co jest wymagane nie jest spełnione wyrzuca błąd, że trzeba poprawić, a jak jest wszystko ok to dodaje do bazy danych).
Moim problemem jest to, że jak właśnie zaznaczę jedną z tych dwóch opcjonalnych opcji, a np. nie wypełnię pola z adresem email - czyli wyrzuci mi błąd to mimo, że zaznaczyłem opcję drugą, przeskakuje mi na pierwszą. Opcje korzystają z tej samej sesji, dzięki temu mogę wybrać maksymalnie jedną z nich bo wybierając drugą przełącza mi się z tej pierwszej. Podejrzewam, że to właśnie powoduje ten problem, ale nie wiem jak go rozwiązać...

W chwili obecnej w bazie zapisuje się tylko adres email, a chciałbym jeszcze osiągnąć zapisywanie opcji zgodnie z tą która została wybrana.

Kończąc dodam tylko, że moja znajomość php jest jeszcze (mam nadzieję biggrin.gif) nie zbyt wielka, nie potrafiłem sobie z tym sam poradzić przez kilka h dlatego postanowiłem poprosić o pomoc smile.gif

Formularz:
  1. <label>
  2. <input type="radio" name="zgoda" <?php
  3. if (isset($_SESSION['zapamietaj_zgode']))
  4. {
  5. echo "checked";
  6. unset($_SESSION['zapamietaj_zgode']);
  7. }
  8. ?>/> Zgadzam się na przesłanie ofert handlowych na podany e-mail
  9. </label>
  10. <br/>
  11. <label>
  12. <input type="radio" name="opcja" <?php
  13. if (isset($_SESSION['zapamietaj_opcja']))
  14. {
  15. echo "checked";
  16. unset($_SESSION['zapamietaj_opcja']);
  17. }
  18. ?>/> Reprezentuję skład budowlany
  19. </label>
  20. <br/>
  21. <label>
  22. <input type="radio" name="opcja" <?php
  23. if (isset($_SESSION['zapamietaj_opcja']))
  24. {
  25. echo "checked";
  26. unset($_SESSION['zapamietaj_opcja']);
  27. }
  28. ?>/> Buduję dom
  29. </label>


Akceptacja zgody i wybór opcji, oraz zapamiętanie ich:
  1. //Akceptacja zgody
  2. if (!isset($_POST['zgoda'])) {
  3. $wszystko_OK = false;
  4. $_SESSION['info_zgoda'] = "Potwierdź wyrażenie zgody na przesłanie ofert handlowych.";
  5. }
  6. if (!isset($_POST['opcja'])) {
  7. $wszystko_OK = false;
  8. $_SESSION['info_opcja'] = "Wybierz opcję.";
  9. }
  10. //Zapamiętanie wprowadzonych danych
  11. $_SESSION['zapamietaj_email'] = $email;
  12. if (isset($_POST['zgoda'])) $_SESSION['zapamietaj_zgode'] = true;
  13. if (isset($_POST['opcja'])) $_SESSION['zapamietaj_opcja'] = false;


Dodawanie emaila do bazy:
  1. if ($wszystko_OK==true)
  2. {
  3. //Wszystko ok, dodanie adresu email do bazy
  4. if ($polaczenie->query("INSERT INTO adresy VALUES (NULL, '$email', '$opcja')"))
  5. {
  6. $_SESSION['info_poprawne']="Dziękujemy za skorzystanie z naszej oferty!";
  7. }
nospor
if (isset($_POST['zgoda'])) $_SESSION['zapamietaj_zgode'] = true;
if (isset($_POST['opcja'])) $_SESSION['zapamietaj_opcja'] = false;
Naprawde nie widzisz ze tu jest jedno wielkie logiczne WTF?

przenosze
andrzej11
Wiem, że to nie powinno tak być, jednak też nie mam pojęcia jak to poprawnie zapisać...
nospor
opcja masz ustawic na false w dwoch przypadkach:
- nie byla wybrana
- jest wybrana razem ze zgoda
W kazdym innym wypadku (czyli w jednym) ma byc ustawione na true.

Gdzie tu problem?
andrzej11
Okej, a w jaki sposób mogę zrobić zapisywanie opcji w bazie danych zgodnie z tą która została wybrana?
nospor
Tak samo jak kazda inna, ktora juz zapisujesz do bazy a masz ja w zmiennej?
andrzej11
Tak, mam zmienną
  1. $opcja = $_POST['opcja'];

tylko nie wiem jak zrobić żeby zapisywało zgodnie z wyborem, bo na chwilę obecną do kolumny typu text dodawane jest "on".
nospor
A co bys chcial by bylo wpisywane? Zastosowales zestaw IFow, ktory ci napisalem? Nie? No samo sie nie zrobi.
andrzej11
Nie potrafię tego zrobić...
nospor
To czemu wczesniej napisales OKEJ?


Pytam wiec po raz kolejny, ktorej z tych rzeczy nie potrafisz zrobic:
- nie byla wybrana
- jest wybrana razem ze zgoda

Nie umiesz stwierdzic czy opcja nie byla wybrana? Przeciez juz to robiles: !isset
Nie umiesz stwierdzic czy byla wybrana razem ze zgoda? No to robisz isset(opcja) && issset(zgoda)

To sa proste warunki logiczne. sprobuj.
andrzej11
Jeśli tak to czy opcja nie była wybrana mam w tym kodzie:
  1. if (!isset($_POST['opcja'])) {
  2. $wszystko_OK = false;
  3. $_SESSION['info_opcja'] = "Reprezentujesz skład budowlany czy budujesz dom?";
  4. }

czy muszę to powtórzyć?

Jest wybrana razem ze zgodą:
  1. if (isset($_POST['opcja'])) && (isset($_SESSION['zapamietaj_opcja'])) = false;

coś jest pewnie źle bo wywala stronę.. sad.gif
viking
Składnia if: if (warunek) { kod }
U ciebie if (warunek) = false
andrzej11
Nie wiem czy na pewno się rozumiemy.. Przedstawię to na gifie

Jak widać, zaznaczam opcję "Buduję dom" klikam "Wyślij" ale skrypt się nie wykona bo nie jest potwierdzona zgoda / nie jest wpisany adres email i zamiast zapamiętać zaznaczenie opcji "Buduję dom" przeskakuje ciągle na "Reprezentuję skład budowlany". Zaznaczając "Reprezentuję skład budowlany" zaznaczenie pozostaje na tej samej opcji, w sensie nie działa w drugą stronę...
nospor
Wszyscy cie doskonale rozumieja. To ty nie rozumiesz co sie do ciebie pisze...

Dobra, olac to, skoro masz problem z banalnym IF. Moze zacznij od zrobienia poprawnie html

Skoro pierwsze moze byc zaznaczone a nie musi to ma to byc CHECKBOX.
Pozycje 2 i 3 maja byc RADIO ale o tym samym NAME. Wowczas nie bedzie mozliwosci ze ktos zaznaczy oba. Tak to sie robi poprany html, wowczas ci odpadna nieszczesne IF ktorych nei rozumiesz
andrzej11
1.) Nigdzie nie pisałem, że pierwsze może być zaznaczone, a nie musi tylko pisałem, że własnie MUSI być zaznaczone bo jak nie będzie zaznaczone to skrypt się nie wykona, zacytuję siebie z pierwszego postu:
Cytat
Mam do wyboru trzy opcje - jedna musi być koniecznie zaznaczona ponieważ jest to potwierdzenie na przesyłanie ofert handlowych

i w sumie nie widzę większej różnicy czy jest to checkbox czy radio, ale skoro żeby było poprawnie, okej - niech będzie to checkbox...

2). W pierwszym poście podałem elementy kodu i jak widać oba inputy są typu radio oraz mają ten sam name od samego początku więc nie rozumiem o czym piszesz... (?)
  1. <label>
  2. <input type="radio" name="opcja" <?php
  3. if (isset($_SESSION['zapamietaj_opcja']))
  4. {
  5. echo "checked";
  6. unset($_SESSION['zapamietaj_opcja']);
  7. }
  8. ?>/> Reprezentuję skład budowlany
  9. </label>
  10. <br/>
  11. <label>
  12. <input type="radio" name="opcja" <?php
  13. if (isset($_SESSION['zapamietaj_opcja']))
  14. {
  15. echo "checked";
  16. unset($_SESSION['zapamietaj_opcja']);
  17. }
  18. ?>/> Buduję dom
  19. </label>
nospor
Dalbym se reke czyjas uciac ze byly rozne. Widocznie mi sie pomylilo.

Tak, ty wymagasz pierwszej opcji, ale user ma prawo jej nie zaznaczyc wiec powinien moc prawo ja odznaczyc a ze ty go nie przepuscisz wowczas dalej to skolei twoje prawo.

Skoro dwa ostatnie maja te same nazwe, to musisz dodac dla nich VALUE - dla kazdego inne. Wowczas po przeslanym VALUE bedziesz wiedzial ktore bedzie wcisniete. I bedzie wcisniete tylko jedno. NIe bedzie opcji, ze beda wcisniete oba naraz
A co wciesnieto to masz sprawdzac na podstawie VALUE a nie na podstawie czy bylo cos wcisniete czy nie
andrzej11
Value już później dałem próbując zrobić zapisywanie treści zaznaczonych inputów do bazy. Wygląda to tak:
  1. <label>
  2. <input type="radio" name="opcja" value="Jestem sprzedawcą"<?php
  3. if (isset($_SESSION['zapamietaj_opcja']))
  4. {
  5. echo "checked";
  6. unset($_SESSION['zapamietaj_opcja']);
  7. }
  8. ?> /> Jestem sprzedawcą
  9. </label>
  10. <br/>
  11. <label>
  12. <input type="radio" name="opcja" value="Buduję dom" <?php
  13. if (isset($_SESSION['zapamietaj_opcja']))
  14. {
  15. echo "checked";
  16. unset($_SESSION['zapamietaj_opcja']);
  17. }
  18. ?> /> Buduję dom
  19. </label>

czy mogą być takie wartości? No i jak zrobić to sprawdzenie na podstawie wartości biggrin.gif
nospor
value ma byc 1,2 a nie jakies teksty i to jeszcze z polskimi literami.
Jak juz bardzo chcesz teksty to nadaj jakis wyraz

No jak sprawdzic wartosci?
....

if (isset($_POST['opcja']) && $_POST['opcja'] == '2')
$opcja = 2;
else
$opcja = 1;

przy zalozeniu ze opcja ostatnia ma wartosc 2 a przed nia wartosc 1
andrzej11
Jak tu dodać zapamiętanie zaznaczonej opcji?
nospor
Moze tak samo jak zapamietywales wczesniej?

Poza tym jesli to w ramach jednego request to naprawde nie musisz do tego uzywac sesji. Mozesz zmienna $opcja wykorzystac rownie dobrze
andrzej11
Wszystko ciągle przeskakuje, a ja już nie mam na to siły. Opcje będą bez zapamiętywania zaznaczenia i tyle...
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.