Problem z edycją formularza w PHP i wstawieniem captcha

Witam ! Nie mam zielonego pojęcia na temat PHP więc liczę na Waszą pomoc.

  1. Jak zmodyfikować poniższy kod (kod na pewno jest poprawny sprawdzałam działanie), aby w przypadku nie wypełnienia pól lub błędu wyświetlał się komunikat : „wypełnij wszystkie formularza”, ale nie samodzielnie tylko razem z wszystkimi polami do wypełnienia. Na chwile obecna wyświetla się, ale samodzielnie.

  2. Jak dołączyć poniższy kod captcha do powyższego formularza tak aby wysyłała się po prawidłowym wpisaniu kodu z obrazka (kod captcha także jest poprawny – sprawdziłam).

Proszę o proste tłumaczenie jaki kod i gdzie mam wstawić, gdyż jak wspomniałam nie wiem nic o PHP. Z góry dziekuję za pomoc.

Kod formularza:

<?php 

// sprawdzamy, czy zmienna $submit jest pusta 

if (empty($_POST['submit'])) { 

    // wyświetlamy formularz 

    echo "

| Treść wiadomości | |
| Imię, nazwisko lub nick | |
| Adres e-mail | |
|   |   |

“; } // sprawdzamy, czy zmienne przesłane z formularza nie są puste elseif (!empty($_POST[‘tresc’]) && !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(“adres@domena.pl”,“Wiadomosc ze strony WWW”,”$message","$header") or die(‘Nie udało się wysłać wiadomości’); // wyświetlenie komunikatu w przypadku powodzenia echo "
Wiadomość została wysłana poprawnie!"; } // lub w przypadku nie wypełnienia formularza do końca else echo “Wypełnij wszystkie pola formularza!”; ?> [/code] Captcha (mam kod w postaci 3 plików) Nazwa pliku: index.php Kod:

[code] image.php Nazwa pliku: process.php Kod:

?php

session_start(); // start sesji

$session = $_SESSION['captcha']; // zdefiniowanie sesji

$image = $_POST['image'];

$image = md5($image); // szyfrowanie MD5


if ($session == $image){ //dalsze instrukcje, jeśli token jest poprawny

echo "KOD POPRAWNY";

}

// dalsze instrukcje, jeśli token jest błędny tutaj możesz ustawić czy chcesz mieć tylko informację o błędnym kodzie lub usuń // przed header i powrócisz do formularza

else{

//header("Location: form.php");

echo "

"; echo "
"; echo "BŁĘDNY KOD
"; echo "
"; echo "

"; } echo “”; ? [/code] Nazwa pliku: image.php Kod:

[code] ?php session_start(); //Zapraszam do dystrybucji i wykorzystania jak chcesz //Wystarczy pozostawić poniższy nagłówek i komentarze nienaruszone // GENERATOR TOKENA - CAPTCHA //Email: int-24@wp.pl //Web: www.int24.unl.pl // wysłanie nagłówków do przeglądarki header ("(anti-spam-content-type:) image/jpg"); // generowanie liczb losowych do wykorzystania w naszym szyfrowaniu $enc_num = rand(0, 9999); // numer ten jest szyfrowany $key_num = rand(0, 24); // używany ciąg znaków wykorzystany na obrazku // użyj losowy ciąg cyfr i liter przy użyciu MD5 // ilość wyświetlanych znaków w naszym przypadku 5 $hash_string = substr(md5($enc_num), $key_num, 5); $hash_md5 = md5($hash_string); // przypisanie do sesji $_SESSION[‘captcha’] = $hash_md5; // tworzą zestaw obrazów jako tło pod tokenem $bgs = array(“back1.jpg”, “back2.jpg”, “back3.jpg”); // wybiera obraz tła przy użyciu funkcji podręcznej array_rand $background = array_rand($bgs, 1); // ustawia jako tło losowo wybrany gif $img_handle = imagecreatefromjpeg($bgs[$background]); // kolor czcionki, tekstu $text_colour = imagecolorallocate($img_handle, 0, 0, 0); // wielkosc czcionki, tekstu $font_size = 5; // pobierz wymiary poziome i pionowe obrazu tla $size_array = getimagesize($bgs[$background]); $img_w = $size_array[0]; $img_h = $size_array[1]; // pozycja pozioma $horiz = round(($img_w/2)-((strlen($hash_string)*imagefontwidth(5))/2), 1); // pozycja pionowa $vert = round(($img_h/2)-(imagefontheight($font_size)/2)); // umieść wygenerowany tekst na tle imagestring($img_handle, $font_size, $horiz, $vert, $hash_string, $text_colour); // tworzenie obrazu imagejpeg($img_handle); // usuwanie obrazu imagedestroy($img_handle); ?

Sprawdzenie na początku czy któreś wymagane pole jest puste (if(empty($zmienna))…), i wtedy wyświetlenie stosownego komunikatu, lub przekierowanie do strony formularza. Można też np. Dodać zmienne sesji, typu

$_SESSION[‘komunikat’] I wtedy sprawdzić na str. formularza czy jest pusta, jeżeli nie to wyświetlić komunikat. I w ten sposób możesz też przypisywać wartości do zmiennych sesjii, i potem jako default do formularza dodać, żeby użytkownik nie musiał wpisywać wielokrotnie tego co już wpisał. Mam nadzieję że w miare zrozumiale napisałem.

Pozdrawiam

PS. nie zapomnij o session_start();

Dzięki za odpowiedz, ale nie jestem w stanie samodzielnie zmodyfikować kod na podstawie tego co napisałeś. Jak już napisałam nie znam się w ogóle na PHP, znam jedynie CSS I HTML.

PHP także będę się uczyć, ale teraz czas mnie goni, gdyż chcę wstawić stronę z formularzem mailowym w PHP, a nie zwykłym adresem mail bez captcha nie wstawię przecierz formularza bo spam stronę zaleje. Zanim będę w stanie coś napisać sama w PHP minie jeszcze sporo czasu. Kod formularza i captcha znalazłam w necie.

Proszę Was więc o gotowca, jak to wszystko połączyć, co i gdzie dopisać ?

Nie chcę być niemiły ale “Proszę Was więc o gotowca, jak to wszystko połączyć, co i gdzie dopisać ?”. Znajdź kogoś, poproś albo zapłać niech zrobi. Forum jest od pomagania, a nie od wykonywania całej pracy za kogoś.

Właśnie tu chodzi przecież o pomoc, a nie wykonywanie całej pracy, zapominasz, że przecież mam gotowy kod fomularza i captcha, z których zresztą nie tylko ja, ale i ty czy też inni użytkownicy mogą skorzystać i proszę właśnie o pomoc pytając się gdzie i jaki kod mam dopisać. Rozwiązanie pewnie sprowadza się do napisania 2 linijek kodu i wklejenia tego co jest do odpowiedniego pliku, czy miejsca w kodzie; a nie wykonywania całej pracy.

Podejrzewam, że poniższy kod wystarczy wkleić w miejsce w pliku process.php, gdzie jest napisane //dalsze instrukcje, jeśli token jest poprawny i wszystko będzie działało, ale z uwagi, że nie miałam doczynienia z php nie wiem jak to zrobić, przecież wystarczy najdrobniejszy błąd w znacznikach i nie będzie działało.

Udało mi się wstawić captcha do formularza, ale nie wiem gdzie wstawić polecenie wysłania na podany mail:

Chodzi o wstawienie tego kodu, zapewne trzeba to wstawić w plik process.php, ale jak i gdzie ? Próbowałam wstawiać w process.php, ale pojawia się błąd parsowania, zapewne robię coś nie tak, bez poniższego kodu parser poprawnie interpretuje instrukcje:

Kod do wstawienia w plik process.php:

<?php

if(empty($_POST['submit'])){

?>

<?php

}elseif(!empty($_POST['imienazwisko']) && !empty($_POST['email']) && !empty($_POST['trescwiadomosci'])){

/* Funkcja sprawdzająca poprawność E-Maila */

function SprawdzEmail($email) {

 if (!eregi("^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,4}$" , $email)){

  return false;

 }

 return true;

}

if(SprawdzEmail($_POST['email'])){

/* Tworzymy szkielet wysyłanej wiadomości */

$adresemail="twoj-adres@email.pl";

$ip=$_SERVER['REMOTE_ADDR'];

$host=gethostbyaddr($_SERVER['REMOTE_ADDR']);

$wiadomosc="Od: $_POST[imienazwisko] ($_POST[email])\nIP: $ip, HOST: $host\n\n$_POST[trescwiadomosci]";

$nadawca="From: $_POST[email]";

@mail($adresemail, "Formularz kontaktowy", "$wiadomosc", "$nadawca") or die('Formularz nie został wysłany');

echo "Dziękujemy, formularz został wysłany.";

}else{ echo "Wprowadzony adres E-Mail jest niepoprawny"; }

}else{ echo "Wypełnij wszystkie pola formularza"; }

?>

Formularz z captcha:

| Imię i Nazwisko: | |
| E-Mail: | |
| Treść wiadomości: | |
|   | image.php | | |
[/code] Kod pliku process.php:

[code]?php session_start(); // start sesji $session = $_SESSION[‘captcha’]; // zdefiniowanie sesji $image = $_POST[‘image’]; $image = md5($image); // szyfrowanie MD5 if ($session == $image){ //dalsze instrukcje, jeśli token jest poprawny echo “KOD POPRAWNY”; } // dalsze instrukcje, jeśli token jest błędny tutaj możesz ustawić czy chcesz mieć tylko informację o błędnym kodzie lub usuń // przed header i powrócisz do formularza else{ //header(“Location: form.php”); echo "
"; echo "
"; echo "BŁĘDNY KOD
"; echo "
"; echo "

"; } echo “”; ?

Jeszcze do wyższej swojej wypowiedzi chciałbym dodać, że dobrze by było poprawić sam formularz. Tabele służą do prezentacji danych tabelarycznych, a nie do ustawiania wygladu formularza. Jak będe miał trochę czasu to postaram się coś pomóc. Pozdrawiam

Dzięki ptasior, o tabelach wiem, że nie powinnam ich używać, a zamiast nich korzystać z divów, ale dopiero od niedawna interesuje się webmasteringiem. W moim kursie było tak, że nauka tworzenia stron www rozpoczynała się od tabel i html, w efekcie czego kiedy już nauczyłam się html i stworzyłam moją pierwszą stronę to doszłam do CSS i divów. Strona dlatego niestety na razie będzie na tabelach. Stopniowo będę ją modyfikować z transitional na strict oraz tabele zmieniać na div.

Zaczęłam budować formularz w PHP z captcha od podstaw. Wystarczyło wpisać po prostu do pliku captcha – process.php po linii: if ($session == $image){ //dalsze instrukcje, jeśli token jest poprawny następujący kod:

if(mail('jan_testowy@serwer.pl', 'Witaj', 'Oto test funkcji mail'))

    {

       echo 'Wiadomość została wysłana';

    }

i wszystko działa, wiadomości docierają, captcha działa. Pozostaje jeszcze problem walidacji pól formularza, ale mam nadzieję, że i z tym sobie jakoś poradzę. Nadal jednak czekam na Wasze uwagi i rady. Interesuje mnie także jakiś dobry kurs PHP od podstaw.