Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Łączenie komunikatów if/elseif
Forum PHP.pl > Forum > Przedszkole
Pcbecaw
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.
ixpack
  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.
Pcbecaw
Tamte argumenty muszą być w elseif, bo chce wyswietlac komunikat tylko jeden raz, także powyższy sposób jest błędny.
ixpack
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?
Pcbecaw
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/
ixpack
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ć.
Pcbecaw
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?
ixpack
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>
Pcbecaw
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.
ixpack
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
Pcbecaw
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
Johnas
wykonaj logowanie na sesji biggrin.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.