Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP]Dodanie instrukcji warunkowej do formularza
Forum PHP.pl > Forum > Przedszkole
drobny2992
Witam

Chcę zrobić w php taki formularz aby po wybraniu z listy rozwijanej opcji nr1 wiadomość była wysyłana na maila przyklad1@wp.pl a po wybraniu opcji drugiej była wysyłana na na maila przyklad2@wp.pl. Mam formularz i cały kod php sprawdzający i wysyłający wiadomość ale nie umiem dodać instrukcji warunkowej, która dany warunek będzie obsługiwać.

Mój kod wygląda tak:

Kod
<?php
//filtruje dane użytkownika
$imie = htmlspecialchars(trim($_POST['imie']));
$mail = htmlspecialchars(trim($_POST['mail']));
$temat = htmlspecialchars(trim($_POST['temat']));
$wiadomosc = htmlspecialchars(trim($_POST['wiadomosc']));
$send = $_POST['send'];
//mail na który będa wysyłane wiadomości

$odbiorca = "odbiorca@wp.pl";
//nagłówki
$header = "Content-type: text/html; charset=utf-8\r\nFrom: $mail";

//Sprawdzam czy istnieje ciastko, jeżeli tak wyświetlam komunikat
if (isset($_COOKIE['send'])) $error ='Odczekaj '.($_COOKIE['send']-time()).' sekund przed wysłaniem kolejnej wiadomości';

if ($send && !isset($_COOKIE['send']))
{
//Sprawdzam nick
if (empty($imie))
{ $error = "Nie wypełniłeś pola <strong>Nick !</strong><br/>"; }
elseif (strlen($imie) > 20)
{ $error .="Za długi nick - max. 20 znaków <br/>";}

//Sprawdzam mail
if (empty($mail))
{ $error .= "Nie wypełniłeś pola <strong>E-mail !</strong><br/>"; }
elseif (strlen($mail) > 30)
{ $error .="Za długi e-mail - max. 30 znaków <br/>";}
elseif (preg_match('/^[a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ0-9\-\_\.]+\@[a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ0-9\-\_\.]+\.[a-z]{2,4}$/',$mail) == false)
{ $error .= "Niepoprawny adres E-mail! <br/>"; }

//Sprawdzam temat
if (empty($temat))
{ $error .= "Nie wypełniłeś pola <strong>Temat !</strong><br/>"; }
elseif (strlen($temat) > 120)
{ $error .="Za długi temat - max. 120 znaków <br/>";}

//Sprawdzam wiadomosc
if (empty($wiadomosc))
{ $error .= "Nie wypełniłeś pola <strong>Wiadomość !</strong><br/>"; }
elseif (strlen($wiadomosc) > 400)
{ $error .="Za długa wiadomość - max. 400 znaków <br/>";}

//Sprawdzam czy są błędy i wysyłam wiadomość
if (empty($error))
{
$list = "Przysłał - $imie ($mail) <br/> Treść wiadomości - $wiadomosc";

if (mail($odbiorca, $temat, $list, $header))
{
$error .= "Twoja wiadomość została wysłana";
setcookie("send", time()+60, time()+60);
}
else
{ $error .= "Wystąpił błąd podczas wysyłania wiadomości, spróbuj później.";}
}
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="Keywords" content="wyraz1, wyraz2, wyraz3..." />
<meta name="description" content="Opis strony" />

</head>
<body>
<form action="" method="post">
<fieldset>
<legend>Formularz kontaktowy</legend>
<!-- Komunikat -->
<?php echo $error; ?>

<select name="mail">
<option value = "1">Opcja 1</option>
<option value = "2">Opcja 2</option>
</select>

<p/><label for="imie">Imię/nick:</label>
<p/><input type="text" id="imie" name="imie"/></div>

<p/><label for="mail">Twój e-mail:</label>
<p/><input type="text" id="mail" name="mail"/>

<p/><label for="temat">Temat: </label>
<p/><input type="text" id="temat" name="temat"/>

<p/><label for="wiadomosc">Wiadomość:</label>
<p/><textarea id="wiadomosc" name="wiadomosc" cols="40" rows="10"></textarea>

<input type="submit" value="Wyślij" id="send" name="send" />
</fieldset>
</form>
</body>
</html>


Turson
Napisałeś sprawdzenie czy pola są uzupełnione, ale nie wiesz jak w zależności od wyboru selecta wysłać wiadomość na inny adres. Acha, spoko
drobny2992
Mówiąc szczerze znalazłem przykładowy formularz na jakimś forum. Ale nie mogę znaleźć właśnie z opcją listy wyboru.
Turson
  1. <select name="opcja">
  2. <option value="1">Opcja 1</option>
  3. <option value="2">Opcja 2</option>

  1. if($_POST['opcja']==1){
  2. // wybrano Opcja 1
  3. }
  4. elseif($_POST['opcja']==2{
  5. // wybrano Opcja 2
  6. }
YourFrog
@up
afe afe i jeszcze raz afe !

Zrób to normalnie opakuj $_POST w obiekt i na nim wywołaj prawidłowa metodę.Kod pisany z palca także może mieć drobne błędy.

  1. $post = YourFrog\Request\Post::getInstance();
  2.  
  3. if( $post->isCompare('email', '1') )
  4. $email = 'test@test.pl';
  5. else
  6. $emial = 'admin@test.pl';
  7.  
  8.  
  9. //Tutaj wysyłanie e-maila


Pomocnicze klasy:

ArrayObject.php
  1. <?php
  2.  
  3. namespace YourFrog\Library;
  4.  
  5. /**
  6.  * Kolekcja
  7.  * @author Paweł Stelmasiak <YourFrog>
  8.  */
  9. abstract class ArrayObject
  10. {
  11. /**
  12. *
  13. * @var array
  14. */
  15. protected $arr;
  16.  
  17. /**
  18. * Konsturktor
  19. * @param array $arr
  20. */
  21. public function __construct(array $arr = null)
  22. {
  23. if( $arr === null )
  24. $this->arr = array();
  25. else
  26. $this->arr = $arr;
  27. }
  28.  
  29. /**
  30. * Sprawdza czy wartość występuje w tablicy
  31. * @param string|integer $key
  32. */
  33. public function exists($key)
  34. {
  35. return key_exists($key, $this->arr);
  36. }
  37.  
  38. /**
  39. * Zwraca długość tablicy
  40. * @return integer
  41. */
  42. public function length()
  43. {
  44. return count($this->arr);
  45. }
  46.  
  47. /**
  48. * Zwraca wartość zapisana pod kluczem
  49. * @param string $key
  50. * @param mixed $defaultValue
  51. * @return mixed
  52. */
  53. public function get($key, $defaultValue = null)
  54. {
  55. if( $this->exists($key) )
  56. return $this->arr[$key];
  57.  
  58. return $defaultValue;
  59. }
  60.  
  61. /**
  62. * Zapisuje wartość do tablicy
  63. * @param mixed $value
  64. * @param string|integer|null $key
  65. */
  66. public function set($value, $key = null)
  67. {
  68. if( $key === null )
  69. $this->arr[] = $value;
  70. else
  71. $this->arr[$key] = $value;
  72. }
  73. }


Post.php
  1. <?php
  2.  
  3. namespace YourFrog\Request;
  4.  
  5. use YourFrog\Library\ArrayObject;
  6.  
  7. /**
  8.  * Klasa opakowujaca tablice superglobalna $_POST
  9.  * @author Paweł Stelmasiak <YourFrog>
  10.  */
  11. class Post extends ArrayObject
  12. {
  13. /**
  14. * Przechowuje instancje klasy
  15. * @var YourFrog\Request
  16. */
  17. static protected $_instance;
  18.  
  19. /**
  20. * Zwraca instancje klasy
  21. * @return \YourFrog\Request\Post
  22. */
  23. static public function getInstance()
  24. {
  25. if( self::$_instance === null )
  26. self::$_instance = new self();
  27.  
  28. return self::$_instance;
  29. }
  30.  
  31. /**
  32. * Konstruktor
  33. */
  34. protected function __construct()
  35. {
  36. parent::__construct($_POST);
  37. }
  38.  
  39. /**
  40. * Zablokowanie zapisywania w tablicy $_POST
  41. * @throws \Exception
  42. */
  43. public function set($value, $key)
  44. {
  45. throw new \Exception('Not supported');
  46. }
  47.  
  48. /**
  49. * Sprawdza czy przesłano wymagana przez nas akcję
  50. * @param string $actionValue
  51. * @param string $actionKey
  52. * @return boolean
  53. */
  54. public function isAction($actionValue, $actionKey = 'action')
  55. {
  56. $this->isCompare($actionKey, $actionValue);
  57. }
  58.  
  59. /**
  60. * Sprawdza czy wartość spod klucza jest jednakowa z ta której potrzebujemy
  61. * @param unknown $key
  62. * @param unknown $value
  63. * @return boolean
  64. */
  65. public function isCompare($key, $value)
  66. {
  67. return (strcmp($this->get($key, ''), $value) == 0);
  68. }
  69. }




@Offtopic
Wiem że to dział newbie. Ale w innych językach jakoś ludzie mogą się normalnie uczyć pisać od razu.
nospor
Cytat
@up
afe afe i jeszcze raz afe !

Zrób to normalnie opakuj $_POST w obiekt i na nim wywołaj prawidłowa metodę.Kod pisany z palca także może mieć drobne błędy.
Zabawny jestes.... koleś nie potrafi zrobic glupiego banalnego IFa a ty mu to każesz opakowywać w obiektowke..... przedszkole PRO dwa pietra wyzej wink.gif
Turson udzielił prawidłowej odpowiedzi dostosowanej do poziomu autora, choć patrząc na post autora, to i odpowiedź Tursona może być dla niego jeszcze za trudna.
YourFrog
@nospor
Jeżeli nie da rady ich użyć zada następne pytanie, później następne aż się nauczy. Najważniejsze jest dawać odpowiedzi których sami chcielibyśmy uzyskać.

Po za tym jego odpowiedź nie jest prawidłowa.
  1. <?php
  2.  
  3. $_POST['opcja'] = '1abcd';
  4.  
  5. if( $_POST['opcja'] == 1 )
  6. echo 'cześć jestem pan bug';


Wiem że tutaj ten bug nic nie zrobi ale kiedyś autor tematu nie daj boże użyje takiego warunku przed zapytaniem do bazy.
Turson
Naprawdę nie widzisz value w option questionmark.gif
YourFrog
@up
Widzę. Dane z obcego źródła (w tym wypadku z przeglądarki) nie powinny mieć zaufania przez nas. Po za tym nic nie stoi na przeszkodzie przesłaniu danych postem przy pomocy innych programów. To że w kodzie HTML mamy coś zdefiniowanego nie oznacza że otrzymamy tylko takie dane. Nie chce się kłócić jak coś.
nospor
Cytat
Jeżeli nie da rady ich użyć zada następne pytanie, później następne aż się nauczy. Najważniejsze jest dawać odpowiedzi których sami chcielibyśmy uzyskać.
Jesli nie bylbym programistą a chcialbym na strone wdrozyc wysylka forma i wszystkie kody bym kopiowal z neta, to sorki, ale Twoj post uznałbym za przerost formy nad trescią. A czytajac wypowiedzi autora, tak wlasnie jest.
Kolejna sprawa, osoba która nie potrafi napisac banalnego IFa jest jak osoba nieumiejąca totalnie plywac, a Ty wrzucasz taką osobę od razu na głęboką wodę, w mysl zasady, ze za trzecim razem się nauczy.

Cytat
Po za tym jego odpowiedź nie jest prawidłowa.
Twoja odpowiedz tez jest nieprawidłowa, gdyz zrobiles literowke tongue.gif

@YourFrog nie zrozum mnie źle. To bardzo fajnie, że starasz się podawać super hiper fajowskie skrypty pisane tak jak należy. To naprawdę się chwali. Staraj się jednak dobierać poziom kodów, do poziomu wiedzy i poziomu potrzeb pytającego wink.gif
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.