Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: mail + zabespieczenie
Forum PHP.pl > Forum > PHP
kenshi
witam Mam taki kod do wysyłania maili z poziou strony.
Kod
<strong><font color="#ffff00">
             <?php
     // sprawdzamy, czy zmienna $submit jest pusta
     if (empty($_POST['submit'])) {
         // wyświetlamy formularz
         echo "<table border=\"0\"><form method=\"post\">
     <tr>
     <td>Temat </td>
     <td><input type=\"text\" name=\"temat\" style=\"width: 250px\"></td>
     </tr>
     <tr>
      <td>Treść wiadomości </td>
     <td><textarea name=\"tresc\" style=\"width: 350px; height: 100px\"></textarea></td>
     </tr>
     <tr>
     <td>Imię lub Nick </td>
     <td><input type=\"text\" name=\"imie\" style=\"width: 250px\"></td>
     </tr>
     <tr>
     <td>Adres e-mail </td>
     <td><input type=\"text\" name=\"email\" style=\"width: 250px\"></td>
     </tr>
     <tr>
     <td>&nbsp;</td>
     <td><input type=\"submit\" name=\"submit\" value=\"Wyślij\">&nbsp;
     <input type=\"reset\" value=\"Wyczyść\"></td></form>
     </tr>
     </table>";
     }
     // sprawdzamy, czy zmienne przesłane z formularza nie są puste
     elseif (!empty($_POST['tresc']) &&  !empty($_POST['temat'])&& !empty($_POST['imie']) &&  !empty($_POST['email'])) {
         // jeżeli powyższy warunek jest spełniony tworzona jest wiadomość
         // zmienna $message zawiera treść wiadomości
         $message = "Treść wiadomości:\n$_POST[tresc]\nWysłał: $_POST[imie]\ne-mail: $_POST[email]";
         // zmienna $header zawiera przede wszystkim adres zwrotny
         $header = "From: $_POST[imie] <$_POST[email]>";
         // funkcja mail() za pomocą której wiadomość zostanie wysłana
        @mail("kenshi5@o2.pl","$_POST[temat]","$message","$header")
         or die('Nie udało się wysłać wiadomości. Wypełnij wszystkie pola');
         // wyświetlenie komunikatu w przypadku powodzenia
         echo "<div align=\"color: #FFFF00;   center;\"><strong>Dziekujemy za wypelnienie  formularza<p> Udzielimy odpowiedzi  w przeciagu 48  godzin</strong></div>";
     }
     // lub w przypadku nie wypełnienia formularza do końca
     else echo "<span style=\"color: #FF0000; text-align:  center;\">Wiadomość nie została wysłana <p>Wypełnij wszystkie  pola w formularzu !</span>";
    
     ?>


ale chciał bym zabespieczyc to np "wpis stolice polski" tylko nie mam pojęcia jak zrobić to by bot tego nie wyczaił bardzo proszę o pomoc
Tajgeer
Gdzieś w formularzu dodaj nowe pole:
Kod
<tr>
     <td>Podaj stolice Polski</td>
     <td><input type=\"text\" name=\"stolica\" style=\"width: 250px\"></td>
     </tr>


Następnie przy sprawdzaniu, czy wysłane zmienne nie są puste, dodaj coś takiego jak
Kod
if($_POST['stolica']=="Warszawa"
Jeśli uzytkownik (bądź bot) poda inną odpowiedź, to skrypt zatrzyma swoje działanie.
kenshi
a nie powinno byc
Kod
!empty($_POST['stolica']=="Warszawa"
? bo jak dodałem to w takiej formie to wyskoczył bląd
Tajgeer
Dodaj do swojej linijki
Kod
&& $_POST['stolica']=="Warszawa"


Co do kwestii Twojego pytania - nie, nie tak powinno być. Funkcja empty sprawdza tylko, czy dany formularz jest pusty lub nie. Twój powyższy twór jest kompletnie bez sensu - zero w nim logiki winksmiley.jpg
kenshi
dziękuje bardzo działa jak nalezy teraz juz nie musze sie martwic botami bo normalnie robiły mi sieczkę z maila :/

a jeszcze jedno. Bo odpowiedz jest wrażliwa na wielkie i małe litery. Czy jak bym zrobił to tak
Kod
&& $_POST['stolica']=="Warszawa, warszawa"
to by działało? czy moze jest na to jakiś inny sposób by nie miało znaczenie wielkość liter
Tajgeer
W takim wypadku proponowałbym zmodyfikować nieco skrypt winksmiley.jpg

  1. <?php
  2. elseif (!empty($_POST['tresc']) &&  !empty($_POST['temat'])&& !empty($_POST['imie']) &&  !empty($_POST['email'])) { // jeżeli powyższy warunek jest spełniony tworzona jest wiadomość
  3.  
  4.         if($_POST['stolica']=="Warszawa" || $_POST['stolica']=="warszawa") { // jeśli wpisano poprawną stolice
  5.  
  6.  
  7.         // zmienna $message zawiera treść wiadomości
  8.         $message = "Treść wiadomości:\n$_POST[tresc]\nWysłał: $_POST[imie]\ne-mail: $_POST[email]";
  9.         // zmienna $header zawiera przede wszystkim adres zwrotny
  10.         $header = "From: $_POST[imie] <$_POST[email]>";
  11.         // funkcja mail() za pomocą której wiadomość zostanie wysłana
  12.        @mail("kenshi5@o2.pl","$_POST[temat]","$message","$header")
  13.         or die('Nie udało się wysłać wiadomości. Wypełnij wszystkie pola');
  14.         // wyświetlenie komunikatu w przypadku powodzenia
  15.         echo "<div align=\"color: #FFFF00;   center;\"><strong>Dziekujemy za wypelnienie  formularza<p> Udzielimy odpowiedzi  w przeciagu 48  godzin</strong></div>";
  16.          } else { // jesli nie podano dobrej stolicy
  17.           header('Location: '.$_SERVER['PHP_SELF'].''); // nastąpi przekierowanie do formularza
  18.          }
  19.     }
  20.     // lub w przypadku nie wypełnienia formularza do końca
  21.     else echo "<span style=\"color: #FF0000; text-align:  center;\">Wiadomość nie została wysłana <p>Wypełnij wszystkie  pola w formularzu !</span>";
  22.    
  23.     ?>
guitarnet.pl
@Tajgeer
ten skrypt dalej jest dziurawy jak sito i racja generalnie botami nie musisz sie juz martwic ale wystarczy czlowiek ktory bedzie znal odpowiedz na pytanie, spreparuje dane uzywajac slowa Warszawa, odpali bota i dalej skrypt lezy na kolanach..

a mozna jeszcze krocej i bez bota - wystarczy na twoim skrypcie przeprowadzic "email injection"
bylo juz dzisiaj na forum
kenshi
mozesz zapodac link do tematu questionmark.gif bo nie moge znalezc pozdrawiam i thx
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.