Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript][PHP] Dwie wartości w input radio
plaxton
post 5.03.2018, 16:59:40
Post #1





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 5.03.2018

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


Jak umieścić dwie wartości w jednym Input radio i użyć ich do formularza kontaktowego ?

Znalazłem takie rozwiązanie : https://laravel.io/forum/03-09-2014-2-value...or-radio-button
Ale jak skonstruować to w pliku PHP i jak zrobić walidacje takiego radio w javascript.

mam coś takiego:
  1. <input id="radio3" name="thefields" type="radio" value="show_id1,title_id1">
  2. <input id="radio4" name="thefields" type="radio" value="show_id2,title_id2">


Chwiałbym aby pojawiło się w value
poczta, przelew
poczta, pobranie
I aby php pobrał dwie wartości jako $dostawa $platnosc

Bardzo proszę o pomoc.


  1. if (!defined("PHP_EOL")) define("PHP_EOL", "\r\n");
  2.  
  3. $imie = $_POST['imie'];
  4. $nazwisko = $_POST['nazwisko'];
  5. $email = $_POST['email'];
  6. $phone = $_POST['phone'];
  7. $uwagi = $_POST['uwagi'];
  8. $adres = $_POST['adres'];
  9. $kodpocztowy = $_POST['kodpocztowy'];
  10. $miasto = $_POST['miasto'];
  11. $paczkomat = $_POST['paczkomat'];
  12. $kod = $_POST['kod'];
  13.  
  14. $radio = $_POST['radio'];
  15.  
  16.  
  17. $subject = $_POST['subject'];
  18. $subject2 = $_POST['subject2'];
  19. $przysiegle = $_POST['przysiegle'];
  20. $odbior = $_POST['odbior'];
  21.  
  22.  
  23.  
  24. if(trim($imie) == '') {
  25. echo '<div class="alert alert-danger">Podaj swoje imie.</div>';
  26. exit();
  27. } else if(trim($nazwisko) == '') {
  28. echo '<div class="alert alert-danger">Podaj swoje nazwisko.</div>';
  29. exit();
  30. } else if(trim($adres) == '') {
  31. echo '<div class="alert alert-danger">Podaj adres</div>';
  32. exit();
  33. } else if(trim($kodpocztowy) == '') {
  34. echo '<div class="alert alert-danger">Podaj kodpocztowy</div>';
  35. exit();
  36. } else if(trim($miasto) == '') {
  37. echo '<div class="alert alert-danger">Podaj miasto</div>';
  38. exit();
  39. } else if(trim($paczkomat) == '') {
  40. echo '<div class="alert alert-danger">Podaj paczkomat</div>';
  41. exit();
  42. } else if(trim($email) == '') {
  43. echo '<div class="alert alert-danger">Podaj prosze poprawny adres email.</div>';
  44. exit();
  45. } else if(trim($phone) == '') {
  46. echo '<div class="alert alert-danger">Podaj prosze poprawny numer telefonu.</div>';
  47. exit();
  48. } else if(!is_numeric($phone)) {
  49. echo '<div class="alert alert-danger">Podaj swój numer telefonu bez spacji i mysliników.</div>';
  50. exit();
  51. } else if(!isEmail($email)) {
  52. echo '<div class="alert alert-danger">Podales bledny adres email, spróbuj ponownie.</div>';
  53. exit();
  54. }
  55. if(trim($subject) == '') {
  56. echo '<div class="alert alert-danger">Podaj oryginalny jezyk tlumaczonego dokumentu.</div>';
  57. exit();
  58. }
  59. if(trim($subject2) == '') {
  60. echo '<div class="alert alert-danger">Podaj na jaki jezyk ma byc przetlumaczony dokument.</div>';
  61. exit();
  62. }
  63.  
  64. $uwagi = stripslashes($uwagi);
  65. }
  66.  



Jak dokonać waidacji inputu radio , ma być zaznaczony przynajmniej jeden

  1. jQuery(document).ready(function(){
  2.  
  3. $('#contactform').submit(function(){
  4.  
  5. var action = $(this).attr('action');
  6.  
  7. $("#message").slideUp(750,function() {
  8. $('#message').hide();
  9.  
  10. $('#submit')
  11. .after('<img src="assets/ajax-loader.gif" class="loader" />')
  12. .attr('disabled','disabled');
  13.  
  14. $.post(action, {
  15. imie: $('#imie').val(),
  16. nazwisko: $('#nazwisko').val(),
  17. email: $('#email').val(),
  18. uwagi: $('#uwagi').val(),
  19. phone: $('#phone').val(),
  20. kod: $('#kod').val(),
  21. adres : $('#adres').val(),
  22. kodpocztowy: $('#kodpocztowy').val(),
  23. miasto: $('#miasto').val(),
  24. paczkomat: $('#paczkomat').val(),
  25. radio: $('#radio').val(),
  26.  
  27. subject: $('#subject').val(),
  28. subject2: $('#subject2').val(),
  29. przysiegle: $('#przysiegle').val(),
  30. odbior: $('#odbior').val(),
  31.  
  32. verify: $('#verify').val()
  33. },
  34. function(data){
  35. document.getElementById('message').innerHTML = data;
  36. $('#message').slideDown('slow');
  37. $('#contactform img.loader').fadeOut('slow',function(){$(this).remove()});
  38. $('#submit').removeAttr('disabled');
  39. if(data.match('success') != null) $('#contactform').slideUp('slow');
  40.  
  41. }
  42. );
  43.  
  44. });
  45.  
  46. return false;
  47.  
  48. });
  49.  
  50. });
Go to the top of the page
+Quote Post
trueblue
post 5.03.2018, 19:10:37
Post #2





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


A $dostawa może mieć inną wartość niż "poczta"? Jeśli nie, to nie ma sensu, aby przesyłać tam dwie wartości, bo i tak wiesz, że pierwsza to właśnie "poczta".
Jeśli natomiast może, to konstrukcja powinna być inna.
Nadrzędną grupę powinny stanowić przyciski radio z typami dostawy, a w ramach każdego przycisku dostawy typy płatności:
- poczta
-- przelew
-- pobranie
- kurier
-- przelew
-- pobranie
- odbiór osobisty


--------------------
Go to the top of the page
+Quote Post
plaxton
post 5.03.2018, 19:31:58
Post #3





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 5.03.2018

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


Dokładnie chce zrobić 6 przycisków jednokrotnego wyboru w ramach jednej grupy:
- przelew poczta
- przelew paczkomat
- przelew kurier
- pobranie poczta
- pobranie paczkomat
- pobranie kurier

- $platnosc / $dostawca

Klient wybiera jedne z tych sześciu ale ja chce pobierać osobne dane jako $platnosc i $dostawca


Go to the top of the page
+Quote Post
Neutral
post 5.03.2018, 19:56:18
Post #4





Grupa: Zarejestrowani
Postów: 286
Pomógł: 46
Dołączył: 10.01.2016

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


  1. <body style="background:grey">
  2.  
  3. <form method="get" action="">
  4.  
  5. POST OFFICE: <input type="radio" value="payment" name="pay[]" />
  6. <input type="hidden" value="provider" name="pay[]" />
  7.  
  8. <input type="submit" />
  9. </form>
  10.  
  11. <?php
  12. //print_r($_GET['pay']);
  13.  
  14. $payment = $_GET['pay'][0];
  15. $provider = $_GET['pay'][1];
  16.  
  17. echo $payment;
  18. echo $provider;
  19.  
  20. // of course here some isset and/or empty, etc..
  21. ?>
  22.  
  23. </body>


Chodzi Ci pewnie o:

<input type="hidden" ... />

Czyż nie?
Go to the top of the page
+Quote Post
plaxton
post 5.03.2018, 20:25:54
Post #5





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 5.03.2018

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



Wysłałem PW

O hidden nie pomyślałem bo nigdy się z tym nie spotkałem wcześniej, zobaczę czy zaskoczy :-)


------

W tej chwili mam tak ( oczywiście ich jest w sumie 6 ) :
<input id="radio1" name="radio" type="radio" value="przelew poczta" />
<input id="radio2" name="radio" type="radio" value="pobranie paczkomat" />

To oznacza że będzie mi pobierać wartość value jako $delivery - razem: przelew poczta lub pobranie paczkomat
Natomiast chciałbym aby pobierało dwie wartości osobno z value $payment i $carrier

Nie chce robić grupy radio dla przelew/pobranie a następnie dla przewoźnika: poczta/paczkomat/kurier , bo nie bardzo jest możliwość pokazania wtedy kosztów dostawy. A ponadto nie potrafię robić nadrzędnych inputów dlatego chciałbym umieścić to w jednej grupie.


Go to the top of the page
+Quote Post
Neutral
post 5.03.2018, 20:41:11
Post #6





Grupa: Zarejestrowani
Postów: 286
Pomógł: 46
Dołączył: 10.01.2016

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


Cytat
Dziękuje za zainteresowanie moim pytaniem.
Zajmujesz może PHP komercyjne ?
Próbuje przerobić formularz kontaktowy na formularz zamówienia jak zapewne zauważyłeś ale wiele problemów mi wyskakuje .
Chętnie zleciłbym wykonanie go komuś doświadczonemu aby mieć pewność jego poprawnego działania.

Teoretycznie idzie ku końcowi, więc już coś jest zrobione, pytanie na ile jest to zdatne do użycie bo nie znam się na PHP :-P
Problemem jest właśnie dwie opcje w grupie wyboru formy dostawy oraz to że w zależności od wyboru dostawy powinny zmieniać się pola do wpisywania adresu.

(...)


Zamiast (...), był podany twój numer GG, ale jeśli nie chcesz go udostępniać publicznie, to go "wykropkowałem".
Pisz tutaj w temacie, a nie na PRIVate.

Co do Twojego problemu, to piszesz dla mnie trochę niezrozumiale, więc nie wiem jak podpowiedzieć za bardzo. Czy testowałeś mój kod, co Ci podesłałem POST wyżej, czy nie? Wydaję mi się, że nie, ponieważ Twój problem dotyczy najprawdopodobniej tego, że powinieneś użyć ukrytego pola formularza (<input type="hidden" ... />). Jeśli możesz, to wytłumacz swoją udrękę konkretnie i łopatologicznie.
Go to the top of the page
+Quote Post
plaxton
post 5.03.2018, 21:03:08
Post #7





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 5.03.2018

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


Nie działa niestety, ale być może źle zaimplementowałem kod.

Mój formularz jest zbudowany na metodzie POST , Ty podałeś GET i się gubie/

Czy nie powinno być np:
<input type="radio" value="przelew" name="pay[]" />
<input type="hidden" value="poczta" name="pay[1]" />

Do czego jest [] ?
Go to the top of the page
+Quote Post
Neutral
post 5.03.2018, 21:12:11
Post #8





Grupa: Zarejestrowani
Postów: 286
Pomógł: 46
Dołączył: 10.01.2016

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


"[]" w formularzu w atrybucie name tworzy tablicę, którą można odebrać np. w PHP.

Odkomentuj linię z print_r(...) i zobaczysz, co zostało utworzone. Co do method, to raczej w tym przypadku na razie bez większego znaczenia.

Cytat
name="pay[1]"
- Tym sposobem możesz zmieniać index'y w tablicy.

Poeksperymentuj, a zobaczysz jak to mniej więcej działa.

  1. <pre>
  2. <form method="get" action="">
  3.  
  4. POST OFFICE: <input type="radio" value="payment" name="pay[3]" />
  5. <input type="hidden" value="provider" name="pay[9]" />
  6.  
  7. <input type="submit" />
  8. </form>
  9.  
  10. <?php
  11. print_r($_GET['pay']);
  12. ?>
  13. </pre>


Oczywiście naciśnij na te kółko, a następnie na "submit". Po wysłaniu zobaczysz to:


Array
(
[3] => payment
[9] => provider
)



Ten post edytował Neutral 5.03.2018, 21:17:46
Go to the top of the page
+Quote Post
plaxton
post 6.03.2018, 01:00:07
Post #9





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 5.03.2018

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


Jak powinny zatem być skonstruowane inputy

Przy:
przelew - poczta
przelew - paczkomat
przelew - kurier
pobranie - poczta
pobranie - paczkomat
pobranie - kurier


Czy tak ?

  1. <input type="radio" value="przelew" name="pay[]" />
  2. <input type="hidden" value="poczta" name="pay[]" />
  3.  
  4. <input type="radio" value="przelew" name="pay[]" />
  5. <input type="hidden" value="paczkomat" name="pay[]" />
  6.  
  7. <input type="radio" value="przelew" name="pay[]" />
  8. <input type="hidden" value="kurier" name="pay[]" />
  9.  
  10. <input type="radio" value="pobranie" name="pay[]" />
  11. <input type="hidden" value="poczta" name="pay[]" />
  12.  
  13. <input type="radio" value="pobranie" name="pay[]" />
  14. <input type="hidden" value="paczkomat" name="pay[]" />
  15.  
  16. <input type="radio" value="pobranie" name="pay[]" />
  17. <input type="hidden" value="kurier" name="pay[]" />
  18.  



Czemu sposób taki nie działa:

  1. <input type="radio" name="thefields" value="show_id1,title_id1">
  2. <input type="radio" name="thefields" value="show_id2,title_id2">


  1. $fields = explode(',', Input::get('thefields'));
  2. if (count($fields) == 2)
  3. {
  4. // carry on here...
  5. $show_id = intval($fields[0]);
  6. $title_id = intval($fields[1]);
  7. // etc...
  8. }
  9. else
  10. {
  11. // handle error
  12. }




Ten post edytował plaxton 6.03.2018, 01:18:18
Go to the top of the page
+Quote Post
Neutral
post 6.03.2018, 10:02:24
Post #10





Grupa: Zarejestrowani
Postów: 286
Pomógł: 46
Dołączył: 10.01.2016

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


plaxton:
Cytat
Nie znam się kompletnie PHP i nie wiem tak naprawdę co dalej z tym mam zrobić , nawet ta jeśli metoda działa.

PRZYKŁAD:
Mam pliki zamowienie.html .zamowienie.php i zamowienie.js

Z formularza z html z input radio ma pobrać dwie osobne wartości :
<input id="radio1" name="radio" type="radio" value="przelew poczta" />
<input id="radio2" name="radio" type="radio" value="przelew paczkomat" />
<input id="radio3" name="radio" type="radio" value="przelew kurier" />
<input id="radio4" name="radio" type="radio" value="pobranie poczta" />
<input id="radio5" name="radio" type="radio" value="pobranie paczkomat" />
<input id="radio6" name="radio" type="radio" value="pobranie kurier" />

Abym miał osobne wartości $payment i $carrier (osobno "przelew", osobno "poczta")

Napisz proszę co mam wpisać w plik zamowienie.html, co w zamowienie.php a co w .js

Neutral:
Cytat
To może Ty mi wyjaśnisz, co chcesz napisać, ale tak konkretnie.

Po kliknięciu w co, co ma się stać i następnie PHP, co ma zrobić?

Opisz tę swoją bolączkę/łamigłówkę dokładniej, ponieważ nie wiem, co zamierzasz stworzyć. Jak nie podasz takich informacji, to skąd mam wiedzieć, co mam poprawić w Twoim, czy nie Twoim kodzie?


Pisz tutaj na ogólnym forum, a nie do mnie na PRIVate.

Cytat
Czy tak ? (...)


Nie wiem, co chcesz osiągnać, ale to pewnie jakaś błahostka.

Zamiast tego:

Cytat
  1. <input type="radio" value="przelew" name="pay[]" />
  2. <input type="hidden" value="poczta" name="pay[]" />
  3.  
  4. <input type="radio" value="przelew" name="pay[]" />
  5. <input type="hidden" value="paczkomat" name="pay[]" />


itd..

Możesz napisać tak dla każdej grupy inną nazwę, żeby tablica była następna z kolei, a nie wszystko w jednym:

  1. <input type="radio" value="przelew" name="pay1[]" />
  2. <input type="hidden" value="poczta" name="pay1[]" />
  3.  
  4. <input type="radio" value="przelew" name="pay2[]" />
  5. <input type="hidden" value="paczkomat" name="pay2[]" />


Napisz var_dump lub print_r i zobacz jak została utworzona tablica.

Dane odbierasz tak:

  1. echo $_GET['pay1'][0];


lub

  1. echo $_GET['pay1'][1];


Dla kolejnych input'ów analogicznie.

Cytat
Czemu sposób taki nie działa: (...)


Jak nie działa? Jeśli Ty nie chcesz powiedzieć, co chcesz napisać, a mógłbym Ci to stworzyć od początku nawet z JS, to przepraszam, ale w tym momencie nie chcę zgadywać.

Ten post edytował Neutral 6.03.2018, 10:06:45
Go to the top of the page
+Quote Post
mrk9109
post 6.03.2018, 13:06:21
Post #11





Grupa: Zarejestrowani
Postów: 445
Pomógł: 3
Dołączył: 4.06.2010

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


Nie prościej stworzyć osobna tabele w bazie danych gdzie będzie płatność i dostawa ?
Go to the top of the page
+Quote Post
plaxton
post 6.03.2018, 13:48:14
Post #12





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 5.03.2018

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


Nie chce używać bazy danych. Jestem totalnym amatorem jeśli chodzi o PHP

Użyłem takich inputów w .html
Tylko że w takim wypadku przy pay1 , pay2 , pay3 radio przestaje być jednokrotnego wyboru. I dodatkowo miesza mi dane z poszczególnych radio.

  1. <input type="radio" value="przelew" name="pay1[]" />
  2. <input type="hidden" value="poczta" name="pay1[]" />
  3.  
  4. <input type="radio" value="pobranie" name="pay2[]" />
  5. <input type="hidden" value="paczkomat" name="pay2[]" />
  6.  
  7. <input type="radio" value="przelew" name="pay3[]" />
  8. <input type="hidden" value="kurier" name="pay3[]" />
  9.  



Co mam dokładnie wpisać .PHP aby z otrzymać dane tylko z jednego wybranego radio (np pierwszego: przelew/poczta) i przyporządkować do zmiennych $payment $provider
Czyli otrzymać przy kliknięciu pierwszego radio:
$payment - przelew
$provider - poczta

Przy kliknięciu drugiego
$payment - pobranie
$provider - paczkomat


  1.  
  2. $payment =
  3. $provider =
  4.  
Go to the top of the page
+Quote Post
Pyton_000
post 6.03.2018, 13:58:29
Post #13





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Zrób sobie

<input type="radio" value="przelew|poczta" name="shipping" />

a w php:

list($payment, $shipping) = explode('|', $_POST['shipping']);
Go to the top of the page
+Quote Post
plaxton
post 6.03.2018, 14:38:17
Post #14





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 5.03.2018

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


Działa :-) :-) smile.gif
Właśnie o to mi chodziło . Taki prosty kod.
Bardzo dziękuje za pomoc :-)
Go to the top of the page
+Quote Post

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: 19.04.2024 - 14:07