22. juli 2004 - 10:43Der er
52 kommentarer og 2 løsninger
Flere handlinger via en formular
Hej.
Jeg har en formular hvor der indtastes en del oplysninger. Specielt i det ene felt har jeg lidt problemer med at få ind under håret hvordan det kan gøres. Jeg ved meget lidt om javascript, så jeg vil gerne give en del point for en hel løsning.
Der indtastes en email adresse i et af felterne. Den skal selvfølgelig checkes for at den er ok, så godt man nu kan gøre det.
Når den er ok, skal der genereres en MD5 checksum med 5 tal pillet ud af summen fra email adressen. Men ikke nok med det, den skal samtidig sende den genererede kode til den indtastede email adresse. Det er for at være sikker på at vedkommende bruger en gyldig email adresse. Så kan brugeren hente koden i sin mailbox og derefter indtaste den i det næste felt, og man kan derefter komme videre i formularen.
Går det godt skal et lille vindue åbne og skrive at koden er sendt til ders postbox.
Går det galt skal den så åbne det lille vindue og fortælle hvad der er galt.
Desuden skal den give en fejl eller udføre checket, hvis brugeren trykker i næste felt med musen, det har jeg set en del gøre. De bruger ikke TAB til at skifte linie med.
Kan man alt det på een gang ? Jeg starter med 60 point, men forhøjer meget gerne hvis der kommer noget rigtig brugbart ud af spørgsmålet. Og jeg her intet i mod selv at lave noget, bare jeg kan finde ud af det :-)
Danmark vil mindske afhængigheden af globale techgiganter, men det kræver mere end politiske formuleringer og strategier, understreger PROSA’s formand Niels Bertelsen.
Du bliver nødt til at få serveren til at sende emailen - det kan du ikke i clientside javascript. Hvilke serverside sprog har du adgang til?
Synes godt om
Slettet bruger
22. juli 2004 - 11:03#2
Jeg bruger php til det, og har vist også noget af det lavet i php. Jeg har ihvertfald et php script hvor der også sendes en mail når hele formularen er udfyldt korrekt.
Hvis du trykker på en by på kortet og derefter på en film i venstre side, der ikke er gul, så får du bestillingsformularen frem. Der kan du/I så se hvad det er jeg vil.
ok, jeg vil foreslå dette: Du har en knap et sted ved "e-mail kode" feltet. Denne knap hedder "hent kode" el.lign. Ved tryk på denne knap åbner du en popup til en php side (emailkode.php) og du sender den indtastede email med til denne php side. Php-siden skal så køre emailen gennem en MD5 algoritme og sende koden til email-adressen. I samme popup kan den så udskrive "at koden er sendt til ders postbox" eller "fortælle hvad der er galt".
Du kan så i javascript køre samme md5 algoritme og så sammenligne resultaterne.
Problemet er dog, at så snart du anvender client-side til at lave sammenligningen, er det forholdsvis nemt for en bruger at se hvad der foregår og "hacke" sig igennem ved selv at lave MD5 beregningen...
Synes godt om
Slettet bruger
22. juli 2004 - 12:06#5
Der er jo sådan set check på alle felterne som det er nu, undtaget det felt med kode.
Problemet er, at i nogle postsystemer kan brugerne bare skrive deres navn og ikke email adressen. De skriver så deres navn @postsystem.dk :-) og det virker for det meste ikke, men bliver ikke sorteret fra som en fejl. Derfor skulle der lige en kode på.
Om folk selv kan udregne koden er ligegyldigt, for de får jo ikke en bekræftelse på deres bestilling, hvis ikke postkassen virker.
Det var for at undgå at skulle vente på at udfylde alle felter før fejlmeddelsernekommer. Sådan er det nu. Jeg ville gerne gøre det lidt smartere, men det kan man så ikke, hvis man ikke kan sende den mail uden at skulle lave extra krykknapper. Kan man ikke kalde mailsiden.php med javascriptet og overføre mail variablen dertil ? så det popper op automatisk når man skifter til næste felt.
Når du på formularen som den er nu trykker send og ikke har udfyldt et felt eller forkert mail, så kommer der en fejlmeddelse, så det er ikke rigtig en ændring du foreslår :-) KOden kan jo så også valideres der ved tryk på send.
-- det farlige yellow skriver om, er at andre nd den aktuelle og dermed uønskede kan se koden, hvis du sender den fladt ...
Så du skal lave al din kontrol af rigtigheden server-side, og så generere en kode af (ret få) tilfældige tal og bogstaver, som skal indtastes som kontrol af, at det i virkeligheden er den rigtige, som har fået bekræftelsen ...
Så det smartere kan du kun ved genbrug af dine email-adresser og koder, så man ikke ved senere bestillinger skal igennem samme nummer, evt. vha. en cookie, som du kan bruge til at forudfylde felter for brugeren !-)
Synes godt om
Slettet bruger
22. juli 2004 - 13:18#7
Den kode der genereres kan KUN brugesd med lige netop den ene mail adresse. Til gængæld skal man ikke hente koden mere end en gang, med mindre men bruger en anden mail adresse. Kontrol checket er over mail adressen igen. Så det er vist ikke farligt ;-) Men tak fordi I gør opmærksom på det. I andre tilfælde ville det måske være farligt. Er er det KUN for at sikre sig at mail adressen virkelig virker og ikke andet.
Lad være med at sende md5-koden, send en simpelt genereret f.eks. 6- eller 8-'cifret' kode med en blanding af tilfældige tal og bogstaver ...
Synes godt om
Slettet bruger
22. juli 2004 - 13:22#9
Kan man lave en javascript popup der henter en *.php fil ? Hvis man kan, hvordan gør man så ? Så kan jeg måske finde ud af at lege videre derfra, sikkert ved at bede om mere hjælp hen ad vejen :) Jeg ved altså for lidt om det java script til rigtig at kunne lave noget selv.
Synes godt om
Slettet bruger
22. juli 2004 - 13:26#10
Det er et udtag ad den lange streng der kommer - f. eks. 3,5 - der betyder gå 3 pladser frem og udtag de næste 5 tegn af md5 sum-tallet.
Og det er altså kun for at få folk til at gå i postkassen og hente koden. Sidste år havde vi ikke det på, og der var bare så mange fejl på grund af forkert mail adresse, eller fuld mailboks. Nogen af alle de fejl ville vi gerne undgå i år. Og det kan man jo netop på denne måde. Koden vil altid være den samme på den pågældende mail adresse. Det er ikke som sådan en sikkerheds foranstaltning, men for at spare os selv for en masse arbejde med at finde frem til en bestilling de ikke har fået tilsendt :-)
Nej det har du ret i, men hvad dælen gør man, når folk ikke læser hvad de får at vide, og så gør noget de ikke skal. Altså - de er absolut ikke sikre på at deres postboks virker. Hvis de overholdt betingelserne, var der slet ingen problemer ;-)
nytVindue er 'bare' et navn, men altså også en html-identifier, som du ikke kan se nogensomhelst steder, så den skal overholde regler for den slags, hvilket bl.a. betyder, at window.open fejler, hvis der er et mellemrum i !-)
i den eksisterende linie. Altså har jeg sat onblur="window.open("phpinfo.php","nytVindue","width=250,height=150,scrollbars=yes") ind der.
Men det giver nogle fejl om jeg vil debug og en header alredy sendt. Og den popper ikke op, så der må mangle noget til at få den frem når jeg trykker på TAB for linie skift.
Synes godt om
Slettet bruger
22. juli 2004 - 13:48#19
jeg har set jeg havde glemt ; -men det hjalp ikke.
Yep,det virkede. Jeg blev helt forskrækket :-) Kan man tilføje en luk vindue i det nye vindue, så dem der har fået kode bare kan lukke det ved flere bestillinger.
Og nu må i hellere lave et svar hver, så jeg kan komme ud af det når jeg er tilfreds :-) Men nu er det jo først jeg kan komme til at rode. Jeg skal jo have den mailsend del pillet ud af en større fil for at bruge den for sig selv. Desværre havde/har jeg ikke lært at lave pip i funktioner, så det er lidt noget rod.
Synes godt om
Slettet bruger
22. juli 2004 - 14:14#22
Det der window.open er det ikke en windows eller IE ting ? Det virker nemlig ikke i Firefox, og så virker det sikkert heller ikke på andre browsere. Det var ikke så godt.
Jeg sad og legede lidt mere med selve valideringen. I eksemplet bliver koden bare udskrevet i stedet for email'et. Du skal så i din bestil.php hente "validatedEmail" feltet i stedet for "Email".
//email $code variablen, her er den bare echo'et i stedet //******************************************************* echo "Her er din kode: " . $code; //*******************************************************
?> <form method="post"> Indtast din kode fra din email: <input type="text" name="emailcode"><br> <input type="submit" value="Valider"> </form> <? }
Ahemm, nu ligger den på siden som test.html og jeg har fået første del til at virke. Når jeg så kopierer koden over i det nye felt, så laver den en ny kode. Det er vist ikke meningen, eller ? Den skal vel sige ok eller forkert, men det er ´måske ikke lagt ind.
Synes godt om
Slettet bruger
22. juli 2004 - 15:28#25
Den laver også en NY kode hvergang. Når det er md5 sum af samme email, vil den altid være den samme. Hvorfor laver den en ny kode hvergang ?
Synes godt om
Slettet bruger
22. juli 2004 - 15:30#26
Det er nok det her der gør det:
function makeRandomPassword(){ $salt = "abchefghjkmnpqrstuvwxyz0123456789"; srand((double)microtime()*1000000);
ja, det var bare et eksempel hvor email'en skal valideres hver gang.
Synes godt om
Slettet bruger
22. juli 2004 - 16:15#28
Nu har jeg fået lavet koden, men jeg mangler lige at få check til at virke på det. Gider du lige se på det ? Og igen, lav nogle svar begge to, så jeg kan komme herfra igen når jeg er færdig :-)
Her er det jeg bruger til at lave koden - også hvis andre vil lege:
Ok, hvis du nu bruger samme test.html som jeg postede før, så modificer test.php med din nye pincode funktion og lav en knap som brugeren kan trykke på for at få tilsendt koden. Hvis han allerede har koden fra en tidligere mail kan han bare bruge den.
if($_GET['action']=="sendmail"){ //email $code variablen, her er den bare echo'et i stedet //******************************************************* echo "Her er din kode: " . $code; //******************************************************* }
?> <form method="post"> Indtast din kode fra din email: <input type="text" name="emailcode"><br> <input type="submit" value="Valider"> </form> <form method="get" action="test.php"> <input type="hidden" name="action" value="sendmail"> <input type="hidden" name="email" value="<?echo $HTTP_SESSION_VARS['email']?>"> <input type="submit" value="Send mig koden" </form> <? }
men den skriver ingenting. Altså får jeg ikke email adressen over i SendKode.php
Hvordan gør man det så det virker hvergang ?
Synes godt om
Slettet bruger
23. juli 2004 - 09:15#32
Aha. Jeg opdagede lige at der overhovedet ikke står noget i felterne før man har trykket på næste i bunden. Derfor er der selvfølgelig ingenting i email variablen.
Hvordan kan man så få puttet emailvariablen ind med det samme, så den kan overføres til .php filen ?
Hvis du starter en ny session, vil den have et nyt id, så den vil ikke finde en gamle email-adresse ...
Men hvis du nu slår den op i den database-tabel, du opbevarer dine data i, vil du jo kunne finde data frem fra den !-)
-- og window.open dur i alle javascript-versioner jeg kender !-)
Velbekomme '-)
Synes godt om
Slettet bruger
23. juli 2004 - 09:20#34
Det forstår jeg ikke. Jeg har ikke brugerens email adresse i databasen. Efter at have trykket på næste og så gå tilbage med browserens tilbageknap, så er variablerne der og email bliver så overført til SendKode.php, men det skulle jo gerne ske noget før, inden man trykker på næste.
**************** I bestillingsformularen står dette: <input type="text" name="email" onblur='window.open("SendKode.php","BeskedVindue","width=500,height=300,scrollbars=yes");' value="<?php echo $_SESSION['email']; ?>" size="50"> Men hvordan får jeg det over i den fil SendKode ? ****************
Her skal der jo ikke åbnes et visnue men kaldes en funktion med check_pincode($email, $kode) - men det kan jeg ikke få til at samarbejde. Den kommer med debug muligheder, ligemeget hvad jeg prøver.
Hvis du sender en løsning, så skriv hav du skal have for det i points, så opretter jeg fluks et :)
Ok, hvis du på ser mit svar fra 22/07-2004 16:38:29 - har du prøvet at køre det eksempel? I den indgår valideringen allerede.
Den udskriver koden (det du skal erstatte med din mail-del) og beder om bruger input (koden der er sendt).
Hvis den indtastede kode matcher, aktiverer den submit-knappen i hoved-formen, samt sætter feltet "validatedEmail" til den validerede email-adresse.
Når du så kommer videre til din bestil.php fil skal du læse emailen fra "validatedEmail" feltet. Hvis dette felt er tomt, er den ikke blevet valideret. Hvis feltet indeholder en email, er den blevet valideret med den rigtige kode.
Tilpas selv efter behov...
Synes godt om
Slettet bruger
23. juli 2004 - 12:48#40
Den har altid været tom, så derfor har jeg aldrig kunne se om valideringen virkede.
Det var altså i dit test.htm og test.php
Når jeg kopierede koden ind som blev sendt, fjernede denbare koden og den anden side var der heller ikke skrevet noget i. Så det forstår jeg ikke rigtigt.
Synes godt om
Slettet bruger
23. juli 2004 - 12:52#41
Det passer ikke helt. Den fjerner ikke email adressen og man kan ikke fjerne den, så forsvinder koden også :) Men selvom jeg skriver en forkert kode sker der ikke noget, så jeg kan altså ikke lige gennemskue det.
( eller prøv med en test@test.com - din validering godtager ikke.dk )
Synes godt om
Slettet bruger
23. juli 2004 - 14:06#45
Ok, nu har jeg prøvet at kommentere de linier ud, og jeg kan ikke se nogen forskel her. Der sker stadig ikke noget, heller ikke med .com domæner som email.
if($_GET['action']=="sendmail"){ //email $code variablen, her er den bare echo'et i stedet //******************************************************* echo "Her er din kode: " . $code; //******************************************************* }
?> <form method="post"> Indtast din kode fra din email: <input type="text" name="emailcode"><br> <input type="submit" value="Valider"> </form> <form method="get" action="test.php"> <input type="hidden" name="action" value="sendmail"> <input type="hidden" name="email" value="<?echo $HTTP_SESSION_VARS['email']?>"> <input type="submit" value="Send mig koden" </form> <? }
Din link virker - det andet har jeg ikke set endnu. Ville lige glæde dig.
Jeg tror også helt sikkert på at der er fejl i mit. Det undrer ikke.
Men nu skal jeg jo ikke bruge dem på den måde, men i to inputfelter i en formular. Jeg ser på det om lidt, så hører du mere :-)
Synes godt om
Slettet bruger
23. juli 2004 - 14:20#48
Hmmmm, nu har jeg udskiftet begge filer med dine, og det virker ikke.
Jeg har simpelthen kopieret begge filer over og overskrevet de gamle, så det burde jo virke på samme måde. Det har vel ikke noget med servere at gøre ? Windows / Linux ?
"Så virker den. Hvorfor skulle det være nødvendigt i min fil og ikke i din ?"
Hmm ved det faktisk ikke (er ikke php-haj). Må vere serveren eller noget. Anyway, det er nok også pænere at hente den via $_POST['emailcode'] i stedet for bare at gå ud fra den er i $emailcode :-)
Synes godt om
Slettet bruger
23. juli 2004 - 14:50#54
Aha,jamen det er den jo netop ikke normalt, så det er nok derfor :-)
Nu skal jeg så se om jeg kan få det til at virke det rigtige sted. Der skal jo ikke poppe noget op. Gys :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.