Odmiana imion w formularzach
|
mjeanne |
Dodany dnia 14.04.2009 13:35:00
|
Przedszkolak
Postów: 3
Data rejestracji: 14.04.2009 13:16
|
Witam,
Jestem początkującą w php więc prosiłabym o prostotę odpowiedzi jeżeli to możliwe ;).
Otóż próbuję napisać coś, co pewnie nurtuje nie jednego (nawet zaawansowanego) programistę.
Chciałabym bardzo, aby inteligenty formularz był w stanie odmieniać imię w wołaczu.
np. jeżeli osoba w formularzu , w polu " imie" napisała " Kasia", to chcę aby e-mail wysyłany przez f-cje mail() miał formę powitalną
"Droga Pani Kasiu!"
Myślę, że nie jest to bardzo trudne do zrealizowania tylko nie potrafię wybrać i użyć do tego odpowiedniej funkcji. :( w pliku php to miejsce gdzie ma byc nowa forma, oznaczyłam przez [?????]
Formularz już na pewno dobrze odróżnia czy e-mail ma mieć nagłówek "pan" czy "pani". Jednak nie potrafię już więcej tego przerobić.
Tu podaję bardzo uproszczoną wersję formularza (pole e-mail oraz imie) oraz php zajmujące się samym wysłaniem mail() i tym nagłówkiem.
Nie wiem jak to zrobić żeby utworzyć nową zmienną ze zmienioną końcówką ze strony informatycznej. Mogę natomiast wytłumaczyć od strony polonistycznej i udowodnić że to wcale nie takie trudne.
1. Podstawowy podział deklinacyjny
a) imiona żeńskie
b) imiona męskie
add a) jeżeli żeńskie imię ma końcówkę podaną niżej, wymieni się na
ba - bo
da - do
fa - fo
ła - ło
ma - mo
na - no
pa - po
ra - ro
sa - so
ta - to
wa - wo
za - zo
ga - go
cha - cho
ha -ho
ka - ko
rza - rzo
ża - żo
dża - dżo
cza - czo
ca - co
sza - szo
ia - io
ja - jo
ka - ko
cia - ciu
la - lu
nia - niu
sia - siu
dzia - dziu
zia - ziu
add b) jeżeli meskie imię ma końcówkę podaną niżej, wymieni się na
b - bie
d - dzie
f - fie
ł - le
m - mie
n - nie
p - pie
r - rze
s - sie
t - cie
w - wie
z - zie
g - gu
ch - chu
h - hu
ek - ku
k - ku
rz - rzu
ża - żu
dż - dż
cz - czu
niec - ńcze
rzec - rcze
piec - pcze
ec - cze
sz - szu
j - ju
ek - ku
k - ku
ć - ciu
l - lu
ń - niu
ś - siu
dź - dziu
ź - ziu
Można sobie popodstawiać imiona jeżeli nie wierzycie ;) np. Dagmara - Dagmaro,Piotr - Piotrze Władysław - Władysławie ...
Liczę na jakieś odpowiedzi :) Być może nie jest to rzecz bardzo ważna w formularzu ale na | pewno ciekawa i jeżeli idzie ją wykonać to dlaczego nie??
Formularz:
<html>
<head>
<title>Formularz</title>
</head>
<body>
<div>
<form action="result.php" method="post">
<table>
<tr>
<td>Twoje imię <sup>(*)</sup> <input type="text" name="imie" size="28" maxlength="20"></td></tr>
<tr><td>Twój e-mail <sup>(*)</sup> <input type="text" name="email" size="50" maxlength="50"></td></tr>
</table>
<p class="center">
<input type="submit" value="Wyślij"><input type="hidden" name="wyslij_formularz" value="tak">
<input type="reset" value="Wyczyść formularz">
</p>
</form>
<p class="small"><sup>(*)</sup> - Pole wymagane</p>
</div>
</body>
</html>
Kliknij i zaczekaj na załadowanie kodu ...
strona wynikowa php + wysyłanie e-maila :result.php
<?php
$imie=$_POST['imie'];
$email=$_POST['email'];
$do_kli = $email;
$tytul_kli = 'Zamówienie';
$headers .= "MIME-Version: 1.0 \n";
$headers .= "Content-type: text/html; charset=utf-8\n";
$headers .= "Content-Transfer-Encoding: quoted-printable\n";
$headers .= "From: www.mojastrona.pl <>\r\n";
$headers .= "Reply-to: \r\n";
/* tresc wysylana do kobiety*/
$tresc_klia = "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">
<html>
<head>
<title>Zamówienie</title>
</head>
<body>
<p>Dzień dobry, Pani [?????] !</p>
</body>
</html>";
/*tresc wysylana do mezczyzny*/
$tresc_kli = "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">
<html>
<head>
<title>Zamówienie</title>
</head>
<body>
<p>Dzień dobry, Panie [?????] !</p>
</body>
</html>";
?>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Wynik</title>
</head>
<body>
<?php
if( empty($imie) || empty($email))
{
echo 'Brak danych<br/>';
}
else
{
if(preg_match("/.*a$/", $imie)) // jesli wysyla do kobiety
{
mail($do_kli, $tytul_kli, $tresc_klia, $headers);
echo '<p>Dziękuję za złożenie zamówienia.<br/>Na podany e-mail zostaną wysłane wszystkie informacje zebrane w formularzu</p>';
}
else
{
mail($do_kli, $tytul_kli, $tresc_kli, $headers);
echo '<p>Dziękuję za złożenie zamówienia.<br/>Na podany e-mail zostaną wysłane wszystkie informacje zebrane w formularzu</p>';
}
}
?>
</body>
</html>
Kliknij i zaczekaj na załadowanie kodu ...
Wiadomość doklejona:
Dodam jeszcze że wydaje mi się, że przy tworzeniu nowych form, będzie potrzeba ta sama funkcja preg_match co przy wybieraniu czy mail ma być wysyłany do mężczyzny czy do kobiety, czyli
if(preg_match("/.*a$/", $imie))
{
// i tu funkcja która pozwoiła by na utworzenie nowej formy imienia żeńskiego wg. //zamian jakie są możliwe w ptk a)}
else
{// a tu ta sama dla imion męskich - ptk b) }
Kliknij i zaczekaj na załadowanie kodu ...
Chociaż nie jestem pewna.
Mam nadzieję, że w miarę jasno wytłumaczyłam o co mi chodzi.
Edytowane przez Pieka dnia 15.04.2009 09:11:36
|
|
|
|
Wścibski Gość |
Dodany dnia 25.11.2024 08:45:34
|
Pan Kontekstualny
Postów: n^x
Data rejestracji: Zawsze
|
|
IP: localhost |
|
|
hoopak |
Dodany dnia 14.04.2009 14:30:20
|
Bywalec
Postów: 639 Pomógł: 21
v7.02.04 Data rejestracji: 05.02.2008 21:16
|
Skoro chcesz tylko stworzyć formularz, to nie widzę związku z PF, chyba że się mylę?
Edytowane przez hoopak dnia 14.04.2009 14:36:47
|
|
|
|
mjeanne |
Dodany dnia 14.04.2009 14:49:04
|
Przedszkolak
Postów: 3
Data rejestracji: 14.04.2009 13:16
|
Teoretycznie nie. Ale tak naprawdę takie coś też ma miejsce na portalach itp. Jeżeli się logujesz np. na NK (czy gdziekolwiek indziej) dostajesz z reguły komunikat "Witaj, [imie/nick]"
Trochę mnie drażni Komunikat "Witaj Maria!" ... Skoro mogłoby być "Witaj Mario". No i dlatego też sądzę, skoro (pewnie) idzie to zastosować np. na portalach, w których się używa php , to w formularzu do którego też używam php także mogłabym tego użyć w ten sam sposób |
|
|
|
DJPromo |
Dodany dnia 14.04.2009 15:16:17
|
Bywalec
Postów: 630 Pomógł: 41
v7.02.07 Data rejestracji: 13.06.2006 18:51
|
Myślę, że ten skrypt cie zadowoli dostosować pod siebie. Masz warunki w sumie większość napisanych wystarczy dopisać resztę
Copyright (c) 2007 Cypriano (www.cypriano.pl)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
.
.
function wolacz ($imie) {
switch($imie)
{
case substr($imie,-2,2)=="ni":
return "1".$imie;
case substr($imie,-2,2)=="eł":
return "1".substr($imie,0,-2)."le";
case substr($imie,-2,2)=="tr":
return "1".$imie."ze";
case substr($imie,-2,2)=="ał":
return "1".substr($imie,0,-1)."le";
case in_array(substr($imie,-2,2),array("it","rt")):
return "1".substr($imie,0,-1)."cie";
case substr($imie,-4,4)=="ciek":
return "1".substr($imie,0,-4)."ćku";
case substr($imie,-4,4)=="siek":
return "1".substr($imie,0,-4)."śku";
case substr($imie,-3,3)=="per":
return "1".substr($imie,0,-2)."rze";
case substr($imie,-2,2)=="ek":
return "1".substr($imie,0,-2)."ku";
case substr($imie,-2,2)=="st":
return "1".substr($imie,0,-2)."ście";
case in_array(substr($imie,-3,3),array("cja","ria","lia","dia","wia","fia")) || in_array(substr($imie,-4,4),array("iela","bela","zula")):
return "2".substr($imie,0,-1)."o";
case in_array(substr($imie,-2,2),array("ja","ia","la")) :
return "2".substr($imie,0,-1)."u";
case substr($imie,-2,2)=="ba":
return "1".substr($imie,0,-1)."o";
case in_array(substr($imie,-1,1),array("n","f","m","w","p","s","b")):
return "1".$imie."ie";
case in_array(substr($imie,-1,1),array("g","h","j","k","l","z")):
return "1".$imie."u";
case substr($imie,-3,3)=="der":
return "1".substr($imie,0,-2)."rze";
case substr($imie,-1,1)=="r":
return "1".$imie."ze";
case substr($imie,-1,1)=="d":
return "1".$imie."zie";
case substr($imie,-1,1)=="a":
return "2".substr($imie,0,-1)."o";
case substr($imie,-1,1)=="y":
return "1".$imie;
default:
return "0".$imie;
}
}
function zamien($imie)
{
return "".(substr(wolacz(strtolower($imie)),0,1)=="1")? "Panie ".ucfirst(substr(wolacz(strtolower($imie)),1)):( (substr(wolacz(strtolower($imie)),0,1)=="2")? "Pani ".ucfirst(substr(wolacz(strtolower($imie)),1)):" ".ucfirst(substr(wolacz(strtolower($imie)),1)));
}
Kliknij i zaczekaj na załadowanie kodu ...
Edytowane przez DJPromo dnia 14.04.2009 16:18:17
Pomogłem Kliknij Pomógł
Życie to chwila zbyt krótka aby móc .... Życie to chwila / trzeba patrzeć i podziwiać
|
|
|
|
kefirek |
Dodany dnia 14.04.2009 16:01:59
|
Zaawansowany
Postów: 1191 Pomógł: 418 Ostrzeżeń: 1
v6.00.xxx Data rejestracji: 06.04.2008 21:59
|
Można spróbować coś w ten desen
Robisz tablice z tym końcówkami i sprawdzasz dwie i trzy odstanie litery czy są w tablicy jak tak dodajesz tą wartość co jest w tablicy.
Napisałem taki prosty kod
Liczysz ile imię ma liter
Potem w pętli sprawdzasz czy końcówka imienia np. Kasia czyli
Końcówka sia jest w tablicy jeśli nie to pętla wykonuje się dale i sprawdza czy si jest w tablicy jak tak to dopisujesz końcówkę z tablicy do imienia czyli jak np. w tablicy istniej końcówka sia tak jak w tym przypadku to do Ka dołączasz siu z tablicy.
Poprawność działania trzeba sprawdzić na większej liczbie imion
$imie = 'Kasia';
$koncowki = array(
'sia' => 'siu'
);
$i = strlen($imie) - 4;
while ($i < strlen($imie) - 2) {
$i++;
if(array_key_exists(substr($imie, $i), $koncowki)) echo substr($imie, 0, $i).$koncowki[substr($imie, $i)] ; break;
}
Edytowane przez kefirek dnia 14.04.2009 16:19:33
|
|
|
|
mjeanne |
Dodany dnia 15.04.2009 07:49:04
|
Przedszkolak
Postów: 3
Data rejestracji: 14.04.2009 13:16
|
@ DJPromo : wielkie dzięki za linka! szukałam jakiegoś gotowca i nic wcześniej nie znalazłam
@ Kefirek : też dziękuję za kod. Myślę że skorzystam jednak z tego gotowego, jeżeli rzeczywiście działa :)
Dobra, po paru dniach stwierdziam że sobie generalnie poradziłam i kod działa...
Jednak nie reaguje - nie widzieć czemu , gdy na końcu są imienia są litery "ń" "ś" "ź" "ł"
poniżej podaje troszkę edytowaną do moich potrzeb wersję formularza
Chodzi mi głównie o 14 pierwszych wersów pod switch($imie)
<?php
$imie=$_POST['imie'];
$email=$_POST['email'];
$do_kli = $email;
$tytul_kli = 'Zamówienie';
$headers .= "MIME-Version: 1.0 \n";
$headers .= "Content-type: text/html; charset=utf-8\n";
$headers .= "Content-Transfer-Encoding: quoted-printable\n";
$headers .= "From: http://www.mojast...2;n";
function wolacz ($imie) {
switch($imie)
{
case substr($imie,-4,4)== "rzeł;":
return "1".$imie."rle";
case substr($imie,-2,2)== "eł;":
return "1".substr($imie,0,-2)."le";
case substr($imie,-1,1)== "ł;":
return "1".substr($imie,0,-1)."le";
case substr($imie,-2,2)== "eń;":
return "1".substr($imie,0,-2)."niu";
case substr($imie,-1,1)== "ń;":
return "1".substr($imie,0,-1)."niu";
case substr($imie,-1,1)== "ś;":
return "1".substr($imie,0,-1)."siu";
case substr($imie,-1,1)== "ź;":
return "1".substr($imie,0,-1)."ziu";
case substr($imie,-1,1)=="l":
return "1".$imie."u";
case substr($imie,-2,2)=="ch":
return "1".$imie."u";
case substr($imie,-2,2)=="rz":
return "1".$imie."u";
case substr($imie,-4,4)=="niec":
return "1".substr($imie,0,-4)."ńcze";
case substr($imie,-4,4)=="rzec":
return "1".substr($imie,0,-4)."rcze";
case substr($imie,-2,2)=="ec":
return "1".substr($imie,0,-2)."cze";
case substr($imie,-2,2)=="ni":
return "1".$imie;
case substr($imie,-2,2)=="tr":
return "1".$imie."ze";
case in_array(substr($imie,-2,2),array("it","rt")):
return "1".substr($imie,0,-1)."cie";
case substr($imie,-4,4)=="ciek":
return "1".substr($imie,0,-4)."ćku";
case substr($imie,-4,4)=="siek":
return "1".substr($imie,0,-4)."śku";
case substr($imie,-3,3)=="per":
return "1".substr($imie,0,-2)."rze";
case substr($imie,-2,2)=="ek":
return "1".substr($imie,0,-2)."ku";
case substr($imie,-2,2)=="st":
return "1".substr($imie,0,-2)."ście";
case in_array(substr($imie,-3,3),array("cja","ria","lia","dia","wia","fia")) || in_array(substr($imie,-4,4),array("iela","bela","zula")):
return "2".substr($imie,0,-1)."o";
case in_array(substr($imie,-2,2),array("ja","ia","la")) :
return "2".substr($imie,0,-1)."u";
case substr($imie,-2,2)=="ba":
return "1".substr($imie,0,-1)."o";
case in_array(substr($imie,-1,1),array("n","f","m","w","p","s","b")):
return "1".$imie."ie";
case in_array(substr($imie,-1,1),array("g","h","j","k","l","z", "ż" )):
return "1".$imie."u";
case substr($imie,-3,3)=="der":
return "1".substr($imie,0,-2)."rze";
case substr($imie,-1,1)=="r":
return "1".$imie."ze";
case substr($imie,-1,1)=="d":
return "1".$imie."zie";
case substr($imie,-1,1)=="a":
return "2".substr($imie,0,-1)."o";
case substr($imie,-1,1)=="y":
return "1".$imie;
default:
return "0".$imie;
}
}
function zamien($imie)
{
return "".(substr(wolacz(strtolower($imie)),0,1)=="1")? "Panie ".ucfirst(substr(wolacz(strtolower($imie)),1)):( (substr(wolacz(strtolower($imie)),0,1)=="2")? "Pani ".ucfirst(substr(wolacz(strtolower($imie)),1)):" ".ucfirst(substr(wolacz(strtolower($imie)),1)));
}
$imie2 = ucfirst(substr(wolacz(strtolower($imie)),1));
/* tresc wysylana do kobiety*/
$tresc_klia
= "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">
<html>
<head>
<title>Zamówienie</title>
</head>
<body>
<p>Dzień dobry, Pani $imie2!</p>
</body>
</html>"
;
/*tresc wysylana do mezczyzny*/
$tresc_kli
= "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">
<html>
<head>
<title>Zamówienie</title>
</head>
<body>
<p>Dzień dobry, Panie !</p>
</body>
</html>"
;
?>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Wynik</title>
</head>
<body>
<?php
if( empty($imie) || empty($email))
{
echo 'Brak danych<br/>';
}
else
{
if(preg_match("/.*a$/", $imie)) // jesli wysyla do kobiety
{
mail($do_kli, $tytul_kli, $tresc_klia, $headers);
echo 'Pani ';
echo zamien($imie);
echo '<br/>';
echo '<p>Dziękuję za złożenie zamówienia.<br/>Na podany e-mail zostaną wysłane wszystkie informacje zebrane w formularzu</p>';
}
else
{
mail($do_kli, $tytul_kli, $tresc_kli, $headers);
echo 'Panie';
echo zamien($imie);
echo '<br/>';
echo '<p>Dziękuję za złożenie zamówienia.<br/>Na podany e-mail zostaną wysłane wszystkie informacje zebrane w formularzu</p>';
}
}
?>
</body>
</html> Kliknij i zaczekaj na załadowanie kodu ...
Może to jest wina serwera na którym trzymam pliki ?? Czy ktoś mółby sprawdzić, czy też mu nie reaguje ? np. z imieniem "Paweł" "Michał" "Staś" itp ? (ś, ł, ń, ź)
Wiadomość doklejona:
PS. Mam nadzieję, że nie nadużywam Waszej życzliwości :)
Edytowane przez mjeanne dnia 19.04.2009 16:04:40
|
|
|