przesyłanie zmiennych z formularza multiple

0

Cześć.
Stworzyłem formularz z listą wielokrotnego wyboru.
Jak zapisać wszystkie wybrane elementy w bazie danych?
Zapisuje mi tylko jeden z wybranych elementów.

Próbowałem dodać name w każde pole option, ale nie działa

FORMULARZ
   <option name="osobowka"><font color="black">osobówka</font></option>
   <option name="suv" ><font color="black">suv</font></option>

PHP
	$osobowka=$_POST['osobowka'];
	$suv=$_POST['suv'];
	$pojazd=$osobowka.$suv;

Oto mój kod bez tej "modyfikacji".
test.php

<form name="rezerwacja" method="post" action="test2.php">          
<div class="box">             
<h1>Rezerwacja terminu online</h1>             
<label><span>Imię :</span><input type="text" class="wpis" name="imie"/></label>              
<label><span>Nazwisko :</span><input type="text" class="wpis" name="nazwisko"/></label>               
<label><span><font color="red">Miasto</font> :</span><input type="text" class="wpis" name="miasto" value="Zielona Góra" required /></label>     
<label><span><font color="red">Ulica</font> :</span><input type="text" class="wpis" name="ulica" required /></label>  
<label><span><font color="red">Nr. domu</font> :</span><input type="text" class="wpis" name="nrdomu" required /></label>
<label><span><font color="red">Telefon</font> :</span><input type="text" class="wpis" name="telefon" required /></label>  
<label><span>Email :</span><input type="text" class="wpis" name="email"/></label>  
<label><span><font color="red">Data</font> :</span><input type="text" class="wpis" name="data" required /></label>  
<label><span><font color="red">Godzina</font> :</span><input type="text" class="wpis" name="godzina" required /></label>  
<label>&nbsp;&nbsp;W celu wybrania więcej niż jednego przedmiotu, przytrzymaj <br><font color="red"><b>CTRL</b></font> podczas wybierania</b>&nbsp;&nbsp;</font></label>
<label><span>Mebel :</span><select name="mebel" class="wpis" multiple>
    <option><font color="black">narożnik</font></option>
	<option><font color="black">kanapa/sofa</font></option>
	<option><font color="black">pufa</font></option>
	<option><font color="black">krzesło</font></option>
	<option><font color="black">fotel</font></option>
    <option><font color="black">inny</font></option>
</select>
</label> 

<label><span>Pojazd :</span><select name="pojazd" class="wpis" multiple>
    <option name="osobowka"><font color="black">osobówka</font></option>
	<option name="suv" ><font color="black">suv</font></option>
	<option><font color="black">bus</font></option>
	<option><font color="black">ciężarowy</font></option>
</select>
</label> 

<label><span>Dywan :<br></span><table>
<tr><td>długość:</td><td>szerokość:</td></tr>
<tr><td><input type="text" class="wpis2" name="dlugosc"/></td><td><input type="text" class="wpis2" name="szerokosc"/></td></tr>
</table></label>   

<label>                 
<span>Wiadomość :</span>                 
<textarea class="wiadomosc" name="wiadomosc"></textarea>                 
<h1><center><input class="button" value="Wyślij" type="submit"/></center>    </h1>         
</label>   
                                
</div>     
</form>

test2.php

<?php require ('connectbase.php'); // wstawiamy dane configuracyjne do polaczenia z baza 
 
	// tworzymy krotkie nazwy zmiennych otrzymanych z formularza
	$imie=$_POST['imie'];
	$nazwisko=$_POST['nazwisko'];
	$telefon=$_POST['telefon'];
	$miasto=$_POST['miasto'];
	$email=$_POST['email'];
	$ulica=$_POST['ulica'];
	$nrdomu=$_POST['nrdomu'];
	$data=$_POST['data'];
	$godzina=$_POST['godzina'];
	$mebel=$_POST['mebel'];
	$pojazd=$_POST['pojazd'];
	$dlugosc=$_POST['dlugosc'];
	$szerokosc=$_POST['szerokosc'];
	$wiadomosc=$_POST['wiadomosc'];
	$koszt=666;
	$dywan=$dlugosc * $szerokosc * 8;

 
$query = "INSERT INTO rezerwacje (imie, nazwisko, telefon, email, miasto, ulica, nrdomu, data, godzina, mebel, pojazd, dywan, wiadomosc, koszt) VALUES ('$imie', '$nazwisko', '$telefon', '$email', '$miasto', '$ulica', '$nrdomu', '$data', '$godzina', '$mebel', '$pojazd', '$dywan', '$wiadomosc', '$koszt')";
$mysqli->query($query);

//Informację o emailu, na który będzie wysyłana wiadomość

    $imie=$_POST['imie'];
	$nazwisko=$_POST['nazwisko'];
	$telefon=$_POST['telefon'];
	$miasto=$_POST['miasto'];
	$email=$_POST['email'];
	$ulica=$_POST['ulica'];
	$nrdomu=$_POST['nrdomu'];
	$data=$_POST['data'];
	$godzina=$_POST['godzina'];
	$mebel=$_POST['mebel'];
	$pojazd=$_POST['pojazd'];
	$dlugosc=$_POST['dlugosc'];
	$szerokosc=$_POST['szerokosc'];
	$wiadomosc=$_POST['wiadomosc'];
	$koszt=666;
	$dywan=$dlugosc * $szerokosc;
  $admin_email = "[email protected]";
  $subject = "NOWE PRANIE! ".' '.$data.' '.$godzina.' '.$telefon;
  $comment = 'www.taniepranie.zgora.pl/test3.php  '.$imie.' '.$nazwisko.' '.$data.' '.$godzina.' '.$telefon.' '.$miasto.' '.$ulica.' '.$nrdomu.' '.$dywan.' '.$koszt;
  
  //wysyłamy email
  mail($admin_email, "$subject", $comment, "Od:" . $telefon);
	
 	
?>
2

Skoro to select, bo przecież używasz tagów option (a ich nigdzie więcej się nie stosuje poza selectem), to źle używasz tychże opcji.
Twój select powinien wyglądać tak:

<select name="vehicle_type" multiple>
    <option value="suv">Suv</option>
    <option value="osobowka">Osobówka</option>
</select>

Pisałem z głowy, wiec nie jestem pewien czy multiple jest dobre, ale szukaj w tym kierunku.
Poczytaj też do czego służy atrybut name w htmlu.

2

Musisz zwrocic tablice


<select name="mebel[]" class="wpis" multiple>

.......

<input type="submit" name="submit" value="wyswietl wartosci" />
<?php
if(isset($_POST['submit'])){
foreach ($_POST['mebel'] as $select)
{
echo "Zaznaczyles :" .$select; 
}
}
1
  • wywal to <font> albo idź polować na dinozaury,
  • w option nie name="osobowka" tylko value="osobowka",
  • select z mutliple musi mieć nazwę-tablicę name="cośtam[]",
  • później czytasz ją za pomocą foreach.

Do wyguglania w 5 minut:
http://php.net/manual/en/faq.html.php#faq.html.select-multiple
https://stackoverflow.com/questions/2407284/how-to-get-multiple-selected-values-of-select-box-in-php

0

O tak? Trochę mi nie działa:

<?php
if(isset($_POST['submit'])){
foreach ($_POST['mebel'] as $select)
{
echo "Zaznaczyles :" .$select; 
}
}
?>


<form name="rezerwacja" method="post" action="test4.php">  
<select name="mebel[]" class="wpis" multiple>
    <option value="1">narożnik</option>
	<option value="2">kanapa/sofa</option>
	<option value="3">pufa</option>
	<option value="4">krzesło</option>
	<option value="5">fotel</option>
    <option value="6">inny</option>
</select>
<input class="button" value="Wyślij" type="submit"/>
1

Okresl nazwe [name] w submit

<input name="submit">

Przeciez podalem Ci przyklad wyzej

0

O. Działa. Dziękuję. Nie zauważyłem tego szczegółu.
Jestem skamieliną "programowania". Uczyłem się bardzo dawno temu a teraz próbuję zrobić sam stronę (bo nie stać mnie na profesjonalistę) a nie mam czasu na naukę (praca na 2 etaty i kilka innych czynników).
W każdym razie ślicznie dziękuję za poświęcony czas. ; ]
Daj plusiki. W ten sposób mogę się delikatnie zrekompensować.

0
brychu napisał(a):

O tak? Trochę mi nie działa:

Trochę mi zgadnijcie, co mi nie działa :P

<form name="rezerwacja" method="post" action="test4.php">

Jeśli plik, który zawiera kod przetwarzania odpowiedzi nazywa się test4.php to ok,
jeśli się tak nie nazywa, to wpisz tutaj właściwą nazwę action="właściwa_nazwa.php".
Jeśli formularz i kod przetwarzania odpowiedzi znajdują się w tym samym pliku, wystarczy wpisać: action="".

Natomiast na pewno nie będzie działać ten fragment:

if (isset($_POST['submit'])){
foreach ($_POST['mebel'] as $select)

Który mówi:

  • jeśli przesłano wartość zmiennej o nazwie submit,
  • to odczytuj kolejne wiersze zmiennej o nazwie mebel.

Tak:

if (isset($_POST['mebel'])){
  foreach ($_POST['mebel'] as $select) {
    echo "Zaznaczyles :" .$select; 
  }
}
0

No dziękuję, ale już działa. Napisałem ; ]

0

Cześć. Jedziemy dalej ;p (proszę o wyrozumiałość)
Powyższe kody działają, ale mam problem z zapisem kilku wartość do jednego pola w bazie danych.
Powiedzmy, że moja baza składa się z kolumn imie, pojazd, mebel, dywan.
Klient wybiera z "mebel 2 opcję: pufa oraz kanapa. No i chciałbym to zapisać tak:
IMIE | POJAZD | MEBEL | DYWAN
Michał |-----------|pufa, kanapa |-------------

Jak to zrobić moi kochani? Trafiłem na trop funkcji IMPLODE, ale nie potrafię jej użyć, bo jestem laikiem i skamielinką. ; p

1

Nie zapisuj tak. Zapisz to jako 2 rekordy w bazie (i tak to nie będzie zbyt dobre rozwiązanie). A najlepiej poczytaj sobie o normalizacji w bazie danych, bo Ci się przyda. Np.:

Jedna tabelka client -> id, name, potem product-> id, name, a potem tabelka client_product -> client_id, product_id

0
serek napisał(a):

Nie zapisuj tak. Zapisz to jako 2 rekordy w bazie.

A dlaczego?
Wygodniej by mi było w jednym.

1

Prosciej jest jako nowe rekordy. Prosciej z dodawaniem, usuwaniem aktualizacją.

0
szybka_parowka napisał(a):

Prosciej jest jako nowe rekordy. Prosciej z dodawaniem, usuwaniem aktualizacją.

Aktualizacja mi niepotrzebna a usuwanie to i tak cały rekord usuwam, więc nie muszę pojedynczej komórki tykać.
Tylko z tym oddaniem właśnie mam problem Panie Parówku. ;]

1

Zedytowałem poprzedni post, ale już pojawiły się nowe, to jeszcze raz:

Nie zapisuj tak. Zapisz to jako 2 rekordy w bazie (i tak to nie będzie zbyt dobre rozwiązanie). A najlepiej poczytaj sobie o normalizacji w bazie danych, bo Ci się przyda. Np.:

Jedna tabelka client -> id, name, potem product-> id, name, a potem tabelka client_product -> client_id, product_id

Możesz zrobić tak jak chcesz, ale po co się uczyć złych nawyków? Lepiej od razu zrobić to dobrze.

0

No to już wiem mniej więcej o co chodzi. Chciałem uniknąć 3 tabelek.
BTW. to moja cała strona nie jest zrobiona dobrze ; p

1 użytkowników online, w tym zalogowanych: 0, gości: 1