变量/函数中的MySQLi查询(以后可用于回显内容)

时间:2017-04-03 22:24:04

标签: php sql string mysqli heredoc

所以我遇到了问题。我正在PHP中创建某种“模板化”页面(不,我不能使用Twig或类似的东西),以后会增加实际内容。

我的主要问题是在navbar中回显链接。我正在使用MaterialiseCSS,因此为了使导航栏响应,可以在不同的UL内写两次链接。我可以很容易地回应它,就像这样:

<?php
$sql = "SELECT id, pagename, filename FROM NavbarLinks";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    $navstructure =
         <<<HTML
         <header>
         <nav class="$primarycolor">
         <div class="container">
            <div class="nav-wrapper">
              <a href="#!" class="brand-logo">$sitename</a>
              <ul class="right hide-on-med-and-down">

HTML;
    echo $navstructure;
    //  output data of each row
    while($row = $result->fetch_assoc()) {
        echo '<li><a href="' . $row['filename'] . '">' . $row['pagename'] . '</a></li>
        ' ;
    }

    }
    echo "
    </ul>
  </div>
  </div>
  </nav>
  </header>";

?>

这没有错误。问题是,我需要(根据MaterialiseCSS规范/文档):

<nav>
<div class="nav-wrapper">
  <a href="#!" class="brand-logo">Logo</a>
  <a href="#" data-activates="mobile-demo" class="button-collapse"><i class="material-icons">menu</i></a>
  <ul class="right hide-on-med-and-down">
     // links
  </ul>
  <ul class="side-nav" id="mobile-demo">
    // links again
  </ul>
</div>
</nav>

所以我想要做的很简单:创建一个navbar.php并在HEREDOC变量上有结构,在变量$navbarlinks中我将打印出我从第一个代码获得的所有链接告诉你。对我来说问题是将链接放在一个变量而不是显示所有结果只会打印一个,我找不到改变它的方法。

如果有$navbarlinksnavbarlinks()打印所有mySQL结果并在任何地方工作,我该怎么做?

2 个答案:

答案 0 :(得分:0)

您只想将其放入数组中供以后使用。您还应该尝试将PHP与HTML分开,这可能是一个良好的开端,但仍需要HTML escaping之类的东西。请特别注意alternative syntaxshort echo tags的使用。

<?php
$links = [];
$sql = "SELECT id, pagename, filename FROM NavbarLinks";
$result = $conn->query($sql);
if ($result) {
    while($row = $result->fetch_assoc()) {
        $links[] = array_map('htmlspecialchars', $row);
    }
}
// PHP is finished now, here's the HTML
?>

<?php if (count($links)):?>

         <header>
         <nav class="<?=$primarycolor?>">
         <div class="container">
            <div class="nav-wrapper">
              <a href="#!" class="brand-logo"><?=$sitename?></a>
              <ul class="right hide-on-med-and-down">
    <?php foreach ($links as $link):?>
                  <li><a href="<?=$link['filename']?>"><?=$link['pagename']?></a></li>
    <?php endforeach?>

              </ul>

              <ul class="side-nav" id="mobile-demo">
    <?php foreach ($links as $link):?>
                  <li><a href="<?=$link['filename']?>"><?=$link['pagename']?></a></li>
    <?php endforeach?>

            </ul>
            </div>
         </div>
         </nav>
         </header>
<?php endif?>

答案 1 :(得分:-1)

不再练习php,但据我记得html / css元素不必传递给变量..你可以在css元素之前结束php并再次从你的循环中打开php

    <?php
    $sql = "SELECT id, pagename, filename FROM NavbarLinks";
    $result = $conn->query($sql);

    if ($result->num_rows > 0) {
        ?>

         <HTML
         <header>         
            <nav class="$primarycolor">
             <div class="container">
                <div class="nav-wrapper">
                  <a href="#!" class="brand-logo">  <?php=$sitename?> </a>
                  <ul class="right hide-on-med-and-down">


     <?php

        while($row = $result->fetch_assoc()) {
            echo '<li><a href="' . $row['filename'] . '">' . $row['pagename'] . '</a></li>
            ' ;
        }

      ?>

        </ul>
      </div>
      </div>
      </nav>
      </header>";

<?php
  }
   ?>
<!-- end -->