Avatar billede mik789 Nybegynder
07. marts 2003 - 10:16 Der er 17 kommentarer og
1 løsning

php og validering

Det gør åbenbart en forskel om man skriver:

<img src="billed<?php if($r==1){ ?>_10.jpg" width="100" height="200" <?php }elseif($r==2){ ?>.jpg" width="200" height="400"<php } ?> alt="" />

eller om man skriver:

<?php if($r==1){ ?>
<img src="billed_10.jpg" width="100" height="200" alt="" />
<?php }elseif($==2){ ?>
<img src="billed.jpg" width="200" height="400" alt="" />
<?php } ?>

I første tilfælde opfattes koden forkert af W3C's html validator, i andet tilfælde rigtigt, selv om browserne ikke har de samme problemer, og selv om "Vis kode" i browseren viser den korrekt parset kode.

Ligesådan hvis man bruger php i sine stylesheet er der måske problemer med at gå ind og ud af koden inden for værdierne i den enkelte selectorproperty, altså om man skriver:

body {
  margin: <?php if($r==1) ?>10<?php }elseif($r==2){ ?>20<?php } ?>px;
}

eller:

<?php if($==1){ ?>
body {
  margin: 10px;
}
<?php }elseif($==2){ ?>
body {
  margin: 20px;
}
<?php } ?>

Er der nogen klare regler her? Det burde da egentlig ikke være nødvendig med den megen gentagelse det kræver hvis man kun må have php koden omrkring hele tags eller selectorer. Hvad gør I andre?
Avatar billede erikjacobsen Ekspert
07. marts 2003 - 10:26 #1
Validatoren er ligeglad med hvordan HTML og CSS koden er lavet.
Den her kan laves
  margin: <?php if($r==1) ?>10<?php }elseif($r==2){ ?>20<?php } ?>px;
sådan her
  margin: <?=$r==1?10:20?>px;

Du har sikkert i valideringen at $r hverken er 1 eller 2
Avatar billede postndk Nybegynder
07. marts 2003 - 10:30 #2
du har ef fejl :
elseif($==2){ ?>

skal være noget :
elseif ($r==2) { ?>
Avatar billede postndk Nybegynder
07. marts 2003 - 10:30 #3
dette er et svar
Avatar billede mik789 Nybegynder
07. marts 2003 - 10:51 #4
erikjacobsen> den der shorthand kode, er den brugbar på alle servere der parser php, eller kun på nogle?

postndk> det var bare en slåfejl her, og det er ikke det der giver fejl i validatoren.
Avatar billede postndk Nybegynder
07. marts 2003 - 10:56 #5
erikkacobsen > kan du lige forklare den if-statement, engang, den kan jeg ikke lige lure ....
Avatar billede erikjacobsen Ekspert
07. marts 2003 - 10:59 #6
Jeg kan ikke huske om det er en indstilling at man kan skrive
<?= værdi?> og få den udskrevet. Men så skriver du bare
<? print værdi;?> eller <?php print værdi;?>

Den der  $r==1?10:20  virker altid - med garanti. Den består af
betingelse?værdi1:værdi2 og virker sådan: er betingelsen sand så
bliver det værdi1 ellers værdi2
Avatar billede mik789 Nybegynder
07. marts 2003 - 10:59 #7
jeg forstår den godt: det er ligesom i java script: spørgsmålstegnet angiver if og kolon angiver
Avatar billede mik789 Nybegynder
07. marts 2003 - 11:02 #8
erikjacobsen>

skal der ikke anførselstegn omkring værderne, altså:

margin: <?=$r==1?'10':'20'?>px;

der er jo tale om strenge der skal skrives i html koden
Avatar billede mik789 Nybegynder
07. marts 2003 - 11:03 #9
eller betyder = efter <? at det er en echo kommando?
Avatar billede erikjacobsen Ekspert
07. marts 2003 - 11:05 #10
Der skal ikke '...' onkring, men der må gerne.
Avatar billede mik789 Nybegynder
07. marts 2003 - 11:06 #11
erikjacobsen> OK, prøver mig lige lidt frem...
Avatar billede swaxi Nybegynder
07. marts 2003 - 20:47 #12
<?=$x?>  er kort for <?php echo $x; ?>
og man kan godt slå det fra i php.ini, så du kan ikke regne med at alle webhoteller vil fortolke det såddan, men det er default så ...
Avatar billede mik789 Nybegynder
08. marts 2003 - 07:43 #13
tak så langt. på den server jeg skal bruge fraråder man shorthand versionen, så jeg holder mig til den lange. det viser sig at når jeg bruger echo eller print kan jeg godt bruge php midt i et tag uden problemer for validatoren, f.eks.:

<img src="billed<?php ($r==1)?{print("_10.jpg\" width=\"100\" height=\"200\""):print(".jpg\" width=\"200\" height=\"400\""); ?> alt="" />

men hvis jeg gør noget tilsvarende uden echo eler print - altså ved at gå ud og ind af html koden (som det første eks. i mit spørgsmål), så giver det problemer. Hvorfor det? Det burde være det samme. Og er vel også hurtigere fordi der ikke er nogle funktioner.

erikjacobsen> læg et svar, så jeg kan komme af med minde points ;-)
Avatar billede je79ayps Novice
10. marts 2003 - 08:20 #14
Jeg er just begyndt på PHP (så undskyld hvis det er dumt spg.) og jeg troede egentlig ikke at man behøvede at lave om i CSS ifm med PHP, men skal man det?
Avatar billede swaxi Nybegynder
10. marts 2003 - 14:54 #15
je79ayps > det kommer du nok til at uddybe lidt, hvis du vil have et svar. for mig at se giver dit spørgsmål nemlig ikke mening. :)
Avatar billede je79ayps Novice
11. marts 2003 - 08:19 #16
Ja, jeg det sq lidt svært at forklare sig når ikke man er så meget inde i det, men det jeg snublede over var bl.a. dette:

body {
  margin: <?php if($r==1) ?>10<?php }elseif($r==2){ ?>20<?php } ?>px;
}

Det ligner da noget stylesheet eller hvad - hvornår skal man skrive som ovenstående?
Avatar billede mik789 Nybegynder
11. marts 2003 - 10:14 #17
je79ayps> det ER et stylesheet. fordelen ved at lave stylesheetet i php kan være at du kan indsætte browserafhængige værdier som php så sorterer i, i stedet for at lave et helt set af forskellige stylesheets. F.eks. opfatter IE5 css boksmodellen forskelligt fra IE6 (som følger standarden). En boks der i alt skal fylde 100px i bredden og som har en border på 1px skal have width:98px i IE6 men width:100px i IE5. I stedet for at lave to stylesheets kan du samle det hele i ét og så lade php sorterer i værdierne. F.eks.:

#boks {
  border: 1px solid black;
  width: <?php if($IE5){ ?>100<?php }elseif($IE6){ ?>98<?php } ?>px;
}

og det sidste kan så skrives forskelligt som det fremgår af de tidligere svar, med eller uden echo/print, i langt eller kort format osv. Stylesheetet skal så bare have efternavnet .php og det skal starte med en header der fortæller at det er css, dvs.:

<?php header("Content-type: text/css"); ?>
Avatar billede mik789 Nybegynder
11. marts 2003 - 10:16 #18
erikjacobsen> hvis ikke du vil ha pointene snupper jeg dem selv
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