Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][PHP] Dwie wartości w input radio
Forum PHP.pl > Forum > Przedszkole
plaxton
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. });
trueblue
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
plaxton
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


Neutral
  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?
plaxton

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.


Neutral
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.
plaxton
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 [] ?
Neutral
"[]" 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
)

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


Neutral
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ć.
mrk9109
Nie prościej stworzyć osobna tabele w bazie danych gdzie będzie płatność i dostawa ?
plaxton
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.  
Pyton_000
Zrób sobie

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

a w php:

list($payment, $shipping) = explode('|', $_POST['shipping']);
plaxton
Działa :-) :-) smile.gif
Właśnie o to mi chodziło . Taki prosty kod.
Bardzo dziękuje za pomoc :-)
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.