Avatar billede showsource Seniormester
16. maj 2007 - 11:10 Der er 12 kommentarer og
1 løsning

Er denne kode ok

Hej
Efter lidt søgen rundt her i Javascript, bruger jeg flg. til at vise  et preview af et billede i en uploadform.

Og vil bare høre om der er noget jeg bør ændre?

function vis_img(path) {

var ua = navigator.userAgent.toLowerCase();
var msie = ua.indexOf('msie');
    if (msie > -1) {
<?php
// $filtyper = array(1 => "gif", 2 => "jpg", 3 => "png", 4 => "swf");
    if(isset($filtyper[2])) {
    $filtyper[] = "jpeg";
    }
    if(isset($filtyper[4])) {
    unset($filtyper[4]);
    }
    $js_str = implode("\",\"", $filtyper);
?>
    var f = path;
    var filnavn = new String(path);
    filnavn = f.substring(f.lastIndexOf('\\')+1,f.length);
    filtypen = filnavn.substring(filnavn.lastIndexOf('.')+1,filnavn.length);
    filtypen = filtypen.toLowerCase();
    var img_reg = /^["<?php echo $js_str; ?>"]+$/;

        if(filtypen.match(img_reg)) {
        img_str = '<p>Imagepreview: af filen <b>' + filnavn +'</b><br /><img src="' + path + '" width="200" border="0"></p>';
        document.getElementById('img_pre').innerHTML = img_str;
        }
    }
}
Avatar billede sorensen_123 Nybegynder
16. maj 2007 - 11:19 #1
Undskyld jeg spoerger, men er det ikke ligemeget, hvis koden virker er det vel ok (med mindre at det er et topsikret bank login script :D) :)
Avatar billede showsource Seniormester
16. maj 2007 - 11:26 #2
Njøhh, det er nu mere fordi jeg (heller) ikke føler mig særlig go' til javascript, og vil høre om der var noget jeg burde ændre, selvom den virker.
Avatar billede olebole Juniormester
16. maj 2007 - 13:36 #3
<ole>

Du skal ikke kun sikre dig, at navigator.userAgent indeholder "MSIE", men også at den _ikke_ indholder "Opera". Opera udgiver sig nemlig pr. default som både Opera og IE  :o|

Derudover er det altid noget snask at bruge innerHTML. Dels er den ikke valid - dels overskriver man dokument-fragmenter ved at sætte innerHTML, hvilket betyder, at programmatiske referencer til elementer i fragmentet mistes - og sidst, men ikke mindst, er innerHTML komplet ubrugelig i XHTML (som jo er et subset af XML).

Hvis du i dokumentet har:
    <p id="display" style="display:none">Imagepreview: af filen <b>&nbsp;</b><br><img src="" width="200" border="0"></p>

- kan du i stedet skrive:
var o = document.getElementById("display");
o.getElementsByTagName("b")[0].firstChild.nodeValue = filnavn;
o.getElementsByTagName("img")[0].setAttribute("src", path);
o.style.display = "block";

/mvh
</bole>
Avatar billede olebole Juniormester
16. maj 2007 - 13:38 #4
- og så er det naturligvis noget vrøvl, at "alt er godt, hvis blot koden virker". Det er det kun, hvis man leger med webkodning ... for en seriøs koder ser virkeligheden helt anderledes ud  ;o)
Avatar billede showsource Seniormester
17. maj 2007 - 08:04 #5
Jahh, det med opera havde jeg lige glemt!

Hvis jeg laver det på den måde du foreslår, vil det så være "gangbart" i et xhtml doc?
Avatar billede showsource Seniormester
04. juni 2007 - 16:23 #6
olebole, vil du ha' point?
Avatar billede olebole Juniormester
05. juni 2007 - 14:24 #7
Undskyld, der har været lidt vrøvl med mails fra E på det seneste. Idag er jeg så blevet begavet med en ganske overdådig stak af slagsen  :oD

Ja, koden er ganske XHTML-kompatibel  =)
Avatar billede showsource Seniormester
07. juni 2007 - 19:28 #8
Takker!
Avatar billede olebole Juniormester
08. juni 2007 - 14:10 #9
Selvtakker ... også for points  ;o)
Avatar billede showsource Seniormester
28. august 2007 - 19:32 #10
Vil bare lige sige at.................

Har siddet nu i tre timer og rodet med session i php som ændrede sig.......

Forklaring:
Ved hver request sætter jeg en session, som svarer til den url man befinder sig på.
Dette er for at kunne redirecte tilbage samme side ved posts.
Men da jeg så begyndte med dette her preview halløj, virkede redirect til at begynde med, men efter en time eller så'n, så røg jeg bare tilbage til dir'et jeg befandt mig i, fordi ved submit blev min session ændret......


Og det viste sig at når jeg brugte
<img src="" width="200" border="0">
altså intet billede, så ved submit ændrede session sig.
På trods af jeg kunne se hvad den indeholdt som det sidste i mit doc.

Og løsningen var jo så at bruge et gennemsigtigt gif billede
<img src="/images/spacer.gif" width="200" border="0">

SÅ bibeholder jeg satte session........
Avatar billede olebole Juniormester
28. august 2007 - 20:41 #11
Hmmm .... kan det tænkes, du ikke bruger cookies til sessions? Det lyder under alle omstændigheder sært.

Hvorfor i øvrigt bruge sessions til den slags? Det er ikke så godt performende, da en session jo er en tekstfil, PHP først skal finde frem og læse. Er det ikke meget lettere at skrive:
    <input type="hidden" name="retPage" value="<?=$_SERVER["PHP_SELF"]?>">

- og så returnere brugeren til $_POST["retPage"]
Avatar billede showsource Seniormester
28. august 2007 - 23:04 #12
Ja, jeg bruger cookies. Tjekker bl.a. om den er sat ved posts.
Men bruger også .htaccess til at lave virtuelle dir, måske der er en sammenhæng?

Overvejede også post, men valgte session for at undgå evt. fejl
Avatar billede showsource Seniormester
28. august 2007 - 23:05 #13
"nemmere" undgå fejl
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