Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Łączenie komunikatów if/elseif
Pcbecaw
post 16.06.2011, 13:57:59
Post #1





Grupa: Zarejestrowani
Postów: 236
Pomógł: 0
Dołączył: 4.06.2011

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


Jak to połączyć ?:
  1. if (isset($_COOKIE['formularz']))
  2. {
  3. echo 'Wpisy można dodawać co 5 minut!';
  4. // nie przyjmuj formularza
  5. }
  6. else
  7. {
  8. setcookie ('formularz', 'dodany wpis', time()+300) ; // długość istnienia ciasteczka w sekundach
  9. // dalsza obróbka i wysłanie formularza
  10. }
  11. if (!strlen($_POST['imie']) || !strlen($_POST['email']) || !strlen($_POST['adres']) || !strlen($_POST['subj'])) {
  12.  
  13. $errors[] = '<u>Nie zostały wypełnione wszystkie wymagane pola.</u>';
  14.  
  15. }
  16.  
  17. // Validate their e-mail address.
  18.  
  19. elseif ( !preg_match('/^[a-ząćęłńóśźż]+$/ui', $_POST['imie'])) {
  20.  
  21. $errors[] = '<u>Imię zostało wpisane niepoprawnie.</u>';
  22.  
  23. }

chodzi o to, zeby wyświetlał się tylko ten komunikat o 5 minutach. elseif do "wszystkich pól" nie działa.
Go to the top of the page
+Quote Post
ixpack
post 16.06.2011, 14:14:02
Post #2





Grupa: Zarejestrowani
Postów: 248
Pomógł: 55
Dołączył: 1.06.2010
Skąd: mam to wiedzieć?

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


  1. if (isset($_COOKIE['formularz']))
  2. {
  3. echo 'Wpisy można dodawać co 5 minut!';
  4. // nie przyjmuj formularza
  5. }
  6. else
  7. {
  8. if (!strlen($_POST['imie']) || !strlen($_POST['email']) || !strlen($_POST['adres']) || !strlen($_POST['subj'])) {
  9. $errors[] = '<u>Nie zostały wypełnione wszystkie wymagane pola.</u>';
  10. }
  11.  
  12. if ( !preg_match('/^[a-ząćęłńóśźż]+$/ui', $_POST['imie'])) {
  13. $errors[] = '<u>Imię zostało wpisane niepoprawnie.</u>';
  14. }
  15.  
  16. if (empty($errors)) setcookie ('formularz', 'dodany wpis', time()+300) ; // długość istnienia ciasteczka w sekundach
  17. }


Chyba tak.


--------------------
Łatwo jest być odważnym za murami własnego zamku.
Go to the top of the page
+Quote Post
Pcbecaw
post 16.06.2011, 14:22:22
Post #3





Grupa: Zarejestrowani
Postów: 236
Pomógł: 0
Dołączył: 4.06.2011

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


Tamte argumenty muszą być w elseif, bo chce wyswietlac komunikat tylko jeden raz, także powyższy sposób jest błędny.
Go to the top of the page
+Quote Post
ixpack
post 16.06.2011, 14:36:02
Post #4





Grupa: Zarejestrowani
Postów: 248
Pomógł: 55
Dołączył: 1.06.2010
Skąd: mam to wiedzieć?

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


Z całym szacunkiem... Błędny? A przeanalizowałeś ten kod w ogóle? Działa.

W programowaniu nic NIE MUSI. Wszystko da się zrobić "inaczej".
Ręce opadają.

@Edit: A jeżeli chcesz wyświetlać komunikaty o błędach w formularzu, to wybacz - ale BŁĘDNIE sprecyzowałeś swój problem. Wnerwiłeś mnie normalnie - ciężko to osiągnąć. A poza tym po kiego wtedy komunikaty wrzucasz do tablicy, skoro ma być tylko jeden komunikat?

Ten post edytował ixpack 16.06.2011, 14:40:14


--------------------
Łatwo jest być odważnym za murami własnego zamku.
Go to the top of the page
+Quote Post
Pcbecaw
post 16.06.2011, 19:23:21
Post #5





Grupa: Zarejestrowani
Postów: 236
Pomógł: 0
Dołączył: 4.06.2011

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


wstydnis.gif

Mam jeszcze taki problem, ponieważ komunikat o czasie wyslania nastepnego formularza jest wyświetlany w pakiecie z "wiadomość została wysłana". Czy można w jakiś sposób zrobić, by info o czasie wyświetlało się już bez "wiadomość została wysłana? - po ang. w skrypcie"
http://wklej.org/id/547707/
Go to the top of the page
+Quote Post
ixpack
post 16.06.2011, 20:32:40
Post #6





Grupa: Zarejestrowani
Postów: 248
Pomógł: 55
Dołączył: 1.06.2010
Skąd: mam to wiedzieć?

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


Zmień kawałek kodu...
  1. if (isset($_POST['mail']) && isset($_COOKIE['formularz'])) {
  2. echo '<u>kolejny wpis za 5min.</u>';
  3. // nie przyjmuj formularza
  4. } else if (isset($_POST['mail']) && !isset($_COOKIE['formularz'])) { //reszta bez zmian ale wyrzuć ten warunek o cookies


Pcbecaw - poczytaj o exceptions, te if/elseif będzie działać, ale czytelniej i szybciej zrobisz to na wyjątkach. Zrób funkcję do sprawdzania formularza, nie każde pole trzeba sprawdzać ręcznie - powinieneś użyć pętli, za wiele w Twoim kodzie warunków. rozumiem chcesz się uczyć więc daję wskazówki, a nie gotowca.

Czyli: wyjątki i funkcje, pętle - w kilku linijkach możesz cały ten kod zmieścić.

Ten post edytował ixpack 16.06.2011, 20:34:28


--------------------
Łatwo jest być odważnym za murami własnego zamku.
Go to the top of the page
+Quote Post
Pcbecaw
post 16.06.2011, 20:39:54
Post #7





Grupa: Zarejestrowani
Postów: 236
Pomógł: 0
Dołączył: 4.06.2011

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


Tak w sumie, to ten warunek i tak wysyła formularze po odświeżeniu. Wyświetla się komunikat, że nie można, a jednak wysyła. Co z tym jest nie tak?
Go to the top of the page
+Quote Post
ixpack
post 16.06.2011, 21:02:13
Post #8





Grupa: Zarejestrowani
Postów: 248
Pomógł: 55
Dołączył: 1.06.2010
Skąd: mam to wiedzieć?

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


Powinno działać, nie sprawdzałem. Jeden "bug" - jak jakieś pole będzie puste, to wywali błąd "nie wszystkie pola wypełnione" - ale nie pokaże np. że e-mail jest błędny - łatwo to zmienić - pokmiń.

Właśnie to jest urok wielu if/else - łatwo pomylić "{" lub "}" - i katastrofa gotowa...
Poczytaj o wyjątkach, spróbuj zrobić proste funkcje, które np. sprawdzają poprawność pól etc.

  1. <?php
  2. /**
  3.  
  4.  * A PHP contact form.
  5.  
  6.  * Author: tom@ofzenandcomputing.com
  7.  
  8.  * Last revision: 11/19/2007 01:03
  9.  
  10.  *
  11.  
  12.  * Mail header injection prevention based on comments from:
  13.  
  14.  * <a href="http://www.php.net/mail" target="_blank">http://www.php.net/mail</a>
  15.  
  16.  *
  17.  
  18.  * E-mail validation regex from:
  19.  
  20.  * <a href="http://www.regular-expressions.info/email.html" target="_blank">http://www.regular-expressions.info/email.html</a>
  21.  
  22.  */
  23. // Replace you@example.com with your own e-mail address.
  24.  
  25. define('YOUR_EMAIL', 'db4all@gmail.com');
  26. // If the user does not fill in a subject, this will be used.
  27.  
  28. define('DEFAULT_SUBJ', 'A message from your contact form');
  29. // This is the maximum length of a subject, in characters.
  30.  
  31. if (isset($_COOKIE['formularz'])) {
  32. echo '<u>kolejny wpis za 5min.</u>';
  33. // nie przyjmuj formularza
  34. } elseif (isset($_POST['mail'])) {
  35. $errors = array();
  36.  
  37. if (preg_match('/(%0A|%0D|\n+|\r+)/i', $_POST['subj'])) {
  38. $errors[] = 'Your subject contains illegal characters.';
  39. } else {
  40. if (!strlen($_POST['subj']) || is_null($_POST['subj'])) {
  41. $subj = DEFAULT_SUBJ;
  42. } else {
  43. $subj = substr($_POST['subj'], 0, 1000);
  44. }
  45. }
  46.  
  47. if (!strlen($_POST['imie']) || !strlen($_POST['email']) || !strlen($_POST['adres']) || !strlen($_POST['subj'])) {
  48. $errors[] = '<u>Nie zostały wypełnione wszystkie wymagane pola.</u>';
  49. } else {
  50. if (!preg_match('/^[a-ząćęłńóśźż]+$/ui', $_POST['imie'])) {
  51. $errors[] = '<u>Imię zostało wpisane niepoprawnie.</u>';
  52. }
  53. if (!preg_match('/^([a-z0-9]{1})([^\s\t\.@]*)((\.[^\s\t\.@]+)*)@([a-z0-9]{1})((([a-z0-9-]*[-]{2})|([a-z0-9])*|([a-z0-9-]*[-]{1}[a-z0-9]+))*)((\.[a-z0-9](([a-z0-9-]*[-]{2})|([a-z0-9]*)|([a-z0-9-]*[-]{1}[a-z0-9]+))+)*)\.([a-z0-9]{2,6})([.]?)$/Diu', $_POST['email'])) {
  54. $errors[] = '<u>Adres e-mail został wpisany niepoprawnie.</u>';
  55. }
  56. if (!preg_match('/^(http|ftp)([s]{0,1}):\/\/([a-z0-9]{1})((([a-z0-9-]*[-]{2})|([a-z0-9])*|([a-z0-9-]*[-]{1}[a-z0-9]+))*)((\.[a-z0-9](([a-z0-9-]*[-]{2})|([a-z0-9]*)|([a-z0-9-]*[-]{1}[a-z0-9]+))+)*)(\.([a-z0-9]{2,6})){0,1}((:[0-9]){0}|(:[1-9]{1}[0-9]*))\//iu', $_POST['adres'])) {
  57. $errors[] = '<u>Adres strony został wpisany niepoprawnie.</u>';
  58. }
  59. if (!preg_match('/^(http|ftp)([s]{0,1}):\/\/([a-z0-9]{1})((([a-z0-9-]*[-]{2})|([a-z0-9])*|([a-z0-9-]*[-]{1}[a-z0-9]+))*)((\.[a-z0-9](([a-z0-9-]*[-]{2})|([a-z0-9]*)|([a-z0-9-]*[-]{1}[a-z0-9]+))+)*)(\.([a-z0-9]{2,6})){0,1}((:[0-9]){0}|(:[1-9]{1}[0-9]*))\//iu', $_POST['subj'])) {
  60. $errors[] = '<u>Odsyłacz do statystyk został wpisany niepoprawnie.</u>';
  61. }
  62. if (preg_match('/(%0A|%0D|\n+|\r+)(content-type:|to:|cc:|bcc:)/i', $_POST['body'])) {
  63. $errors[] = 'Your message body contains invalid characters.';
  64. }
  65. }
  66.  
  67. if (count($errors)) {
  68. for ($i = 0; $i < count($errors); $i++) {
  69. printf('%s<br />', $errors[$i]);
  70. }
  71. } else {
  72. setcookie('formularz', 'dodany wpis', time() + 300);
  73. $headers = sprintf("From: %s", $_POST['imie']);
  74. $imie = $_POST['imie'];
  75. $adres = $_POST['adres'];
  76. $cialo = $_POST['body'];
  77. $email = $_POST['email'];
  78. $subj = $_POST['subj'];
  79. $temat = 'Reklama w serwisie Psychotechnik';
  80.  
  81. $wszystko = "Imię: " . $imie . "\nE-mail: " . $email . "\nAdres strony: " . $adres . "\nOdsyłacz statystyk: " . $subj . "\nTreść wiadomości:\n" . $cialo;
  82.  
  83. if (mail(YOUR_EMAIL, $temat, $wszystko, $headers)) {
  84. print '<p>Your message was sent.</p>';
  85. } else {
  86. print '<p>An error occurred while we were attempting to' . ' send your message. Please try again later.</p>';
  87. }
  88. }
  89. }
  90. ?></p>
  91. <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" accept-charset="utf-8">
  92. *Imię:<br />
  93. <input type="text" name="imie" size="25" /><br />
  94. *E-mail:<br />
  95. <input type="text" name="email" size="25" /><br />
  96. *Adres strony:<br />
  97. <input type="text" name="adres" size="25" /><br />
  98. *Odsyłacz do statystyk strony:<br />
  99. <input type="text" name="subj" size="40" maxlength="1000" /><br />
  100. Treść:<br />
  101. <textarea name="body" cols="32" rows="10" ></textarea><br />
  102. <input type="submit" name="mail" value="Wyślij wiadomość" class="button" />
  103. </form>


--------------------
Łatwo jest być odważnym za murami własnego zamku.
Go to the top of the page
+Quote Post
Pcbecaw
post 16.06.2011, 21:23:25
Post #9





Grupa: Zarejestrowani
Postów: 236
Pomógł: 0
Dołączył: 4.06.2011

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


Cytat
Powinno działać, nie sprawdzałem. Jeden "bug" - jak jakieś pole będzie puste, to wywali błąd "nie wszystkie pola wypełnione" - ale nie pokaże np. że e-mail jest błędny - łatwo to zmienić - pokmiń.

Wg mnie to nie jest błąd, bo najpierw powinno kazać wypełniać wszystkie wymagane pola, a dopiero później od góry po jednym błędzie mówić, co jest źle. Chyba niechcący dałeś mi gotowca, a nie kod z bugiem cap.gif
Wielkie dzięki za pomoc.
Go to the top of the page
+Quote Post
ixpack
post 16.06.2011, 21:27:21
Post #10





Grupa: Zarejestrowani
Postów: 248
Pomógł: 55
Dołączył: 1.06.2010
Skąd: mam to wiedzieć?

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


Cytat(Pcbecaw @ 16.06.2011, 21:23:25 ) *
Chyba niechcący dałeś mi gotowca, a nie kod z bugiem cap.gif


Masz się uczyć! Na jutro widzę tu jakieś dowody nerdsmiley.png


--------------------
Łatwo jest być odważnym za murami własnego zamku.
Go to the top of the page
+Quote Post
Pcbecaw
post 16.06.2011, 21:29:41
Post #11





Grupa: Zarejestrowani
Postów: 236
Pomógł: 0
Dołączył: 4.06.2011

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


Ten post mógłby być najbardziej wartościowy z postów, jakie dzisiaj widziałem, bo zmobilizował mnie do nauki php cap.gif
Jeśli miałbym dać dowody, to daj mi jakieś proste zadanie do wykonania na jutro smile.gif
Go to the top of the page
+Quote Post
Johnas
post 16.06.2011, 22:35:14
Post #12





Grupa: Zarejestrowani
Postów: 650
Pomógł: 16
Dołączył: 5.07.2010
Skąd: Ściśle Tajne

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


wykonaj logowanie na sesji biggrin.gif


--------------------
Jak coś jest dobre, to nie znaczy że nie może być to lepsze - Ideały nie istnieją ;D
Strony internetowe Świnoujście
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: 20.04.2024 - 02:13