Utworzyłem formularz do wysyłania wiadomości. Chciałem wprowadzić małe zabezpieczenie związane z autoryzacją, wszystko fajnie śmiga tylko że gdy dam wyślij to wyskakuje mi że hasło jest nie poprawne choć tak naprawdę kod przepisany jest prawidłowo. Wydaje mi się że trochę namieszałem w tym kodzie i teraz nie mogę dojść gdzie są te błędy. Jeśli ktoś miałby chwilkę i naprawił moje błędy. Do tego kodu są jeszcze dwa inne skrypty, ale one są w stu procentach sprawne.
<?php
if (count($_POST))
{
if ($_POST[mail] == "" || $_POST[tresc]=="")
{
?>
e-mail:
Treść:
Wyślij
Wyczyść
<?php
session_start();
$kod = md5(md5($ID)); //generujemy 32-bitowy token zawartości zmiennej ID przesłanej z formularza autoryzacja.php i przypisujemy do zmiennej kod
if ($kod==$sprawdz) //sprawdzamy czy kod się zgadza
{
} else{
////////// USTAWIENIA //////////
$email = 'bukrudy8@gmail.com'; // Adres e-mail adresata
$subject = 'Reklama na kort'; // Temat listu
$message = 'Dziękujemy za wysłanie formularza'; // Komunikat
$error = 'Wystšpił błšd podczas wysyłania formularza'; // Komunikat błędu
$charset = 'iso-8859-2'; // Strona kodowa
//////////////////////////////
$head =
"MIME-Version: 1.0\r\n" .
"Content-Type: text/plain; charset=$charset\r\n" .
"Content-Transfer-Encoding: 8bit";
$body = '';
foreach ($_POST as $name => $value)
{
if (is_array($value))
{
for ($i = 0; $i < count($value); $i++)
{
$body .= "$name=" . (get_magic_quotes_gpc() ? stripslashes($value[$i]) : $value[$i]) . "\r\n";
}
}
else $body .= "$name=" . (get_magic_quotes_gpc() ? stripslashes($value) : $value) . "\r\n";
}
echo mail($email, "=?$charset?B?" . base64_encode($subject) . "?=", $body, $head) ? $message : $error;
} }
else
{
echo "haslo niepoprawne"; //wyświetlamy stosowną informację
}
session_unregister('sprawdz'); //usuwamy z sesji wartość sprawdz
}
?>
e-mail:
Tre¶ć:
<?
include ("autoryzacja.php");
?>
[/code]
Mam też prośbę jakby ktoś mógłby mi wskazać gdzie mogę wrzucić kod podany tutaj
Źle posłużyłeś się tablicą $_POST. Zmienne, do których się odwołujesz powinieneś umieścić w apostrofach. Warunek sprawdzający również niepoprawny.
W Twojej wersji skrypt zostawał uruchamiany, gdy przynajmniej jedno pole formularza było puste. Powinien wyglądać tak:
if ($_POST[‘mail’] != “” && $_POST[‘tresc’] != “”) {…}
Poza tym, algorytm do wysyłania maila wrzuciłeś w złym miejscu - else{…}. W obecnym stanie mail zostanie wysłany, gdy hasło będzie inne niż kod autoryzacyjny. Algorytm powinieneś był wrzucić do if-a wyżej.
Nigdzie nie widać przypisania wartości do zmiennej $sprawdz, ale zakładam, że masz to gdzieś wcześniej.
Wrzuciłem też kod sprawdzający poprawność maila. Całość powinna wyglądać mniej więcej tak (rób wcięcia - kod będzie czytelniejszy ):
<?php
if (count($_POST)) {
if ($_POST['mail'] != "" && $_POST['tresc'] != "") {
if (preg_match("/^([a-z0-9_-])+([\.][a-z0-9_-]+)*[a-z0-9]@([a-z0-9-])+(\.[a-z0-9-]+)*\.([a-z]{2,6})$/", $_POST['mail'])) {
?>
e-mail:
Treść:
Wyślij
Wyczyść
<?php
session_start();
$kod = md5(md5($ID)); //generujemy 32-bitowy token zawartości zmiennej ID przesłanej z formularza autoryzacja.php i przypisujemy do zmiennej kod
if ($kod==$sprawdz) { //sprawdzamy czy kod się zgadza
////////// USTAWIENIA //////////
$email = 'bukrudy8@gmail.com'; // Adres e-mail adresata
$subject = 'Reklama na kort'; // Temat listu
$message = 'Dziękujemy za wysłanie formularza'; // Komunikat
$error = 'Wystąpił błąd podczas wysyłania formularza'; // Komunikat błędu
$charset = 'iso-8859-2'; // Strona kodowa
//////////////////////////////
$head =
"MIME-Version: 1.0\r\n" .
"Content-Type: text/plain; charset=$charset\r\n" .
"Content-Transfer-Encoding: 8bit";
$body = '';
foreach ($_POST as $name => $value) {
if (is_array($value)) {
for ($i = 0; $i < count($value); $i++) {
$body .= "$name=" . (get_magic_quotes_gpc() ? stripslashes($value[$i]) : $value[$i]) . "\r\n";
}
}
else $body .= "$name=" . (get_magic_quotes_gpc() ? stripslashes($value) : $value) . "\r\n";
}
echo mail($email, "=?$charset?B?" . base64_encode($subject) . "?=", $body, $head) ? $message : $error;
}
else {
echo "haslo niepoprawne"; //wyświetlamy stosowną informację
}
}
else echo 'Niepoprawny adres email.'; //komunikat, jeśli adres email nie jest prawidłowy
}
session_unregister('sprawdz'); //usuwamy z sesji wartość sprawdz
}
?>
e-mail:
Treść:
<?
include ("autoryzacja.php");
?>
[/code]
Wielkie dzięki za poprawienie. Nie jestem dobry w programowaniu. Jednak nadal nie wszystko działa. Po kliknięciu w wyślij pojawiał się drugi formularz jednak już bez autoryzacji. Usunąłem tą część kodu:
e-mail:
Treść:
Wyślij
Wyczyść
[/code]
I już drugie okienko się nie pojawiało, nadal cały czas wyskakuje że podane hasło jest nie poprawne.