Avatar billede zombien Juniormester
24. juni 2016 - 13:02 Der er 34 kommentarer

Hvorfor virker min if struktur ikke?

Hej jeg sidder og er igang med at blive gråhåret af dette problem
mit javascript ser sådan her ud, det er et ajax kald og den returnere fint nok data = IngenBruger, GodkendtKorrekt osv.

men den hopper ikke ind i de forskellige if'er og gør den handling den nu skal gøre! hvorfor ikke er spørgsmålet... for ved at lave alert(data); udskriver den som sagt fint det den får retur.

echo '<script>';
echo 'function loginAjax() {';
echo '
    $.post(
        "'.BASE_URL.'pages/ajax/AccessFunction.php",
        $("#loginFormPage").serialize(),
        function(data) {

            alert(data);

            if ( data == \'IngenBruger\' ) {

                $("#LoginErrorMessage").html("<div class=\'alert alert-danger\'><strong>Fejl!</strong><br />Kunne ikke finde en bruger med de indtastede oplysninger.</div>");

            }

            if ( data == "TempBan" ) {

                $("#LoginErrorMessage").html("<div class=\'alert alert-danger\'><strong>Fejl!</strong><br />Denne IP er midlertidig nægtet adgang af systemet, prøv igen senere.</div>");

            }

            if ( data == "LockedUser" ) {

                $("#LoginErrorMessage").html("<div class=\'alert alert-danger\'><strong>Fejl!</strong><br />Denne bruger er låst og har derfor ikke adgang til siden. <br /><br /> Kontakt support@minhandel.dk for yderligere informationer.</div>");

            }

            if ( data == "GodkendtKorrekt" ) {

                alert(\'Hallo... do SOMETHING\');


            }

        })}';

echo '</script>';
Avatar billede keysersoze Guru
24. juni 2016 - 13:20 #1
Får du nogen javascript-fejl hvis du kigger i console? Kan du evt give et midlertidigt link?
Avatar billede softspot Forsker
24. juni 2016 - 13:21 #2
Første tanke er, at strengene ikke matcher case, dvs. store og små bogstaver. Er dette tilfældet, kan du kalde toLowerCase() på data og så sammenligne med strengene i små bogstaver.

if(data.toLowerCase() == "ingenbruger")
24. juni 2016 - 13:29 #3
Prøv at kalde console.log(data) i stedet for en alert, og så post resultatet du ser i konsollen her. Så ved vi også hvad du ser. Måske @softspot har ret.
Avatar billede zombien Juniormester
24. juni 2016 - 14:14 #4
Jeg har desværre ikke et temp link at give, da det køre på et lukket system lige p.t. med ip godkendelse.

- Der kommer ingen JavaScript fejl, i følge firebug

- Har tilføjet console.log(data);

og får følgende resultat...

Hvad Ajax returnere: IngenBruger

hvad console.log(data); skriver IngenBruger
24. juni 2016 - 14:21 #5
Jeg gætter på at den kommer ind i if'en men at #LoginErrorMessage måske ikke kan findes. Prøv at lave en alert inde i if'en.
24. juni 2016 - 14:24 #6
Prøv at køre hvorsomhelt:

alert($("#LoginErrorMessage").length)
Avatar billede softspot Forsker
24. juni 2016 - 14:41 #7
Prøv lige at ufskifte denne

if ( data == \'IngenBruger\' ) {

med denne

if ( data == "IngenBruger" ) {
Avatar billede zombien Juniormester
24. juni 2016 - 15:12 #8
har prøvet alle de forskellige tegn

if ( data == "IngenBruger" ) {

                $("#LoginErrorMessage").html("<div class=\'alert alert-danger\'><strong>Fejl!</strong><br />Kunne ikke finde en bruger med de indtastede oplysninger.</div>");

            }

giver ingen forskel, har prøvet de forskellige kombinationer
Avatar billede zombien Juniormester
24. juni 2016 - 15:16 #9
if ( data == "IngenBruger" ) {

            alert($("#LoginErrorMessage").length)

                $("#LoginErrorMessage").html("<div class=\'alert alert-danger\'><strong>Fejl!</strong><br />Kunne ikke finde en bruger med de indtastede oplysninger.</div>");

            }

den udskriver intet :/
Avatar billede olsensweb.dk Ekspert
24. juni 2016 - 15:22 #10
hvorfor alle de if'er ??
jeg ville bruge en switch, hvis der kun kan være en tekst af gangen

(utested)

echo '<script>';
echo 'function loginAjax() {';
echo '
    $.post(
        "'.BASE_URL.'pages/ajax/AccessFunction.php",
        $("#loginFormPage").serialize(),
        function(data) {

            alert(data);

            switch(data){
                case "IngenBruger":
                    console.log("IngenBruger");
                    $("#LoginErrorMessage").html("<div class=\'alert alert-danger\'><strong>Fejl!</strong><br />Kunne ikke finde en bruger med de indtastede oplysninger.</div>");               
                break;
               
                case "TempBan":
                    console.log("TempBan");
                    $("#LoginErrorMessage").html("<div class=\'alert alert-danger\'><strong>Fejl!</strong><br />Denne IP er midlertidig nægtet adgang af systemet, prøv igen senere.</div>");               
                break;
               
                case "LockedUser":
                console.log("LockedUser");
                    $("#LoginErrorMessage").html("<div class=\'alert alert-danger\'><strong>Fejl!</strong><br />Denne bruger er låst og har derfor ikke adgang til siden. <br /><br /> Kontakt support@minhandel.dk for yderligere informationer.</div>");               
                break;
               
                case "GodkendtKorrekt":
                console.log("GodkendtKorrekt");
                    alert(\'Hallo... do SOMETHING\');
                break;               
               
                default: console.log("ukendt data");
                break;
            }
        })}';

echo '</script>';
24. juni 2016 - 15:28 #11
#9: Kommer der en alert eller ej, eller er alerten bare tom?
Avatar billede softspot Forsker
24. juni 2016 - 15:39 #12
Du bliver nok også nød til at vise den html du kører koden på, for det virker lidt som om, der mangler noget i DOM...
Avatar billede zombien Juniormester
24. juni 2016 - 15:59 #13
#9 Der kommer ingen alert frem, så den kommer slet ikke ind i if'en

#10 < kan der være noget om, har prøvet at kopiere din case ind og modtager bare følgende

default: console.log("ukendt data");

så det er simpelthen som om den ikke kan læse den data som Ajax returnere også alligevel kan den godt, da hvis man smider en alert(data); under switch skriver den fint IngenBruger.

#12 du mener mit <doctype> tag
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd<html xmlns="http://www.w3.org/1999/xhtml">
Avatar billede zombien Juniormester
24. juni 2016 - 15:59 #14
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
Avatar billede softspot Forsker
24. juni 2016 - 16:12 #15
Nej, jeg mente nu selve HTML-dokumentet, men der er noget andet der undrer mig lidt. Hvorfor anvender du Echo? Jeg er ikke php-programmør, men du kan vel, med fordel, lukke php-sektionen i din kode og bare sende normal html-kode i stedet for at echo det ud på siden...(?) Det vil i det mindste fjerne behovet for evt. escaping af strenge i din javascript-kode.

<?php
?>
<script>
// din javascriptkode her - UDEN evt. escaping-problemstillinger
</script>

Bort set fra det, kunne du med fordel opdele din kode, så du kan teste det særskilt, dvs. gøre det lettere at lokalisere fejlen, ved at udelukke fejl i dele af koden.

Helt konkret vil jeg anbefale, at du skiller koden der håndterer dine if-sætninger ud i en funktion, som tager en parameter, nemlig data. Så kan du kalde den funktion med de forventede data og se om den fungerer.

Dernæst kan du isolere kald til jQuery (find form-element, error-element osv.) i et objekt med relevante funktioner, som du også kan teste ved at kalde dem fra noget testkode, for at se om de forventede data bliver hentet eller skrevet ud på siden, hvor du forventer.

Du kan ligeledes isolere koden til at kontakte serveren, således der sendes et JSON-objekt ind i funktionen, som indeholder de data der findes i formularen.
Avatar billede olsensweb.dk Ekspert
24. juni 2016 - 17:06 #16
eks på noget af det softspot skriver i #15

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>demo</title>

        <style type="text/css">

        </style>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
        <script>
            function CheckLoginAjaxReturn(data) {
                alert(data);

                switch (data) {
                    case "IngenBruger":
                        console.log("IngenBruger");
                        $("#LoginErrorMessage").html("<div class=\'alert alert-danger\'><strong>Fejl!</strong><br />Kunne ikke finde en bruger med de indtastede oplysninger.</div>");
                        break;

                    case "TempBan":
                        console.log("TempBan");
                        $("#LoginErrorMessage").html("<div class=\'alert alert-danger\'><strong>Fejl!</strong><br />Denne IP er midlertidig nægtet adgang af systemet, prøv igen senere.</div>");
                        break;

                    case "LockedUser":
                        console.log("LockedUser");
                        $("#LoginErrorMessage").html("<div class=\'alert alert-danger\'><strong>Fejl!</strong><br />Denne bruger er låst og har derfor ikke adgang til siden. <br /><br /> Kontakt support@minhandel.dk for yderligere informationer.</div>");
                        break;

                    case "GodkendtKorrekt":
                        console.log("GodkendtKorrekt");
                        alert('Hallo... do SOMETHING');
                        break;

                    default:
                        console.log("ukendt data");
                        break;
                }
            }

            function loginAjax() {
                $.post(
                    "AccessFunction.php",
                    $("#loginFormPage").serialize(),
                    function (data) {
                        CheckLoginAjaxReturn(data);
                    }
                )
            }


            $(document).ready(function () {

            })
        </script>
    </head>
    <body>

        <div id="LoginErrorMessage"></div>

        <script>
            // test af CheckLoginAjaxReturn                       
            // jeg forvendter der kommer en string over, med nøgleordet
            CheckLoginAjaxReturn("TempBan");

// hvis dette virker kan jeg derefter teste loginAjax
        </script> 
    </body>
</html>
Avatar billede zombien Juniormester
24. juni 2016 - 17:58 #17
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><title>Brugt salg - domæne.dk</title><meta name="description" content="Her kan du sælge dine brugte genstande"><meta name="revisit-after" content="14"><meta name="robots" content="noindex, nofollow"><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><script type="text/javascript">// Set global JavaScript variablesvar base_url = 'http://domæne.dk/';</script><link rel="stylesheet" type="text/css" href="http://domæne.dk/addThisDirectory/layout/css/layout.css" media="screen" /><link rel="stylesheet" type="text/css" href="http://domæne.dk/addThisDirectory/layout/css/bootstrap.min.css" media="screen" /><link rel="stylesheet" type="text/css" href="http://domæne.dk/addThisDirectory/layout/css/classie.css" media="screen" /><link rel="canonical" href="http://domæne.dk/" /><script type="text/javascript" src="http://domæne.dk/addThisDirectory/scripts/jquery-1.11.2.min.js"></script><script type="text/javascript" src="http://domæne.dk/addThisDirectory/scripts/bootstrap.min.js"></script><script type="text/javascript" src="http://domæne.dk/addThisDirectory/scripts/classie.js"></script><script type="text/javascript" src="http://domæne.dk/addThisDirectory/scripts/ckeditor/ckeditor_basic.js"></script><script type="text/javascript" src="http://domæne.dk/addThisDirectory/scripts/ckeditor/config_custom.js"></script></head>
<script>
  window.fbAsyncInit = function() {
    FB.init({
      appId      : '0000000000',
      status    : true,
      cookie    : true,
      xfbml      : true,
      version    : 'v2.4'
    });
  };

(function(d){
    var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
    if (d.getElementById(id)) {return;}
    js = d.createElement('script'); js.id = id; js.async = true;
    js.src = "//connect.facebook.net/da_DK/all.js";
    ref.parentNode.insertBefore(js, ref);
}(document));

function FBLogin_Register(){
    FB.login(function(response){
        if(response.authResponse){
            window.location.href = "http://domæne.dk/facebook/register";
        }
    }, {scope: 'email,user_birthday,user_about_me,user_location'});
}

function FBLogin(){
    FB.login(function(response){
        if(response.authResponse){
            window.location.href = "http://domæne.dk/facebook/validate";
        }
    }, {scope: 'email,user_birthday,user_about_me,user_location'});
}

function FBLogout(){
    FB.logout(function(response) {
        window.location.href = "http://domæne.dk";
    });
}

</script>

<body><div class="container"><div class="row"><div class="col-xs-12 col-sm-6 col-md-4 pull-left"><a href="http://domæne.dk/" title="domæne.dk"><img src="http://domæne.dk/addThisDirectory/layout/gfx/logo.png" alt="domæne.dk" border="0" class="img-responsive"></a></div><div class="col-xs-12 col-sm-6 col-md-6 col-lg-5 pull-right"><div class="row"><form method="post" action="http://domæne.dk/login/validate" name="loginForm"><input type="hidden" value="checkFelter" name="action" readonly><div class="col-xs-12 col-sm-6 loginUser addMarginTop5px"><input type="text" placeholder="Indtast e-mail" name="userMail" class="form-control" value=""></div><div class="col-xs-12 col-sm-6 loginPass addMarginTop5px"><input type="password" placeholder="Indtast adgangskode" name="userPass" class="form-control" value=""></div><div class="col-xs-12 col-sm-6 addMarginTop5px"><input type="checkbox" name="userHusk" id="HuskMig"><label for="HuskMig">&nbsp; - Husk mig</label> <br /><a href="http://domæne.dk/glemt-login" title="Glemt login">Glemt login?</a></div><div class="col-xs-12 col-sm-6 loginPass addMarginTop5px"><button type="submit" class="btn btn-success col-xs-12">Log ind</button><button type="button" class="btn btn-success col-xs-12 addMarginTop5px addMarginBund">Log ind via Facebook</button></div></form></div></div></div></div><div class="container-fluid blueBar addMarginTop15px"> </div><div class="container addMarginTop15px"><div class="row"><div class="col-xs-12 col-sm-6 col-md-6 col-lg-7"><h1>Log ind på domæne.dk</h1><p>Du er netop i gang med at logge på domæne.dk, en af nettets store handelssteder for privat til privat salg.</p><div class="col-xs-12 col-sm-8 col-sm-offset-2"><div id="LoginErrorMessage"></div><form method="post" action="http://domæne.dk/login/validate" name="loginFormPage" id="loginFormPage"><input type="hidden" value="checkFelter" name="action" readonly><div class="form-groups addMarginTop5px"><input type="text" placeholder="Indtast e-mail" name="userMail" class="form-control" value=""></div><div class="form-groups addMarginTop5px"><input type="password" placeholder="Indtast adgangskode" name="userPass" class="form-control" value=""></div><div class="col-xs-12 col-sm-6 addMarginTop5px"><input type="checkbox" name="userHusk" id="HuskMig"><label for="HuskMig">&nbsp; - Husk mig</label> <br /><a href="http://domæne.dk/glemt-login" title="Glemt login">Glemt login?</a></div><div class="col-xs-12 col-sm-6 loginPass addMarginTop5px"><button type="button" class="btn btn-success col-xs-12" onclick="return loginAjax();">Log ind</button><button type="button" class="btn btn-success col-xs-12 addMarginTop5px addMarginBund">Log ind via Facebook</button></div></form></div><script>function loginAjax() {
    $.post(
        "http://domæne.dk/pages/ajaxFiles/loginFunction.php",
        $("#loginFormPage").serialize(),
        function(data) {

            switch(data){

                case "IngenBruger":
                    console.log("IngenBruger");
                    $("#LoginErrorMessage").html("<div class='alert alert-danger'><strong>Fejl!</strong><br />Kunne ikke finde en bruger med de indtastede oplysninger.</div>");
                break;

                case "TempBan":
                    console.log("TempBan");
                    $("#LoginErrorMessage").html("<div class='alert alert-danger'><strong>Fejl!</strong><br />Denne IP er midlertidig nægtet adgang af systemet, prøv igen senere.</div>");
                break;

                case "LockedUser":
                console.log("LockedUser");
                    $("#LoginErrorMessage").html("<div class='alert alert-danger'><strong>Fejl!</strong><br />Denne bruger er låst og har derfor ikke adgang til siden. <br /><br /> Kontakt support@domæne.dk for yderligere informationer.</div>");
                break;

                case "GodkendtKorrekt":
                console.log("GodkendtKorrekt");
                    alert('Hallo... do SOMETHING');
                break;

                default: console.log("ukendt data");
                break;

            }

            alert(data);


        })}</script><div class="col-xs-12" style="margin-top: 20px;">
                    </div></div></div></body></html><center><strong>Siden blev indlæst på 0.0249 sekunder.</strong></center>


Jamen hvis i kan se noget forkert så skal i være velkommen :) jeg kan ikke lige se hvor fejlen opstår :/
Avatar billede tryltryl Juniormester
24. juni 2016 - 18:35 #18
Lidt mere debug: alert(data.length+data); Passer længden med antallet af (synlige) tegn?
Avatar billede zombien Juniormester
24. juni 2016 - 18:58 #19
Nej det lader til der kommer 1 mere på end det antal tegn der skal være...

eksempelvis IngenBruger = 11 tegn men alert viser 12 tegn.
Avatar billede tryltryl Juniormester
24. juni 2016 - 19:57 #20
Linjeskift måske? Har du nærtjekket loginFunction.php?

alert(data.charCodeAt(data.length-1));

Hvis 10, så er det linjeskift :)
Avatar billede zombien Juniormester
24. juni 2016 - 20:15 #21
Den kommer tilbage med et helt åndsvagt tal den alert(data.charCodeAt(data.length-1)); da den returnere 114 :/
Avatar billede zombien Juniormester
24. juni 2016 - 20:42 #22
Så hvad er det lige som sker? og hvordan kommer jeg igennem dette så mit Ajax fungere...

det giver godt nok grå hår, for det giver ingen mening for mig at det ikke virker
Avatar billede olsensweb.dk Ekspert
24. juni 2016 - 20:43 #23
>Den kommer tilbage med et helt åndsvagt tal
det er da ikke et helt åndsvagt tal !!
det er et r så næst sidste tegn er et r, så må det være IngenBruger eller LockedUser du retunere hvis det er et af det ord du forvendter, men hvad er sidste tegn ??
alert(data.charCodeAt(data.length));


hvordan ser loginFunction.php ud ??


nb:
husk at validere din side
dine <meta, <img, <input  bliver ikke lukket korrekt efter XHTML standarten
du lukker med >
skal være />
dvs selvlukkende
Avatar billede tryltryl Juniormester
24. juni 2016 - 20:46 #24
Prøv at tjekke første tegn: alert(data.charCodeAt(0));
Avatar billede zombien Juniormester
24. juni 2016 - 20:51 #25
alert(data.charCodeAt(0));  returnere 10
Avatar billede olsensweb.dk Ekspert
24. juni 2016 - 20:54 #26
>alert(data.charCodeAt(0));  returnere 10
starter du med et linjeskift ??
Avatar billede zombien Juniormester
24. juni 2016 - 21:05 #27
den sender dette fra filen den kalder die('IngenBruger');
Avatar billede olsensweb.dk Ekspert
24. juni 2016 - 21:19 #28
du echo er stadig et linje skift ud før din die('IngenBruger');
Avatar billede zombien Juniormester
24. juni 2016 - 21:41 #29
ikke af hvad jeg kan se i koden... så er der ingen Echo '<br />'; da der kun er nogle settings som database og funktioner...
Avatar billede zombien Juniormester
24. juni 2016 - 21:42 #30
men smed da lige denne her på... ikke optimalt, men nu virker det da..

data = data.replace(/(\r\n|\n|\r)/gm,"");

tak for jeres tid og tålmodighed :)
Avatar billede olsensweb.dk Ekspert
24. juni 2016 - 21:49 #31
bare et gæt

loginFunction.php

her er et html linje skift, der giver problemer
<?php
sql

?>
Avatar billede zombien Juniormester
25. juni 2016 - 08:20 #32
Må indrømme det er første gang jeg er stødt på der skulle være problemer med følgende opbygning

<?php

$sql = 'bla bla bla bla julemanden kommer i nat';

?>
Avatar billede softspot Forsker
25. juni 2016 - 08:59 #33
Det tror jeg nu heller ikke er problemet. Det er nok snarere de data du trækker ud af din database, som ikke er helt præcis som du forventer (noget kunne jo tyde på det, hvis data indeholder linjeskift, hvilket du jo åbenlyst ikke forventer).

Spørgsmålet er, om du ifm. oprettelsen af disse data, har mulighed for at indsætte et linjeskift eller du har kopieret data et eller andet sted og i den forbindelse har kopieret mere med end du forventede.

Lærdommen må være, at du sikrer dig, at data er korrekt inden du angriber funktionaliteten, som arbejder på dine data. Du kan samtidig sikre dig, at hvis data er korrekt, så er din funktionalitet korrekt. Dette gøres ved, at isolere funktionalitet og teste den med kontrollerede datasæt (som jeg var inde på tidligere).
Avatar billede olsensweb.dk Ekspert
25. juni 2016 - 11:21 #34
#32
hvis du har et linjeskift eller mellemrum eller andet før <?php vil det opfattes som HTML og sendt også, du burde kende problemet fra header()
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

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