Strona 1 z 1

OT - zlecę usprawnienie formularza kontaktowego PHP

: 03 lut 2012, 07:52
autor: SUDi
Jak w temacie, chodzi o przeróbkę kodu PHP formularza kontaktowego na stronie www, żeby w mejlu przychodzącym z treścią zapytania wysłanego z tegoż formularza był napisany także IP komputera wysyłającego zapytanie. Zainteresowanych proszę na priv.

: 03 lut 2012, 14:41
autor: elban
wrzuc zrodlo.

to 5 minut roboty, jak Cie ktos za to skasuje, wiec niz dwa piwka to przylep mu post-it na czole z napisem 'kutas'.

: 03 lut 2012, 18:22
autor: SUDi
Postawie nawet 4-pak bez żółtej karteczki na czoło :)

Część PHP pliku form.php :

<?php
if( strlen($_POST['meno'])>0 && strlen($_POST['email'])>0 && strlen($_POST['tele'])>0 && strlen($_POST['odkaz'])>0)
{
$sprava =
"Osoba: ".$_POST['meno']."
Tel.: ".$_POST['tele']."
Tekst: ".$_POST['odkaz']." ";

$tema = "Wiadomosc - od ".$_POST['email'];

mail ("xxx@xxx.pl", $tema, $sprava,
"From: xxx@xxx.pl\r\n"
."Reply-To: xxx@xxx.pl\r\n"
."Content-Type: text/plain; charset=utf-8\r\n"
."Content-Transfer-Encoding: 8bit\r\n"
."X-Mailer: PHP/" . phpversion());

echo "<b>Dziękujemy za wysłanie formularza.</b>";
}
else
{
echo "<b>Niestety, nie można wysłać wiadomości.</b>";
}
?>

Część HTML na stronie z formularzem do wypełnienia :

<h3>Formularz</h3>
<p>Formularz kontaktowy.
<br />Kontaktować można też poprzez e-mail na &nbsp;&nbsp;<a href="mailto:xxx@xxx.pl?subject=">xxx@xxx.pl</a>
<br /><br /><b>Do prawidłowego działania, proszę wypełnić <u>wszystkie pola</u> formularza</b> :
<br /><br />
<form method="post" action="form.php" name="form">
<label for="meno">Osoba :</label><input type="text" class="text" id="meno" name="meno" size="50" maxlength="50" /><br />
<label for="email">Kontakt email :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</label><input type="text" name="email" class="text" id="email" size="50" maxlength="50" /><br />
<label for="tele">Nr tel. :&nbsp;&nbsp;&nbsp;&nbsp;</label><input type="text" name="tele" class="text" id="tele" size="50" maxlength="50" /><br />
<label for="odkaz">Treść :&nbsp;&nbsp;&nbsp;</label><textarea name="odkaz" id="odkaz" cols="56" rows="5">Tutaj wpisać tekst...</textarea><br /><br />
<input type="submit" value="Wyślij formularz" />
</form></p>

: 03 lut 2012, 18:46
autor: leming
tak na szybcika to daj

Kod: Zaznacz cały

<?php 

$ip = getenv( "REMOTE_ADDR" );
if( strlen($_POST['meno'])>0 && strlen($_POST['email'])>0 && strlen($_POST['tele'])>0 && strlen($_POST['odkaz'])>0) 
{ 
$sprava = 
"Osoba: ".$_POST['meno']." 
Tel.: ".$_POST['tele']." 
Tekst: ".$_POST['odkaz']." 
IP: $ip "; 

$tema = "Wiadomosc - od ".$_POST['email']; 

mail ("xxx@xxx.pl", $tema, $sprava, 
"From: xxx@xxx.pl\r\n" 
."Reply-To: xxx@xxx.pl\r\n" 
."Content-Type: text/plain; charset=utf-8\r\n" 
."Content-Transfer-Encoding: 8bit\r\n" 
."X-Mailer: PHP/" . phpversion()); 

echo "<b>Dziękujemy za wysłanie formularza.</b>"; 
} 
else 
{ 
echo "<b>Niestety, nie można wysłać wiadomości.</b>"; 
} 
?> 
i bedzie chulac.

: 03 lut 2012, 19:28
autor: SUDi
Dzięki Leming, śmiga aż miło.
To przy okazji trochę pogłębię temat :
- wysyłający wiadomość może "ominąć" w jakiś sposób wyświetlenie jego IP?
- czy z powodu jakichś zabezpieczeń, firewalli itp. po stronie wysyłającego może się stać że nie będzie mógł wysłać wiadomość przez ten form?

: 03 lut 2012, 19:40
autor: kmeg
SUDi pisze:może się stać że nie będzie mógł wysłać wiadomość przez ten form?
Może, IP zawsze jakieś będzie ale może być trochę inne niż rzeczywiste:
- różnego rodzaju proxy
- tunele
- ukrywacze typu TOR i spółka

Form będzie raczej zawsze działał...

: 03 lut 2012, 20:12
autor: elban
mozesz troche z ukrywaniem sobie pomoc (ale niewiele), na przyklad tak

zamiast

Kod: Zaznacz cały

$ip = getenv( "REMOTE_ADDR" ); 
daj:

Kod: Zaznacz cały

$headers = apache_request_headers();
if (array_key_exists('X-Forwarded-For', $headers)){
  $ip=$headers['X-Forwarded-For'] . ' via ' . $_SERVER["REMOTE_ADDR"];
} else {
  $ip=$_SERVER["REMOTE_ADDR"];
}
(via net ta funkcja, bo php nie pamietam, nie pisalem od lat w tym, wiec do sprawdzenia)
[/code]

: 03 lut 2012, 21:39
autor: SUDi
dzięki elban, będę próbował Twoją opcję...
temat jest dla mnie dość ciekawy, szczególnie że z takich spraw jestem zielony - jakbyś mi łopatologicznie wytłumaczył w czym pomoże ten kodzik? próbuje pobrać IP w inny sposób?

: 03 lut 2012, 22:57
autor: elban
jezeli w naglowku znajduje sie pole X_FORWARDED_FOR uzyj tego pola plus podaj IP. Czyli jezeli serwer www wykuma, ze ktos korzystal z proxy dostaniesz takie info. jezeli nie dostaniesz samo IP.

getevn i $_SERVER['REMOTE_ADDR'] to z grubsza to samo. Szczegoly poda dokumetnacja php.

: 04 lut 2012, 08:08
autor: SUDi
@elban : OK, wypróbowałem Twój kodzik, działa również, tzn. wyświetla coś takiego IP : numer.IP numer.IP via numer.IP...
próbowałem formularz wysłać normalnie "bez ukrycia", a potem przez strony anonimowe proxy (Glype i PHProxy) i w każdym przypadku wszystkie trzy numery.IP były takie same (oczywiście te anonimowe serwery miały zagraniczne IP, ale wszystkie trzy pokazało takie same).
Czyli na niewiele się to zdaje, chyba że istnieje możliwość że mógłbym coś spróbować włączyć jakąś opcję w ustawieniach serwera domeny. Za czym miałbym się rozglądać?

: 04 lut 2012, 09:56
autor: kotrobot
Gdyby można było "złamać" anonimowe proxy, czy tora kilkoma linijkami kodu, to korzystanie z tychże nie miałoby sensu. Odpuść.

: 04 lut 2012, 13:35
autor: elban
Tak jak pisze Cresh. Niektore proxy dodadza ten naglowek, inne nie.

Jak chcesz sledzic userow musisz byc cwanszy, ale to i tak bedzie zawsze do obejscia.