Avatar billede Hans1 Praktikant
26. maj 2012 - 14:01 Der er 18 kommentarer og
1 løsning

Hjælp til validering

Hey

Har brug for hjælp til at lave dette script færdigt.
Jeg mangler nogen if sætninger og måske noget med kode end det eksisterende. Der skal kun være en fejl besked ad gangen.


<script type="text/javascript">
function validate() {
    var element = document.getElementById('box');
   
        // fejl ved det første tomme felt.
    element.className += "box error";
    element.style.width = "128px";
    element.innerHTML = "<img src=\"images/icons/error.png\" />  <h6> Der blev ikke angivet nogen modtager!</h6>";

      // fejl ved ugyldig format i første felt (kun tal og skal være 8 cifre).
    element.className += "box error";
    element.style.width = "128px";
    element.innerHTML = "<img src=\"images/icons/error.png\" />  <h6> Ugyldig format i modtager!</h6>";

// fejl ved sidste tomme felt.
    element.className += "box error";
    element.style.width = "128px";
    element.innerHTML = "<img src=\"images/icons/error.png\" />  <h6> Der blev ikke angivet nogen besked!</h6>";

return false;
}
</script>



<div id="box"></div>



<form method="post" onClick="return validate('');">
<input type="text" name="to" maxlength="8" id="to" />
<textarea name="message" id="message"></textarea>
<input type="submit" value="Send besked"/>
</form>
Avatar billede olsensweb.dk Ekspert
26. maj 2012 - 16:36 #1
prøv dette

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <title></title>
    <style type="text/css">
    </style>
    <script type="text/javascript">
    function validate() {
        var element = document.getElementById('box');
        var elm;
        var pattern;
 
        element.className += "box error";
        element.style.width = "128px";
       
        // fejl ved det første tomme felt.
        elm = document.getElementById('to').value; 
       
        if(elm===""){// tester om feltet er tom
            element.innerHTML = "<img src=\"images/icons/error.png\" />  <h6> Der blev ikke angivet nogen modtager!</h6>";
            return false;
        }
        // fejl ved ugyldig format i første felt (kun tal og skal være 8 cifre).
        else{
            pattern = /^\d{8}$/;
            // skulle det ikke være en mail addresse der tested på ??
            if (!pattern.test(elm) ) {                           
                element.innerHTML = "<img src=\"images/icons/error.png\" />  <h6> Ugyldig format i modtager!</h6>";
                return false;
            }
        }       
        // fejl ved sidste tomme felt.
        elm = document.getElementById('message').value;
        if(elm===""){// tester om feltet er tom
            element.innerHTML = "<img src=\"images/icons/error.png\" />  <h6> Der blev ikke angivet nogen besked!</h6>";
            return false;
        }       
        return true;
    }
    </script>
</head>
<body>
<form method="post" action="#" onsubmit="return validate();">
<input type="text" name="to" maxlength="8" id="to" />
<textarea name="message" id="message"></textarea>
<input type="submit" value="Send besked"/>
</form>
<div id="box"></div>
</body>
</html>
Avatar billede Hans1 Praktikant
26. maj 2012 - 16:55 #2
Super! Tak for hjælpen Ronny

// skulle det ikke være en mail addresse der tested på ??
Nej, er nemlig i gang med at lave en SMS Service :)

Jeg flyttede lige disse to til hver if sætning så der ikke ville være en tom boks ved fuldførelse. 


element.className += "box error";
element.style.width = "128px";
Avatar billede Hans1 Praktikant
26. maj 2012 - 17:11 #3
Hvordan kan det være at hvis man opfylder det første felt og trykker  send besked og den så udskriver at man mangler at udfylde beskeden at den så ikke husker det man skrev i første felt.

Dette gør den hvis man opfylder det sidste felt til at starte med.
Avatar billede olsensweb.dk Ekspert
26. maj 2012 - 17:36 #4
hvis det er en telefonnummer der skal indtasted så skim http://www.eksperten.dk/spm/961320 #4, hvor jeg var inde på noget lande code.
ole laved et revideret exp i #10,

stil dig selv det spørgsmål
* må der være mellemrum i nummeret ??
* må der være lande code ??

#3 lage du mærke til om URL'en skifter ??, jeg har sat action ="#" på formen
Avatar billede Hans1 Praktikant
26. maj 2012 - 18:01 #5
Hov glemte at ændre til # i action.

Det første felt virker men der kommer ikke nogen boks hvis man ikke indtaster noget i besked feltet.
Avatar billede olsensweb.dk Ekspert
26. maj 2012 - 20:06 #6
>Det første felt virker men der kommer ikke nogen boks hvis man ikke indtaster noget i besked feltet.
kan du ikke vise den komplette code du anvender, gerne et link så vi kan afprøve det, #1 virker

der er ikke nogle grund til at flytte
element.className += "box error";
element.style.width = "128px";

ned i hver if block, hvis alt er OK, vil du ikke se at boxen bliver vist, da du bare kommer til en ny side, og de data der står i formen bliver posted til den nye side.
Avatar billede Hans1 Praktikant
27. maj 2012 - 10:37 #7
Her har du et link: http://fifan.dk/eksperten/
Avatar billede olsensweb.dk Ekspert
27. maj 2012 - 11:34 #8
du spørger efter en id der hedder message her
elm = document.getElementById('message').value;

denne id mangler du her
<td><textarea name="message"></textarea></td>
skal være
<td><textarea name="message" id="message"></textarea></td>
Avatar billede Hans1 Praktikant
27. maj 2012 - 12:33 #9
D'oh! Det virker selvfølgelig nu efter at ovenstående er tilføjet.

Kan jeg godt tilføje en anden action så jeg kan få PHP til at udfører afsendelsen? Og så jeg via det får en bekræftelsesboks?
Avatar billede olsensweb.dk Ekspert
27. maj 2012 - 12:59 #10
>Kan jeg godt tilføje en anden action så jeg kan få PHP til at udfører afsendelsen? Og så jeg via det får en bekræftelsesboks?
ja, det er bare at ændre # i action til feks sendsms.php
fra
<form method="post" action="#" onsubmit="return validate();">
til
<form method="post" action="send_sms.php" onsubmit="return validate();">

i send_sms.php
skal du i grove træk bare aflæse de 2 felter, og sende en mail, samt vise en besked, om afsendelsen gik godt eller dårligt

husk at validere dine 2 felter serverside også, brugeren kan have slået js fra eller der kna være fejl i js (som du selv lige har oplevet), der bevirker at data sendes til server selv om data ikke er valide

http://net.tutsplus.com/tutorials/php/how-to-send-text-messages-with-php/
http://www.webdeveloper.com/forum/showthread.php?t=170285

men prøv at google feks php sms mail eller php sms script
Avatar billede Hans1 Praktikant
27. maj 2012 - 13:15 #11
Tusinde tak for hjælpen.
Avatar billede Hans1 Praktikant
29. maj 2012 - 11:16 #12
Hej igen

Er der mulighed for at udført beskeden bliver skjult hvis man efter ny besked ikke opfylder kriterierne med 8 cifre osv...

Den bliver selvfølgelig ved med at være der fordi at udført beskeden ikke er lavet med javascript.
Avatar billede olsensweb.dk Ekspert
29. maj 2012 - 16:39 #13
>Er der mulighed for at udført beskeden bliver skjult hvis man efter ny besked ikke opfylder kriterierne med 8 cifre osv...

hvordan ser din code for udfør besked ??
hvordan kommer du tilbage og viser skærmen igen med indtast nummer og besked ??
Avatar billede Hans1 Praktikant
29. maj 2012 - 18:14 #14
Jeg tilføjer blot indhold på siden. Indtast nummer og besked bliver på siden.


<?php
if ($_GET["action"] == "send") {   
if (empty($_POST['to']))
    {
    header('Location: ?type=error&reason=1');
    }
    elseif (empty($_POST['message']))
    {
        header('Location: ?type=error&reason=2');
    }
    else
    {
        header('Location: ?type=confirm');
    }
session_destroy();
}
?>
Avatar billede olsensweb.dk Ekspert
30. maj 2012 - 06:14 #15
når du først har sendt data til serveren er de tabt for clienten, hvis de skal skrives til clienten igen, skal du gøre det serverside.
den nemmeste løsning vil nok være at ligge telefon nummer ind i en session variabel, som du aflæser når du laver siden.
alternativt kan du ligge telefon nummeret i en cookie på brugerens maskine. (NB: vær opmærksom på regler om brug af cookie, du skal informerer brugeren om du anvender cookies, det og hvad du bruger det til)
læs på disse
php.net/session_start
php.net/setcookie

bliver coden i #145 nnogle sinde udført ?? (tror jeg ikke)
så hvidt jeg ved sender du data over med POST, og du forsøger at aflæse med GET, den går ikke.
sender du med POST skal den aflæses med POST
sender du med GET skal den aflæses med GET
du kan se hvad du sender med i din action i din form
<form method="post" action="#" onsubmit="return validate();">
passer ikke med
if ($_GET["action"] == "send") {
Avatar billede Hans1 Praktikant
30. maj 2012 - 08:15 #16
Kunne jeg ikke indsætte noget javascript i denne kode som tilføjer en udført besked i samme id som fejl beskederne?


if ($_GET["action"] == "send") {

}


så hvidt jeg ved sender du data over med POST, og du forsøger at aflæse med GET, den går ikke.
sender du med POST skal den aflæses med POST
sender du med GET skal den aflæses med GET
du kan se hvad du sender med i din action i din form
<form method="post" action="#" onsubmit="return validate();">
passer ikke med
if ($_GET["action"] == "send") {

SÅ vidt jeg kan se så kan jeg stadig godt aflæse GET selv om jeg har lavet en POST action.
da jeg laver en redirect med header.
Avatar billede olsensweb.dk Ekspert
30. maj 2012 - 12:00 #17
Kunne jeg ikke indsætte noget javascript i denne kode som tilføjer en udført besked i samme id som fejl beskederne?
du sender beskeden serverside, og tilbage meldingen kommer serverside, skal du skrive det brugeren skal du sende brugeren en ny side.
den avanceret løsning er at bruge AJAX. men det er langt ud over dit niveu

SÅ vidt jeg kan se så kan jeg stadig godt aflæse GET selv om jeg har lavet en POST action.
da jeg laver en redirect med header.

hvilke kræver du sender parameterne for action med over i din redirect
Avatar billede Hans1 Praktikant
16. juni 2012 - 20:25 #18
Du må gerne smide et svar. Tak for hjælpen jeg er kommet videre.
Avatar billede olsensweb.dk Ekspert
17. juni 2012 - 13:37 #19
får du her
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester