Har byggt ihop detta från webdesignskolan och det fungerar men så fort jag lägger till personnummer och postnummer säger den ifrån.
En gång släppte den igenom postnummer men den "klagar" jämt på personnummret.
Vad ska jag skriva för att få det att fungera? Vet att jag inte har en validering för personnummret men sååå viktigt är det inte nu. Men om nån vill fixa det så är det helt ok. (y)
<?php
// anger en variabel som kan lagra de eventuella felaktigheterna
$errors = array();
// kontrollera om ett Namn angivits
if (!$_POST["name"])
$errors[] = "- Förnamn och efternamn";
// kontrollera om ett Personnummer angivits
if (!$_POST["personnummer"])
$errors[] = "- Personnummer";
// kontrollera om ett Postnummer angivits
if (!$_POST["postnummer"])
$errors[] = "- Postnummer";
// kontrollera om ett Adress angivits
if (!$_POST["adress"])
$errors[] = "- Adress";
// kontrollera om ett Telefonnummer angivits
if (!$_POST["telefonnummer"])
$errors[] = "- Telefonnummer";
// kontrollera om en Epostadress angivits
$emailcheck = $_POST["email"];
if(!preg_match("/^[a-z0-9\å\ä\ö._-]+@[a-z0-9\å\ä\ö.-]+\.[a-z]{2,6}$/i", $emailcheck))
$errors[] = "- Din epostadress saknas eller är felaktig";
// om felaktig information finns visas detta meddelande
if (count($errors)>0){
echo "<span class='text'>";
echo "<h2>Följande information måste anges innan du kan skicka formuläret:</h2><br /><br />";
foreach($errors as $fel)
echo "<span class='textbakgrund'> $fel <br /><br /></span>";
echo "<br />Ange den information som saknas och skicka formuläret igen. Tack! <br /><br />";
echo "<a href='javascript:history.go(-1)'>« klicka här för att komma tillbaka till formuläret</a></span>";
}
else {
// formuläret är korrekt ifyllt och informationen bearbetas
$to = "XXXX@XXXXX.com";
$from = $_POST["email"];
$subject = $_POST["subject"];
$name = $_POST["name"];
$message = $_POST["message"];
$personnummer = $_POST["personnummer"];
$postnummer = $_POST["postnummer"];
$adress = $_POST["adress"];
$telefonnummer = $_POST["telefonnummer"];
if (mail($to, $subject, $message ,"From: $name <$from>"))
echo nl2br("<span class='text'><h2>Ditt meddelande har skickats!</h2>
<b>Namn:</b> $name
<b>Personnummer:</b> $personnummer
<b>Postnummer:</b> $postnummer
<b>Adress:</b> $adress
<b>Telefon:</b> $telefonnummer
<b>Email:</b> $email
<b>Meddelande:</b>$message
</span>
<a href='javascript:history.go(-1)'>Tillbaka till sidan!</a></span>");
else
echo "Det gick inte att skicka ditt meddelande";
}
?>
Vad menar du med klagar? Posta även ditt formulär, kontrollera att du har samma namn på formulär-fältet för person-nummer som det du hämtar med $_POST["personnummer"].
Jerpa skrev:
Vet att jag inte har en validering för personnummret men sååå viktigt är det inte nu. Men om nån vill fixa det så är det helt ok. (y)
Nja varför inte implementera algoritmen modulo 10 själv? Ganska kul och kanske lärorikt. Definition:
Om tredje siffran i födelsenumret är udda är personen en man, är den jämn är personen en kvinna. Om man genomgår ett könsbyte får man ett nytt personnummer. Könet i personnumret bestäms utifrån vad könsorganet är mest likt.
Kontrollsiffran räknas fram genom en algoritm som kallas för modulo 10 som t.ex. även används för kontrollsiffror i svenska postgiro- och bankgiro-nummer.
Man räknar ut den genom att addera siffrorna man får när man växlar med att multiplicera med 1 och 2 och sedan tar differensen till 10.
Hmm, nu får jag iväg mailet. Hade totalt glömt bort att titta i formuläret. Men nu har jag ett annat problem. I mailet jag tar emot står endast det jag skriver i meddelanderutan. Skriver jag inget där får jag ett tomt mail.
Klaga menade jag med att om man har glömt något kommer ett felmeddelande upp och säger till vilka rutor man har glömt.
När man fyllt i korrekt får man upp en liknande ruta:
Ditt meddelande har skickats!
Namn: Testperson
Personnummer: 123456-7890
Postnummer: 12345
Adress: Byhålan
Telefon: 020123456
Email: nisse@hult.nu
Meddelande: hej hej ett test
<?php
// anger en variabel som kan lagra de eventuella felaktigheterna
$errors = array();
// kontrollera om ett Namn angivits
if (!$_POST["name"])
$errors[] = "- Förnamn och efternamn";
// kontrollera om ett Personnummer angivits
if (!$_POST["personnummer"])
$errors[] = "- Personnummer";
// kontrollera om ett Postnummer angivits
if (!$_POST["postnummer"])
$errors[] = "- Postnummer";
// kontrollera om ett Adress angivits
if (!$_POST["adress"])
$errors[] = "- Adress";
// kontrollera om ett Telefonnummer angivits
if (!$_POST["telefonnummer"])
$errors[] = "- Telefonnummer";
// kontrollera om en Epostadress angivits
$emailcheck = $_POST["email"];
if(!preg_match("/^[a-z0-9\å\ä\ö._-]+@[a-z0-9\å\ä\ö.-]+\.[a-z]{2,6}$/i", $emailcheck))
$errors[] = "- Din epostadress saknas eller är felaktig";
// om felaktig information finns visas detta meddelande
if (count($errors)>0){
echo "<span class='text'>";
echo "<h2>Följande information måste anges innan du kan skicka formuläret:</h2><br /><br />";
foreach($errors as $fel)
echo "<span class='textbakgrund'> $fel <br /><br /></span>";
echo "<br />Ange den information som saknas och skicka formuläret igen. Tack! <br /><br />";
echo "<a href='javascript:history.go(-1)'>« klicka här för att komma tillbaka till formuläret</a></span>";
}
else {
// formuläret är korrekt ifyllt och informationen bearbetas
$to = "XXXXX@XXXXX.com";
$from = $_POST["email"];
$subject = $_POST["subject"];
$name = $_POST["name"];
$message = $_POST["message"];
$personnummer = $_POST["personnummer"];
$postnummer = $_POST["postnummer"];
$adress = $_POST["adress"];
$telefonnummer = $_POST["telefonnummer"];
if (mail($to, $subject, $message ,"From: $name <$from>"))
echo nl2br("<span class='text'><h2>Ditt meddelande har skickats!</h2>
<b>Namn:</b> $name
<b>Personnummer:</b> $personnummer
<b>Postnummer:</b> $postnummer
<b>Adress:</b> $adress
<b>Telefon:</b> $telefonnummer
<b>Email:</b> $email
<b>Meddelande:</b>$message
</span>
<a href='javascript:history.go(-1)'>Tillbaka till sidan!</a></span>");
else
echo "Det gick inte att skicka ditt meddelande";
}
?>
Det som görs i detta exempel är lika dumt. Dessutom är HTML-koden gräslig. Webbdesignskolan strikes again!
Ditt exempel är av dessa skäl vidöppet för s.k. SMTP-header injection attacker. Jag skulle med lätthet kunna använda ditt skript och spamma några tusen personer - och du skulle få skulden.
Själva poängen med att man har de s.k. superglobala arrayerna (GET/POST/SERVER/ENV/SESSION/COOKIE) är just att man skall tänka på säkerheten.
Använd det inte till annat än personliga experiment. Lägg aldrig upp koden på en publik server.
Skulle vara kul om du kunde förklara varför HTML kodningen i detta exempel är gräslig...
1. Tabell för layout - som dessutom bara innehåller en enda cell! Varför tabell alls då? I stället för tabellen borde det vara en fieldset eller en div.
2. Inga label-element (som bör finnas till varje input utom submit och hidden)
3. "Bed and breakfast" kodning
4. Somliga klassnamn valda endast efter förväntat utseende, ej funktion ("fetgul")
5. Javaskriptlänkar
Och om man skall vara petig: <br> ibland och <br /> ibland. HTML eller XHTML? Antingen - eller, tack!
Vettiga förklaringar men dåliga regexp för icke-amerikaner i artikeln från New York PHPUG. Varför måste amerikaner envisas i sina exempel med [a-z0-9] som inte kan flyttas, medan [[:alnum:]] tar hänsyn till locale.
Båda artiklarna missar - fast den ena nämner på slutet - försök till manipulation med MIME-typen.
Vad jag efterlyser är emellertid ett nybörjarexempel om mejl i PHP som kan ersätta skiten som Jerpa läst.
Och en halvpetig sak till. Klassen mail_bg är satt på i stort sett varje input-element = "Classitis"
Är den en krok för javaskript? I så fall kan vi använda oss av smartare lösning som "event delegation" alternativt hitta alla input-element av typen text/password samt alla textarea.
Är det en krok för CSS? Avkomlingsselektorn!
Till Jerpa: Ge inte upp och tappa inte sugen av min kritik! Den är kraftigt formulerad bara för att jag blir så sur när de som undervisar lär ut skräp.
Nej jag tar inte illa vid mig. Kritik är bra och det du skriver uppfattar jag inte som negativt. Är ingen PHPkodare utan mer en klipp-o-klistra-phpare.
När jag postat förra gången så såg jag <br> men det mesta var ju redan fel i vilket fall som helst så det spelade ingen roll.
Det ser bra ut med fieldset men jag har nu bara en fråga.
Var o hur skriver jag för att välja till vilken mailadress den ska gå till?
SMTP-headers stoppas till 100 % och inga botar göre sig besvär!
Vad som återstår:
1. Snygga till utseendet på formuläret.
2. Separera sidkontroller, HTML-mall ochh CSS-mall.
3. Anpassa till PHP < 5.2 (OBS! just nu krävs alltså 5.2 eller senare)
Jag skickar all formulärdata i mejlet. Troligen hade du tänkt att bara skicka en del och använda resten för att uppdatera en databas? Jag lämnar det med varm hand till någon annan att fixa! Det blev ändå inalles 401 rader kod.
Det finns ett fel i scriptet (jag har inte testkört det, men detta hittades vid en snabb genomläsning.)
du använder $kosher['firstname'] på rad 349, detta bör istället vara: $safe_indata['firstname']
Jag kommer ha formuläret till att folk får anmäla sig som medlem. vilket inte händer allt för ofta. Sen kommer jag säkert ha det som anmälningsformulär till våra större evenemang, ca 100-150 personer.