Search code examples
phpfopenstring-concatenationfeof

Strings won't concatenate correctly in PHP


I have a loop running in a PHP script that's part of a .inc.php (it's a header that reads from a .txt file so that it can add to it's navbar from information solely from the .txt). For example, in the .txt could be:

about

contact

support

It reads the text file in a line by line basis and returns each line as a string, which is then echoed out as a link in the navbar. For whatever reason, the about and contact links don't have the ".php" extension, but the support link does. No matter what's put into the .txt file, the last line of it will always get the extension, while the others don't. I've juggled around quotations within the echo statement, but to no avail. Any ideas as to how I can fix this?

<?php

    if (file_exists("pagespage.txt")) {

       $newFile = fopen('pagespage.txt', 'r');

       while (! feof($newFile)) {
           $pagename = fgets($newFile);
           $pagenamecap = ucwords($pagename);
           echo "<li><a class=button href=" . "$pagename.php>" . $pagenamecap . "</a></li>";
        }
    }
    ?>

Solution

  • Your rendered HTML looks like this:

    <li><a class=button href=contact
    .php>Contact
    </a></li>
    

    Can you see why this might be a problem?

    Firstly, add quotes around your attributes. Second, trim your string.

    $pagename = trim(fgets($newFile));
    $pagenamecap = ucfirst($pagename);
    echo '<li><a class="button" href="'.$pagename.'.php">'.$pagenamecap.'</a></li>';
    

    ("Support" didn't have this problem because it was the last line in the file, and therefore didn't have a newline at the end of it)