Husk at <img> tags SKAL have en valid src 28. jul 2006

Jeg har aldrig rigtig gidet de folk der pisker en stemning op om at en html-side skal være 100% valid kode - men arbejdet med at fjerne en mystisk fejl i den kommende udgave af Humata WebSystem, har fået mig på lidt andre tanker.

Sideadministrationsdelen har hidtil bestået af to komponenter, page_tree der viser træstrukturen over alle sider og page_edit der viser redigeringsfeltet for en enkelt side. Førhen blev nye sider oprettet af page_tree, der satte den nye side ind i strukturen, og derefter kaldte page_edit så brugeren kunne redigere den nye side. En af ændringerne i den nye udgave er at nye sider nu istedet bliver oprettet af page_edit, der så asynkront kalder page_tree som indsætter den nye side i listen. Det skulle gerne forbedre performance en del, for eksempel ved at brugeren ikke behøver at vente på at page_tree henter hele træstrukturen.

Det forekom en simpel lille ændring - page_tree blev kaldt med en create parameter, nu bliver page_edit kaldt med den samme parameter. Og det virkede da også fint - med en enkelt lille undtagelse: Når jeg trykkede på "opret ny side" kom der ikke kun en, men to fuldstændig ens nye sider!

Jeg checkede alt igennem, singlesteppede gennem mit javascript, stoppede så snart den ene side var blevet oprettet - kiggede i databasen - der var to sider! Jeg fik php-koden til at udskrive en masse debug-info - når jeg oprettede en ny side fik den for eksempel id nummer 74 - og page_edit viste kun side 74 - men i databasen var der også en side 75... Hvor kom den fra?

Jeg kiggede i serverens logfiler, og ganske rigtigt, mindre end et sekund efter at page_edit blev kaldt første gang, blev den kaldt en gang til - men af hvem eller hvad?

- [27/Jul/2006:22:38:16 +0200] "GET /admin/page_edit.php?create=49&tab=basic HTTP/1.1" 200 20169
- [27/Jul/2006:22:38:17 +0200] "GET /admin/layout.css.php HTTP/1.1" 200 2014
- [27/Jul/2006:22:38:17 +0200] "GET /admin/page_edit.php?create=49&tab=basic HTTP/1.1" 200 20169

Jeg opdagede at det også skete selv om jeg ikke kaldte med parameteren create - faktisk skete det også ved et par andre filer ... hvorfor blev de kaldt to gange?

Den eneste mulighed var at prøve sig frem - jeg havde to ret ens filer hvor den ene blev kaldt to gange, mens den anden kun blev kaldt en gang. Linje for linje byttede jeg om på de to filer, og pludselig så var den der!

Det viste sig at der i alle de filer der blev kaldt to gange, var et billede der ikke blev vist. De nye sider havde for eksempel et ikon der var NULL. Og det manglende billede blev vist af et <img src=""> tag ... og hvor fandt browseren så på at lede efter billedet? Tja, vi har jo alle prøvet at skrive <form action=""> for at vise at formen skal submittes til siden selv.

<img src=""> forsøger altså at indsætte siden selv som image-source - derfor blev php-koden udført to gange, men der var ikke nogen mulighed for output, javascript eller andet, så jeg blev ikke gjort opmærksom på fejlen.

Hvordan kunne jeg have undgået at skulle bøvle med den fejl? Ved altid at sørge for at en side er valid, og at alle img src peger et eller andet sted hen!

Tilføj kommentar

www.peterlind.dk

Nyeste blog-indlæg