Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Formularz w php multiple="multiple"
Forum PHP.pl > Forum > PHP
tutuum
Tworzę formularz zamawiania. Mam dwa pliki- zakupy.html, gdzie mieści się formularz i zamowienie.php ze skryptem. Chcę, aby z podanej listy można było wybrać kilka elementów- użyłam opcji multiple="multiple". Kiedy sprawdzałam funkcjonowanie zamawiania okazało się, że na mail dostaję informacje o wyborze tylko jednego przedmiotu- ostatniego, który został wybrany z listy.

Jak rozwiązać ten problem?
CuteOne
I my mamy bez kodu wywróżyć co jest nie tak... questionmark.gif
tutuum
zamowienie.php

CODE
<?php
$przedmiot=$_POST['przedmiot'];
$imieinazwisko=$_POST['imieinazwisko'];
$adres=$_POST['adres'];
$kod=$_POST['kod'];
$miasto=$_POST['miasto'];
$mail=$_POST['mail'];


$data=strftime(" %A, %d %B %Y");
$nadawca_imie = "Nowe zamówienie ze strony bazarek-rozmaitosci.pl!;)";
$send_email ="bazarek.rozmaitosci@gmail.com";
$temat = "Nowe zamówienie ze strony bazarek-rozmaitosci.pl!;)";
$headers = "MIME-Version: 1.0\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-2' . "r\n"; //lub utf-8 itd.
$headers .= "Od: $nadawca_imie <$email>\r\n";
$body_mail = "<table width=600 border=0 cellpadding=1 cellspacing=2 align=center style=\"font-family: Verdana; font-size: 10px;\">
<tr>
<td colspan=2 align=center><b><u>".$temat."</u></b></td>
</tr>
<tr>
<td colspan=2 align=center> </td>
</tr>
<tr>
<td width=166 align=right>Nazwa przedmiotu: </td>
<td width=424><div align=\"justify\"><b>".$przedmiot."</b></div></td>
</tr>
<tr>
<td width=166 align=right>Imię i nazwisko zamawiającego: </td>
<td width=424><div align=\"justify\"><b>".$imieinazwisko."</b></div></td>
</tr>
<tr>
<td width=166 align=right>Adres: </td>
<td width=424><div align=\"justify\"><b>".$adres."</b></div></td>
</tr>
<tr>
<td width=166 align=right>Kod pocztowy: </td>
<td width=424><div align=\"justify\"><b>".$kod."</b></div></td>
</tr>
<tr>
<td align=right valign=top>Miasto: </td>
<td align=left valign=top> <div align=\"justify\"><b>".$miasto."</b></div></td>
</tr>
<tr>
<td align=right valign=top>Adres e-mail: </td>
<td align=left valign=top> <div align=\"justify\"><b>".$mail."</b></div></td>
</tr>

<tr>
<td colspan=2 align=center>Data zamówienia: $data</td>
</tr>
</table>";

mail($send_email,$temat,$body_mail,$headers);



?>


fragment pliku zakupy.html
CODE
<form style=" line-height:25px" action="zamowienie.php" NAME="zgloszenie" method="post">
<img src="ikonka.jpg" border="0"/>Oto lista przedmiotów możliwych do natychmiastowego zakupienia: <br />


<select name="przedmiot" multiple="multiple">
<optgroup label="KOLCZYKI">
<option>Trochę różu</option>
<option>Cynamon</option>
<option>Ptaszki</option>
<option>Królowa disco</option>
<option>W dymie</option>
<option>Folk</option>
<option>Fioletowe ażury</option>
<option>Rewolwery</option>
<option>Wkrętki I</option>
<option>Swarovski</option>
<option>Korkowe</option>
<option>Zamrożenie</option>
<option>Barok</option>
<option>Kolorowo mi</option>
<option>Róże w stylu vintage</option>
<option>Fioletowe grona</option>
<option>Różowe</option>
</optgroup>
</select>
tehaha
daj
  1. name="przedmiot[]"
CuteOne
name="przedmiot[]"

a w pliku .php za pomocą pętli odbierz dane
tutuum
Cytat(CuteOne @ 24.09.2011, 15:16:31 ) *
name="przedmiot[]"

a w pliku .php za pomocą pętli odbierz dane



Nie wiem w jaki sposób to zrobić.
Próbowałam w ten sposób:
CODE
if (isset($_POST['submit'])) {

for ($lp=0; $lp<=9; $lp++) {
echo ".($_POST['przedmiot'][$lp]).";
}

} else {

$lp= 1;
echo "<form name='act1' method='post'>";
while ($lp <= 9 )
{
echo $lp++." <input type='text' name='przedmiot[]'>";
}

tehaha
zamiast for użyj pętli foreach($_POST['przedmiot'] as $value)

http://php.net/manual/en/control-structures.foreach.php

tam do tych option musisz dodać atrybut value czyli <option value='wartość'>Nazwa</option> i ta wartość zostanie przesłana
tutuum
CODE
if (isset($_POST['submit'])) {

foreach ($lp=0; $lp<=9; $lp++) {
echo ".($_POST['przedmiot'] as $value).";
}

} else {

$lp= 1;
echo "<form name='act1' method='post'>";
while ($lp <= 9 )
{
echo $lp++." <input type='text' name='przedmiot[]'>";
}


Wyrzuca błąd tutaj:
CODE
echo ".($_POST['przedmiot'] as $value).";
tehaha
zobacz w dokumentacji jak stosować pętlę foreach(), dałem Ci link ale widzę, że nawet tam nie zajrzałeś

p.s. a ta pętla w form to już nie wiem po co, przecież kod formularza był ok miałeś tylko dodać value do option
tutuum
Wiesz co, nigdy nie miałAm do czynienia z pętlami, tak więc jest to dla mnie duży problem.
Posługując się linkiem od Ciebie:
CODE
$przedmiot = array(1, 2, 3, 4);
foreach ($przedmiot as &$value) {
$value = $value * 2;
}
// $arr is now array(2, 4, 6, 8)
unset($value); //


Na e-mail dostaję wiadomość z ARRAY jako nazwa towaru.

No i kod zakupy.html:
Kod
    <select name="przedmiot[]" multiple="multiple">
    <optgroup label="KOLCZYKI">
    <option value="1">Trochę różu</option>
    <option value="2">Cynamon</option>
    <option value="3">Ptaszki</option>
    <option value="4">Królowa disco</option>
    <option value="5">W dymie</option>
    <option value="6">Folk</option>
    <option value="7">Fioletowe ażury</option>
    <option value="8">Rewolwery</option>
    <option value="9">Wkrętki I</option>
    <option value="10">Swarovski</option>
    <option value="11">Korkowe</option>
    <option value="12">Zamrożenie</option>
    <option value="13">Barok</option>
    <option value="14">Kolorowo mi</option>
    <option value="15">Róże w stylu vintage</option>
    <option value="16">Fioletowe grona</option>
    <option value="17">Różowe</option>
    </optgroup>
    </select
tehaha
ale zastanowiłeś się w ogóle co Ty tam napisałeś?

1. Przesyłasz sobie formularzem tablicę z wartościami wybranymi przez użytkownika, te wartości to będzie to co w value czyli 1,2,3 itp.
2. Na maila raczej chcesz przesłać sobie etykiety a nie jakieś tam 1,2,3, więc możesz w tablicy $przedmiot trzymać te nazwy przypisane do wartości, analogicznie jak w formularzu
3. pętlą odbierasz wybrane pozycje i sobie to składasz w całość do jednej zmiennej


  1. $przedmiot = array(1=>'Trochę różu', 2=>'Cynamon');
  2.  
  3. $wybrane = array();
  4. foreach ($_POST['przedmiot'] as &$value) {
  5. $wybrane[] = $przedmiot[$value];
  6. }
  7. $wszystkie = implode(', ', $wybrane);
  8.  
  9. echo $wszystkie;
tutuum
W mailu nadal "Array", mimo zmiany kodu na powyżej podany.
CuteOne
nosz kutwa mać.. logicznego myślenia trochę... skoro pojawia się array znaczy, że z array trzeba dane wyciągnąć w jaki sposób napisał tehaha
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.