herbit

polskie znaki w formularzu - again

12 postów w tym temacie

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

Się naszukałem, nazmieniałem a w gruncie rzeczy to nie było takie trudne :)

Dzięki wielkie sirgomo

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

Dzięki za info Mion. Zapisałem tak formularz w notatniku (Zapisz jako>Kodowane UTF-8), niestety nadal brak polskich znaków.

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

A możesz mi dokładnie podać co mam zrobić, jaką klasę zastosować w którym miejscu? Niestety nie jestem programistą.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Chcesz dodać odpowiedź ? Zaloguj się lub zarejestruj nowe konto.

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

Utwórz konto

Zarejestruj nowe konto, to bardzo łatwy proces!


Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!


Zaloguj się

  • 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!