views:

54

answers:

3

Something is wrong with my print "<option value..."; line of php code.

It keeps generating error messages: an attribute value specification must be an attribute value literal unless SHORTTAG YES is specified

<option value = Addition>Addition</option>
<and so on...>

Okay, so how do i fix this line of code:

//foreach loop to cycle through the array
      foreach ($testFiles as $myFile)
      {
        $fileBase = substr($myFile, 0, strlen($myFile) - 5);
       **//Problem here:**
        print "<option value = $fileBase>$fileBase</option>\n";
      } // end foreach

such that's it's html compliant, the php code works fine, I just need validation on the html, cause you can't validate php, and the variable $fileBase references an html file, in this case Addition would be one of the files allotted to $fileBase.

+3  A: 
print "<option value = \"$fileBase\">$fileBase</option>\n";

Should do it

Tjofras
..as all attributes must be enclosed in (double) quotes according to the XHTML spec.
Tatu Ulmanen
Wow that was fast, I was still editing, thank you.
Newb
@Tatu Ulmanen: Can you point me to the XHTML spec document about double quotes? I was under the impression single quote is acceptable as well.
o.k.w
o.k.w try this: http://www.w3.org/TR/xhtml1/#h-4.4
Newb
A: 
print "<option value='$fileBase'>$fileBase</option>\n";
o.k.w
A: 

There are a few other options:

You could use printf:

printf('<option value="%s">%s</option>', $fileBase, $fileBase);

A here-doc:

echo <<<HTML
 <option value="$fileBase">$fileBase</option>
HTML;

You could drop out of PHP temporarily (generally a good technique, but not very pretty here):

<?
foreach ($testFiles as $myFile) {
 $fileBase = substr($myFile, 0, strlen($myFile) - 5);
 ?>
 <option value="<?= htmlentities($fileBase) ?>"><?= htmlentities($fileBase) ?></option>
 <?
}
?>

But really, what you should be doing is using one of the many templating systems out there, and not mixing HTML in with your code.

Ciarán Walsh