2016-07-25 6 views
0

J'ai une boucle qui tourne dans un script PHP qui fait partie d'un .inc.php (c'est un en-tête qui lit à partir d'un fichier .txt afin qu'il puisse ajouter à sa barre de navigation à partir d'informations uniquement à partir du .txt). Par exemple, dans le txt pourrait être:Les chaînes ne seront pas concaténées correctement dans PHP

à propos

contacts

soutien

Il lit le fichier texte en ligne par ligne et retourne chaque ligne comme chaîne, qui est ensuite répercutée comme un lien dans la barre de navigation. Pour une raison quelconque, les liens about et contact n'ont pas l'extension ".php", mais le lien de support le fait. Peu importe ce qui est mis dans le fichier .txt, la dernière ligne aura toujours l'extension, tandis que les autres ne le feront pas. J'ai jonglé autour des citations dans la déclaration d'écho, mais en vain. Des idées sur la façon dont je peux résoudre ce problème?

<?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>"; 
     } 
    } 
    ?> 
+0

Pouvez-vous nous montrer ce que la le fichier ressemble à? –

Répondre

3

Votre rendu HTML ressemble à ceci:

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

Pouvez-vous voir pourquoi cela pourrait être un problème?

Tout d'abord, ajoutez des guillemets autour de vos attributs. Deuxièmement, trim votre chaîne.

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

(« Support » n'a pas ce problème parce qu'il était la dernière ligne dans le fichier, et n'a donc pas une nouvelle ligne à la fin de celui-ci)

2

Votre structure de liens est incorrecte. Vous avez besoin de citations autour du href. Vous n'avez pas besoin de sortir de l'écho pour concaténer.

echo "<li><a class=button href='$pagename.php'>$pagenamecap </a></li>"; 

Vous pouvez utiliser des accolades {} autour des noms de variables pour vous assurer qu'il ne soit pas mélangé avec tout autre mot:

echo "<li><a class=button href='{$pagename}.php'>{$pagenamecap} </a></li>"; 
+1

Les citations sont techniquement optionnelles autour des valeurs d'attribut, à condition qu'elles soient limitées dans les symboles qu'elles contiennent. –

+0

Hmm. Intéressant. Je suppose que c'est tellement ancré dans ma tête. Cela ne me semble pas juste, et il est probablement préférable de les utiliser. – aynber

+1

Oh, absolument. Je ne le nie pas. Mais cela ne résoudra pas le problème, car 'href' sera' contact% 0D% 0A.php', ce qui conduira sans doute à un 404 :) –