Witam :) Mam mały problem, ponieważ działał mi kod PHP w formularzu kontaktowym gdy miał pierwsze trzy okienka do wpisania. W momencie dodania kolejnych kod przestał działać. Mógłbym liczyć na wasza pomoc? PHP i HTML przesyłam w załączniku. Pozdrawiam i dziękuję.
Kod wrzuć na forum, zabawy w załączniki są uciążliwe, a to Tobie powinno zależeć, żeby nam było jak najłatwiej Tobie pomóc.
Dwa: co to znaczy "przestał działać", jakie są tego efekty?
Trzy: włącz pokazywanie wszystkich błędów, zanim cokolwiek wrzucisz na forum. Większość takich podstawowych problemów w ten sposób rozwiążesz.
Miałem na myśli to, że wcześniej normalnie wysyłało mi wiadomość z danymi a po dodaniu kolejnych rubryczek przestało wysyłać. Natomiast gdy znowu usunę tylko do trzech rubryk to znowu działa.
<?php
if (count($_POST))
{
////////// USTAWIENIA //////////
$email = 'tu.byl.moj.e-mail'; // Adres e-mail adresata
$subject = 'Kontakt przez formularz'; // Temat listu
$message = '<font size="24"><br><br><br>Twoja wiadomość została wysłana!<br><br><br><br></font>'; // 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
{
?>
<form action="?" method="post">
</form>
<?php
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" />
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>asd</title>
<link href="style.css" rel="stylesheet" type="text/css">
</head>
<body>
<div id="strona">
<div id="zawartosc">
<div id="formularz">
<form name="formularz1" action="wyslij.php" method="post">
<br>
<center><font size="3"><b>Imię:</b><br><input type="text" name="Imie"/><br><br>
<b>Nazwisko:</b><br><input type="text" name="Nazwisko" /><br><br>
<b>Rok urodzenia:</b><br><input type="text" name="Rok urodzenia" />
<p><b>Adres E-mail:</b><br><input type="text" name="Email" />
<p><b>Telefon komórkowy:</b><br><input type="text" name="Telefon komórkowy" />
<p><b>Miasto:</b><br><input type="text" name="Miasto" />
<p><b>Województwo:</b><br><input type="text" name="Województwo" /></font>
</p><br>
<button type="button">Wyslij</button>
</center></form>
</div>
</div>
</body>
</html>
Lepiej w nazwach dla inputów nie dawaj polskich znaków, ani spacji. Wyświetl zawartość $_POST i zobacz co tam dostajesz.
Sarrus napisał(a):
Wyświetl zawartość $_POST
nie rozumiem
var_dump($_POST);
Wielki Kot napisał(a):
Sarrus napisał(a):
Wyświetl zawartość $_POST
nie rozumiem
A znasz takie coś jak var_dump albo print_r?
Weź na czas testów wyświetl zawartość $_POST w ten sposób:
echo var_dump($_POST)
http://php.net/manual/en/function.var-dump.php
http://php.net/manual/en/function.print-r.php
Ogólnie kod jest dość trudny a analizie, sformatuj chociaż jakimś narzędziem online:
Nie znam tych poleceń. Czyli dopisać po prostu gdzieś na początku echo var_dump($_POST)
tak? Czy że w miejsce $_POST</code> wklepać <code>echo var_dump($_POST)
Zaraz przed tym
echo mail($email, "=?$charset?B?" . base64_encode($subject) . "?=", $body, $head) ? $message : $error;
daj:
var_dump($_POST)
Ewentualnie przed tą pętlą foreach. Chodzi o to co się wyświetli bo tak inaczej nie dojdziesz. Zresztą sam to może przetestuję.
A więc tak: sam to sprawdziłem i podaję tu działający przykład (u mnie jednak zakomentowałem to co wysyła dane mailem)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" />
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
<link href="style.css" rel="stylesheet" type="text/css">
</head>
<body>
<div id="strona">
<div id="zawartosc">
<div id="formularz">
<form name="formularz1" action="wyslij.php" method="post">
<br>
<center><font size="3"><b>Imię:</b><br><input type="text" name="Imie"/><br><br>
<b>Nazwisko:</b><br><input type="text" name="Nazwisko" /><br><br>
<b>Rok urodzenia:</b><br><input type="text" name="Rok_urodzenia" />
<p><b>Adres E-mail:</b><br><input type="text" name="Email" />
<p><b>Telefon komórkowy:</b><br><input type="text" name="Telefon_komorkowy" />
<p><b>Miasto:</b><br><input type="text" name="Miasto" />
<p><b>Województwo:</b><br><input type="text" name="Wojewodztwo" /></font>
</p>
<br>
<input type="submit"></input>
</center>
</form>
</div>
</div>
</body>
</html>
Ma być
<input type="submit"></input>
zamiast <button type="button">Wyslij</button>
bo nie działało i nie wywoływało w ogóle skrytpu PHP. Wyżej atrybuty name są bez spacji, zamiast tego znak podkreślenia i nie ma żadnych polskich znaków.
Skrypt PHP:
```php
<div id="strona">
<div id="zawartosc"><center><?php
if (count($_POST)) {
////////// USTAWIENIA //////////
$email = 'tu.byl.moj.e-mail'; // Adres e-mail adresata
$subject = 'Kontakt przez formularz'; // Temat listu
$message = '<font size="24"><br><br><br>Twoja wiadomość została wysłana!<br><br><br><br></font>'; // 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";
}
//tutaj dla sprawdzenia (sprawdzenie co jest w $_POST)
echo 'BODY: <BR><BR>';
echo $body . '<BR>';
echo $message;
//to nizej odkomentowac
//echo mail($email, "=?$charset?B?" . base64_encode($subject) . "?=", $body, $head) ? $message : $error;
} else {
?>
<form action="?" method="post">
</form>
<?php
}
?></center></div>
<div id="stopka"></div>
</div>
</body>
</html>
Niestety nie działa. Zamiast wysłać mi to na emaila pokazuje mi wszystko nad wiadomością o "powodzeniu przesłanego formularza"
Chciałbym dodać, że kod PHP po prostu skopiowałem i wkleiłem, ze zmianą e-maila.
Właśnie to ja na potrzeby testów celowo zakomentowałem, odkomentuj to
echo mail($email, "=?$charset?B?" . base64_encode($subject) . "?=", $body, $head) ? $message : $error;
Usunąłem to i dalej to samo...
Nawet to -> // usuwałem i dalej nic.
Teraz działa natomiast dalej wyskakuje ten tekst/błąd co na zdjęciu wyżej
Może to ma coś wspólnego z tym?
//tutaj dla sprawdzenia (sprawdzenie co jest w $_POST)
echo 'BODY: <BR><BR>';
echo $body . '<BR>';
echo $message;
dodanie znacznika <code class="php">
- @furious programming
Sprawdź logi serwerów, a nie zgadujesz.
A w ogóle to co to ma być:
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";
}
:|
usunąłem to co wyżej zaznaczyłem i wszystko działa poprawnie. Dziękuję wam bardzo !