Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> Wybór opcji w formularzu z zapisem do bazy
andrzej11
post 5.01.2018, 14:38:56
Post #1





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 29.12.2017

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


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. }


Ten post edytował andrzej11 5.01.2018, 14:47:38
Go to the top of the page
+Quote Post
nospor
post 5.01.2018, 16:50:39
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
andrzej11
post 8.01.2018, 16:28:30
Post #3





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 29.12.2017

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


Wiem, że to nie powinno tak być, jednak też nie mam pojęcia jak to poprawnie zapisać...
Go to the top of the page
+Quote Post
nospor
post 8.01.2018, 16:36:15
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
andrzej11
post 9.01.2018, 13:09:41
Post #5





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 29.12.2017

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


Okej, a w jaki sposób mogę zrobić zapisywanie opcji w bazie danych zgodnie z tą która została wybrana?
Go to the top of the page
+Quote Post
nospor
post 9.01.2018, 13:15:46
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Tak samo jak kazda inna, ktora juz zapisujesz do bazy a masz ja w zmiennej?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
andrzej11
post 9.01.2018, 13:35:53
Post #7





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 29.12.2017

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


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".
Go to the top of the page
+Quote Post
nospor
post 9.01.2018, 14:51:00
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




A co bys chcial by bylo wpisywane? Zastosowales zestaw IFow, ktory ci napisalem? Nie? No samo sie nie zrobi.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
andrzej11
post 9.01.2018, 15:13:21
Post #9





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 29.12.2017

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


Nie potrafię tego zrobić...
Go to the top of the page
+Quote Post
nospor
post 9.01.2018, 15:17:39
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
andrzej11
post 10.01.2018, 08:28:52
Post #11





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 29.12.2017

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


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
Go to the top of the page
+Quote Post
viking
post 10.01.2018, 08:30:57
Post #12





Grupa: Zarejestrowani
Postów: 6 378
Pomógł: 1116
Dołączył: 30.08.2006

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


Składnia if: if (warunek) { kod }
U ciebie if (warunek) = false


--------------------
Go to the top of the page
+Quote Post
andrzej11
post 10.01.2018, 09:19:02
Post #13





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 29.12.2017

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


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ę...
Go to the top of the page
+Quote Post
nospor
post 10.01.2018, 09:52:08
Post #14





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
andrzej11
post 10.01.2018, 10:14:51
Post #15





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 29.12.2017

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


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>


Ten post edytował andrzej11 10.01.2018, 10:16:48
Go to the top of the page
+Quote Post
nospor
post 10.01.2018, 10:20:58
Post #16





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
andrzej11
post 10.01.2018, 10:37:00
Post #17





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 29.12.2017

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


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
Go to the top of the page
+Quote Post
nospor
post 10.01.2018, 11:01:38
Post #18





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
andrzej11
post 10.01.2018, 11:40:19
Post #19





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 29.12.2017

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


Jak tu dodać zapamiętanie zaznaczonej opcji?
Go to the top of the page
+Quote Post
nospor
post 10.01.2018, 11:55:01
Post #20





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

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 Wersja Lo-Fi Aktualny czas: 24.07.2025 - 15:38