herbit

polskie znaki w formularzu - again

Polecane posty

Na wstępie poproszę, aby nie odsyłać mnie do google. Na prawdę siedzę kolejną godzinę szukając rozwiązania na różnych forach i po prostu wysiadam już.

Nie jestem programistą, nie znam się na php. W sieci da się znaleźć sporo skryptów, które za pomocą funkcji kopiuj-wklej dostosowuję do swoich potrzeb. Nie inaczej było i w tym przypadku. Potrzebowałem prostego formularza do zamawiania ogłoszeń drobnych w gazecie regionalnej i takowy znalazłem. Wszystko śmiga bez zarzutów, po czym dowiaduję się, że u osoby odbierającej zgłoszenia wysyłane za pomocą formularza, nie wyświetlają się polskie znaki. Sprawa o tyle mnie zdziwiła, że wspomniane zgłoszenia na mojego maila przychodzą z polskimi znakami. Nie bardzo wiem co dalej robić.

Kod formularza:

<form method="POST" name="contactform" action="contact-form-handler.php">

<p>

<br>

<label for='tresc'>Treść:</label> <br>

<textarea name="tresc" cols="40" class="form_red"></textarea>

</p>

<p>

<br>

Wersja

<br>

<select name="wersja" size="1" class="form_red">

<option value="podstawowa">podstawowa</option>

<option value="pogrubienie">pogrubienie</option>

<option value="wersalik">wersalik</option>

<option value="pogrubiony wersalik">pogrubiony wersalik</option>

</select>

</p>

<p>

<br>

Ramka

<br>

<select name="ramka" size="1" class="form_red">

<option value="nie">nie</option>

<option value="tak">tak</option>

</select>

</p>

<p>

<br>

Ilość edycji

<br>

<input name="ilosc" type="text" class="form_red" size="2" maxlength="2">

</p>

<p>

<br>

<strong>Dane kontaktowe</strong>

</p>

<p>

<br>

<label for="imie">imie i nazwisko</label><br>

<input name="imie" type="text" class="form_red" id="imie">

</p>

<p>

<br>

<label for="tel">Telefon</label><br>

<input name="tel" type="text" class="form_red">

</p>

<p>

<br>

<label for="email">Email</label><br>

<input name="email" type="text" class="form_red">

</p>

<p>

<br>

<strong>Faktura VAT</strong>

</p>

<p>

<br>

<label for="firma">Nazwa firmy</label><br>

<input type="text" name="firma" id="firma">

</p>

<p>

<br>

<label for="adres">Adres</label><br>

<input name="adres" type="text">

</p>

<p>

<br>

<label for="miejscowosc">Miejscowość</label><br>

<input name="miejscowosc" type="text">

</p>

<p>

<br>

<label for="kod">Kod pocztowy</label><br>

<input name="kod" type="text">

</p>

<p>

<br>

<label for="nip">NIP</label><br>

<input name="nip" type="text">

</p>

<p>

<br>

<input type="submit" value="Wyślij"><br></p>

</form>

Kod php:

<?php

$errors = '';

$myemail = 'somadream@wp.pl';//<-----Put Your email address here.

if(empty($_POST['imie']) ||

empty($_POST['email']) ||

empty($_POST['tel']))

{

$errors .= "\n Błąd: Proszę wypełnić wymagane pola";

}

$tresc = $_POST['tresc'];

$imie = $_POST['imie'];

$email_address = $_POST['email'];

$tel = $_POST['tel'];

$ilosc = $_POST['ilosc'];

$wersja = $_POST['wersja'];

$ramka = $_POST['ramka'];

$firma = $_POST['firma'];

$adres = $_POST['adres'];

$miejscowosc = $_POST['miejscowosc'];

$kod = $_POST['kod'];

$nip = $_POST['nip'];

if (!preg_match(

"/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i",

$email_address))

{

$errors .= "\n Błąd: Nieprawidłowy adres email";

}

if( empty($errors))

{

$to = $myemail;

$email_subject = "Ogłoszenie drobne - osoba zamawiająca: $imie";

$email_body = "OGŁOSZENIE DROBNE".

" Szczegóły zamówienia: \n treść: $tresc \n ilość: $ilosc \n wersja: $wersja\n ramka: $ramka\n imię i nazwisko: $imie \n email: $email_address \n telefon: $tel \n nazwa firmy: $firma \n adres: $adres \n miejscowość: $miejscowosc \n kod pocztowy: $kod \n nip: $nip";

$headers = "Od: $myemail\n";

$headers .= "Adres email nadawcy: $email_address";

mail($to,$email_subject,$email_body,$headers);

//redirect to the 'thank you' page

header('Location: thankyou.html');

}

?>

<!doctype html>

<html>

<head>

<title>Contact form handler</title>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

</head>

<body>

<!-- This page is displayed only if there is some error -->

<?php

echo nl2br($errors);

?>

</body>

</html>

Będę wdzięczny za jakąkolwiek pomoc.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Zainteresuj się nagłówkami wiadomości pocztowej w kontekście określenia kodowania:

"Content-Type: text/plain; charset=UTF-8\n"

http://www.php.net/m...nction.mail.php

----

lub: http://www.google.pl/search?hl=pl&q=mail+php+polskie+znaki+utf-8

Edytowano przez Mion

redbanner.png

 

HTTP 200 usługi IT - Dariusz Janicki | Realizacja serwisów ww oraz oprogramowania.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

U mnie w zmiennej ze wzoru jest iso-8859-2, ale sam wstawiasz kodowanie, jakie chcesz. Powinno śmiagać.

$header= "From: $email \nContent-type: text/html; charset=iso-8859-2; \r\n";


Nie przegrałeś, dopóki walczysz!

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Przepraszam, że podpinam się pod temat ale nie chcę zaśmiecać forum.

Już 2 godziny przeszukuję google i nadal nie wiem jak rozwiązać mój problem, a mianowicie po pobraniu tekstu z bazy danych mySQL nie wyświetlają mi się polskie znaki.

W sekcji head pliku .php mam:

<meta charset="uft-8" />

więc to nie z winy kodowania html.

Do obsługi mySQL używam phpmyadmin online dostarczanego przez home.pl (mam u nich serwer) i tu się prawdopodobnie pogubiłem. Są w sumie 3 okienka do wyboru czegoś językopodobnego (poczętkujący jestem :P) "Sortowanie połączenie z serwerem", oraz 2x "Metoda porównywania napisów" (zarówno w ustawieniach bazy jak i konkretnej tabeli). Próbowałem to poustawiać na wszystkie możliwe sposoby ale ciągle zamiast polskich liter mam krzaczki (znaki zapytania w czarnych rombach).

Zarówno PHP jak i my SQL zacząłem się uczyć niedawno więc prosiłbym o wyjaśnienie wszystkiego łopatologicznie :P

Wydaje mi się, że nie ma potrzeby wklejać kodu bo problem jest dosyć ogólny ale jeśli się okaże, że jest inaczej to oczywiście wkleję.

Pozdrawiam i z góry dziękuję za pomoc.

edit//

Jeśli to ma jakieś znaczenie to w notepadzie++ mam ustawione kodowanie znaków na UTF-8

Edytowano przez skorpionek

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Poczytaj o

"mysql_query("SET NAMES utf8");

mysql_query("SET CHARACTER SET utf8");

mysql_query("SET collation_connection = utf8_polish_ci");"

Pozatym sprawdz czy w bazie masz polskie znaki.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Mam niestety podobny problem. Poniższy formularz nie przesyła polskich znaków:

 

<?php
$mail->CharSet="UTF-8";

    // specify your email here
    $to = 'mail@mail.pl';

 

    // Assigning data from $_POST array to variables
    if (isset($_POST['name'])) { $name = $_POST['name']; }
    if (isset($_POST['email'])) { $from = $_POST['email']; }
    if (isset($_POST['company'])) { $company = $_POST['company']; }
    if (isset($_POST['message'])) { $message = $_POST['message']; }
    
    // Construct subject of the email
    $subject = 'Wiadomość ze strony internetowej od ' . $name;

    // Construct email body
    $body_message .= 'Imię: ' . $name . "\r\n";
    $body_message .= 'Email: ' . $from . "\r\n";
    $body_message .= 'Telefon: ' . $company . "\r\n";
    $body_message .= 'Wiadomość: ' . $message . "\r\n";

    // Construct headers of the message
    $headers = 'Od: ' . $from . "\r\n";
    $headers .= 'Odpowiedz: ' . $from . "\r\n";

    $mail_sent = mail($to, $subject, $body_message, $headers);

    if ($mail_sent == true){ ?>
<script language="javascript" type="text/javascript">
        window.alert("Dziekujemy za wysłanie wiadomości! Skontaktujemy się z Państwem w najbliższym czasie.");
        </script>
<?php } else { ?>
<script language="javascript" type="text/javascript">
                    window.alert("Wystąpił błąd podczas wysyłania wiadomości. Prosimy spróbować ponownie.");
                </script>
<?php
    } // End else
    
?>


HTML wygląda tak mniej więcej:

 

<html lang="pl-PL">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
</head>


Zastanawiam się gdzie może tkwić błąd?
 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Pliki zapisuj jako utf-8 NIE ANSI


redbanner.png

 

HTTP 200 usługi IT - Dariusz Janicki | Realizacja serwisów ww oraz oprogramowania.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Zastosuj jakąś sprawdzona klasę do wysyłki e-maili np: https://github.com/PHPMailer/PHPMailer


redbanner.png

 

HTTP 200 usługi IT - Dariusz Janicki | Realizacja serwisów ww oraz oprogramowania.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony


  • Kto przegląda   0 użytkowników

    Brak zalogowanych użytkowników przeglądających tę stronę.

  • Podobna zawartość

    • Przez Robert76
      Mam problem przy dodawaniu do bazy danych
      Jak odczytuje z bazy tekst z polskimi znakami to wszystko jest ok
      Natomiast jeżeli chcę coś dodać (insert into) to nasze ó nie wchodzi.
      Po połączeniu z bazą danych dałem::
      mysql_query('set names utf8');
      mysql_query('set character set utf8');
      mysql_query('set collation_connection = utf8_polish_ci');
      To wywala mi komunikat:
      Warning: mysql_query() [function.mysql-query]: Access denied for user 'SYSTEM'@'localhost' (using password: NO) in C:\wamp\www\kwatery2\dopisywarka2.php on line 23
      Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in C:\wamp\www\kwatery2\dopisywarka2.php on line 23
      Warning: mysql_query() [function.mysql-query]: Access denied for user 'SYSTEM'@'localhost' (using password: NO) in C:\wamp\www\kwatery2\dopisywarka2.php on line 24
      Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in C:\wamp\www\kwatery2\dopisywarka2.php on line 24
      Warning: mysql_query() [function.mysql-query]: Access denied for user 'SYSTEM'@'localhost' (using password: NO) in C:\wamp\www\kwatery2\dopisywarka2.php on line 25
      Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in C:\wamp\www\kwatery2\dopisywarka2.php on line 25
      Gdzie mam to hasło dać? a może te funkcje powinienem gdzie indziej wpisać?
      Może mnie ktoś oświecić?
    • Przez KrisTex
      2 domeny: jedna z polskimi znakami druga bez (podobna zawartość) ta bez polskich znaków świetnie się pozycjonuje a ta z polskimi znakami to jakiś kosmos, przypuszczałem nawet że nie taktuje strony jako polskiej i dlatego w serpach jej nie widać,ale jednak jest 12 -15 strona. do tego ciągly problem z analyticsem który nie czyta wszystkich wejść. Chyba już nigdy nie kupię domeny z polsimi znakami. Czy macie podobne spostrzeżenia, czy to może mi się coś sp.....liło ?
    • Przez Prysiu
      Hej!
      Chcę przekierować stronę http://www.przyklad....żółć_Gęślą_Jaźń na http://www.przyklad....zolc-gesla-jazn - obie strony są identyczne, od strony serwera to to samo, adresy wygenerowane (w cakephp) routerem i slugiem (w obu przypadkach różnym).
      W normalnej sytuacji po prostu bym utworzył nowe adresy, a stare wywalił. Niestety stare są już podlinkowane i z pewnością dużo bym przez to stracił w wyszukiwarkach.
      Jako, że z przekierowaniem adresów z polskimi znakami w htaccess sobie nie poradziłem (to w ogóle możliwe?) to wymyśliłem, że przekieruję strony 1:1 filtrując je po powtarzalnym ciągu "186". Więc...
      Mam w .htaccess regułę:

      RewriteEngine On RewriteBase / RewriteRule ^.*/186/.*$ http://www.przyklad.pl/kategoria/186/test-zazolc-gesla-jazn [R=301,L,QSA]
      I o dziwo od strony "widzialnej" działa, ponieważ adres generowany jest prawidłowo. Jednak zamiast strony pojawia się błąd 404 (sprawdziłem literówki )
      Help!