GhostDog napisał(a)
Odebrane z formularza? Możesz jaśniej? To są dane odebrane z bazy, czy tylko na jednej stronie testujesz formularz, która wyniki przesyła do samej siebie? (Nie chce mi się czytać całego tematu, więc pytam)
A metoda POST nie ma takiej siły sprawczej żeby zmienić kodowanie znaków samo z siebie, określ może kodowanie znaków w formie np accept-charset="ISO-8859-1".
Na jednej stronie testuję formularz, która wyniki przesyła do samej siebie.Dodałem accept-charset="UTF-8" oraz DOCTYPE (chodź tu nie jestem pewien czy prawidłowy). W każdym razie:
-Ustawione mam dobrze kodowania w bazie danach dla bazy i dla tabel
-strona poprawnie wyświetla polskie znaki (Notebad ++ - UTF8 bez BOM oraz odpowiednie meta)
-zapis z tej strony działa poprawnie, zapisują sie polskie znaki
- zapis danych z formularza (zamienia polskie znaki na krzaczki) powoduje zapis do bazy krzaczków (bo jakby inaczej)
Strona jest tutaj:
http://www.brzuszki.com.pl/komentarze/komentarze.php
Zamieszczę jeszcze kompletny kod:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//PL" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</HEAD>
<body>
<?php
mysql_connect ("localhost", "login", "*******") or //staramy połączyć się z bazą danych
die ("Blad polaczenia"); //jeżeli to się nie uda wyświetlamy
mysql_select_db ("usr_web24_1") or //wybieramy bazę
die ("Nie mozna sie polaczyc komentarze");
$zapytanie = "INSERT INTO komentarze (tresc, nick, "." data) VALUES ('Łukasz', 'łóżeczko małe', "." now());";
$wynik = mysql_query ('SET NAMES utf8');
$wynik = mysql_query ($zapytanie);
echo $zapytanie;
if(!isset($id)) { //odbieramy wartość zmiennej id
print"<A HREF=\"komentarze.php?id=nowy\">Dodaj nowy komentarz</A><HR>"; //jeżeli zmienna id nie ma przypisanej wartości
$wynik = mysql_query ("SELECT * FROM komentarze WHERE zatwierdz=1 order by nr desc;"); //wybieramy zatwierdzone komentarze i segregujemy według pola nr od wartości największej do najmniejszej
print"<UL>";
while ($rekord = mysql_fetch_array ($wynik, MYSQL_NUM)) { //mysql_fetch_array() zwraca nam tablicę indeksowaną numerycznie, gdzie indeks zaczyna się od 0 (MYSQL_NUM)
print "<LI><b>".$rekord[1] = stripslashes($rekord[1])."</b>, napisał: <br /> ".$rekord[2] = stripslashes($rekord[2])."</B>,<br /><i>data:".$rekord[3]."</i></LI>"; //za pomocą pętli while wyświetlamy wszystkie rekordy, które zostały zatwierdzone (wartość pola zatwierdz wynosi 1)
}
print"</UL>";
}else if ($id=='nowy') { //jeżeli zmienna id zawiera wyraz nowy
print "<HR>"; //wyświetlamy formularz do wpisania komentarza
print "<H3>Nowy komentarz:</H3>";
print "<FORM METHOD=\"POST\" accept-charset=\"UTF-8\"><INPUT TYPE=\"hidden\" NAME=\"id\" VALUE=\"dodaj\">";
print "<B>Pseudonim:</B><BR><INPUT TYPE=\"text\" NAME=\"nick\" VALUE=\"$nick\" SIZE=60><BR> ";
print "<B>Treść:</B><BR><TEXTAREA NAME=\"tresc\" ";
print "ROWS=10 COLS=60>$tresc</TEXTAREA><BR>";
print "<INPUT TYPE=\"submit\" VALUE=\"Wyślij\">";
print "</FORM>";
print "<a href=\"komentarze.php\">Powrót</a>";
}else if ($id=='dodaj') { // jeżeli zmienna id zawiera wartość dodaj
//dodajemy komentarz do bazy
$tresc = addslashes(nl2br(htmlentities ($tresc))); //ponieważ nie można ufać danym wprowadzanym przez użytkowników funkcją addslashes dodajemy ukośniki () w miejscach gdzie napotkanym na apostrof (‘), usuwamy je potem funkcją stripslahes przy wypisywaniu komentarzy, dodatkowo funkcja nl2br zamienia znaki końca linii na tag br
$nick = addslashes(htmlentities ($nick));
if ($tresc && $nick) { //jeżeli pola treść i pseudonim są uzupełnione
$wynik = mysql_query ('SET NAMES utf8');
$zapytanie = "INSERT INTO komentarze (tresc, nick, "." data) VALUES ('$tresc', '$nick', "." now());";
$wynik = mysql_query($zapytanie); //dodajemy wtedy dane do bazy wraz z aktualną datą i godziną – funkcja now()
print "<HR>";
echo $zapytanie;
print"<H4>Twój komentarz został, dodany do bazy. Ukaże się, gdy administrator go zatwierdzi</h4><br>"; //jeżeli wszystko przebiegnie bez problemów wyświetlamy komunikat
print"<a href=\"komentarze.php\">Powrót</a>";
}else{ //jeżeli jednak nie wyświetlamy stosowną informację
print "<HR>";
print"<h4>Pola pseudonim i treść muszą być wypełnione ! Kliknij wstecz w swojej przeglądarce i popraw te dane !</h4>";
}
}
else { //jeżeli zmienna id zawiera inną wartość niż dodaj lub nowy wyświetlamy wszystkie zatwierdzone komentarze
print"<A HREF=\"komentarze.php?id=nowy\">Dodaj nowy komentarz</A><HR>";
$wynik = mysql_query ("SELECT * FROM komentarze WHERE zatwierdz=1 order by nr desc;"); //wybieramy zatwierdzone komentarze i segregujemy według pola nr od wartości największej do najmniejszej
print"<UL>";
while ($rekord = mysql_fetch_array ($wynik, MYSQL_NUM)) { //mysql_fetch_array() zwraca nam tablicę indeksowaną numerycznie, gdzie indeks zaczyna się od 0 (MYSQL_NUM)
print "<LI><b>".$rekord[1] = stripslashes($rekord[1])."</b>, napisał: <br /> ".$rekord[2] = stripslashes($rekord[2])."</B>,<br /><i>data:".$rekord[3]."</i></LI>"; //za pomocą pętli while wyświetlamy wszystkie rekordy, które zostały zatwierdzone (wartość pola zatwierdz wynosi 1)
}
print"</UL>";
}
?>
</body>
</HTML>
Czy tylko ja mam zawsze takie problemy z największymi pierdołami, które powinny działać?