简体   繁体   English

如何从 PHP 和 PHP 文件中排除 HTML 仍然能够与 Z4C4AD5FCA2E7A3F74DBB1CED003 文件链接?

[英]How to exclude HTML from PHP and PHP file still able to link with the HTML file?

View table <-- this is my example.查看表<--这是我的例子。 And code is provided too.并且还提供了代码。 I need to separate HTML from PHP, moving HTML to another file but my PHP code still be able to link with it.我需要将 HTML 与 PHP 分开,将 HTML 移动到另一个文件,但我的 Z2FEC392304A5C23AC138DA228 仍然可以链接到它的代码。 Is there any idea?有什么想法吗? I am trying to make something like View model controller.我正在尝试制作类似于 View model controller 的东西。

<html>
<head>
<meta charset="utf-8">
<title>View Records</title>
<link rel="stylesheet" href="css/style.css" />
</head>
<body>
<div class="form">
<p>
    <a href="dashboard.php">Dashboard</a> 
|   <a href="view.php">View Records</a> 
|   <a href="insert.php">Add Admin</a>
|   <a href="logout.php" onclick="return confirm('Are you sure to Logout?');">Logout</a>

</p>

<table width="100%" border="1" style="border-collapse:collapse;">
    <thead>
        <tr>
            <th><strong>ID</strong></th>
            <th><strong>Username</strong></th>
            <th><strong>User Password</strong></th>
            <th><strong>Full Name</strong></th>
            <th><strong>Edit</strong></th>
            <th><strong>Delete</strong></th>
        </tr>
    </thead>
</body>


<?php
$count=1;
$sel_query="Select * from admin ORDER BY id ASC;";
$result = mysqli_query($con,$sel_query);
while($row = mysqli_fetch_assoc($result)) { ?>


<tr>
    <td align="center"><?php echo $row["ID"]; ?></td>
    <td align="center"><?php echo $row["username"]; ?></td>
    <td align="center"><?php echo $row["user_pass"]; ?></td>
    <td align="center"><?php echo $row["fullname"]; ?></td>
    <td align="center">
        <a href="edit.php?id=<?php echo $row["ID"];?>">Edit</a></td>
    <td align="center">
        <a href="delete.php?id=<?php echo $row["ID"]; ?>"onclick="return confirm('Data cannot be retrieved after deleted. Are you sure to delete?');">Delete</a></td>


</tr>
<?php $count++; } ?>
</tbody>
</table>
</div>
</body>
</html>```

Separating the php and html is a good start, and helps you see the next step in converting to OOP and then MVC.将 php 和 html 分开是一个好的开始,它可以帮助您了解转换为 OOP 和 MVC 的下一步。

MVC at this point is too broad for a simple answer here, but I would recommend this as a first step as it has the underlying principles:在这一点上,MVC 过于宽泛,无法在这里给出简单的答案,但我建议将其作为第一步,因为它具有基本原则:

  1. PHP is always at the top; PHP 始终在顶部; never output anything until all your logic is finished在完成所有逻辑之前,永远不要 output 任何事情

  2. Load configuration负载配置

  3. Work with user input and redirect if POST使用用户输入并在 POST 时重定向

  4. Execute business logic执行业务逻辑

  5. Exit PHP and output HTML.退出 PHP 和 output HTML。 Remember, PHP is essentially a templating language, might as well use it as such请记住,PHP 本质上是一种模板语言,不妨这样使用它

Your code would then look something like this:您的代码将如下所示:


<?php

// load database connection, etc
$url = 'your url';

// deal with user input. Always use POST if data will be changed!
if($_POST['action'] == 'delete') {

  // delete from admin where id=?
  header('location: '.$url);
  die;
}

// end "controller" section
// begin "model" section

$sel_query="Select * from admin ORDER BY id ASC;";
$result = mysqli_query($con,$sel_query);

// end "model" section
// begin "view" section. 
// Note, you could simply put the html in a separate file and just include it here. 

?>
<html>
<head>
<meta charset="utf-8">
<title>View Records</title>
<link rel="stylesheet" href="css/style.css" />
</head>
<body>
<div class="form">
<p>
    <a href="dashboard.php">Dashboard</a> 
|   <a href="view.php">View Records</a> 
|   <a href="insert.php">Add Admin</a>
|   <a href="logout.php" onclick="return confirm('Are you sure to Logout?');">Logout</a>

</p>

<table width="100%" border="1" style="border-collapse:collapse;">
    <thead>
        <tr>
            <th><strong>ID</strong></th>
            <th><strong>Username</strong></th>
            <th><strong>User Password</strong></th>
            <th><strong>Full Name</strong></th>
            <th><strong>Edit</strong></th>
            <th><strong>Delete</strong></th>
        </tr>
    </thead>
    </tbody>
    <?php while($row = mysqli_fetch_assoc($result)): ?>

    <tr>
        <td align="center"><?= $row["ID"] ?></td>
        <td align="center"><?= $row["username"] ?></td>
        <td align="center"><?= $row["user_pass"] ?></td>
        <td align="center"><?= $row["fullname"] ?></td>
        <td align="center">
          <form method="post">
            <input type="hidden" name="action" value="delete" />
            <input type="hidden" name="id" value="<?= $row["ID"] ?>" />
            <input type="submit" value="Delete" />
          </form>
        </td>
      </tr>
      <?php endwhile; ?>
</tbody>
</table>
</div>
</body>
</html>

Notice that following this pattern is laying the groundwork for moving to mvc.请注意,遵循此模式正在为迁移到 mvc 奠定基础。 But first, start working on your oop chops and move all the business logic into a model object.但首先,开始处理您的 oop 切片并将所有业务逻辑移动到 model object 中。

After that, you can move the template to its own file, and have the model injected into the view, which lets the view have access to the info it needs, and then render the output.之后,您可以将模板移动到自己的文件中,并将 model 注入到视图中,让视图可以访问所需的信息,然后渲染 output。

Meanwhile, you'll need a router (all traffic is rerouted to index.php) and controller, and figure out which interpretation of MVC you will use;)同时,您需要一个路由器(所有流量都重新路由到 index.php)和 controller,并确定您将使用哪种 MVC 解释;)

Here's a very basic solution.这是一个非常基本的解决方案。

Make an HTML file as a template.制作一个 HTML 文件作为模板。 Eg "template.html".例如“模板.html”。 Use HTML comments as placeholders for the data.使用 HTML 注释作为数据的占位符。 (I went with comments as it means the HTML remains compliant) I've left out some of the non-relevant bits, so hopefully you get the idea: (我发表了评论,因为这意味着 HTML 仍然兼容)我省略了一些不相关的部分,所以希望你能明白:

<html>
...
<table width="100%" border="1" style="border-collapse:collapse;">
<thead>
<tr>
    <th><strong>ID</strong></th>
    <th><strong>Username</strong></th>
    <th><strong>User Password</strong></th>
    <th><strong>Full Name</strong></th>
    <th><strong>Edit</strong></th>
    <th><strong>Delete</strong></th>
</tr>
</thead>
<tbody>
<!--ROW-->
<tr>
    <td align="center"><!--ID--></td>
    <td align="center"><!--username--></td>
    <td align="center"><!--user_pass--></td>
    <td align="center"><!--fullname--></td>
    <td align="center">
        <a href="edit.php?id=<!--ID-->">Edit</a></td>
    <td align="center">
        <a href="delete.php?id=<!--ID-->"onclick="return confirm('Data cannot be retrieved after deleted. Are you sure to delete?');">Delete</a></td>
</tr>
<!--ENDROW-->
</tbody>
</table>
</div>
</body>
</html>

Then, in your PHP code, you read in the html, find the row template, and replace the fields as needed:然后,在您的 PHP 代码中,您阅读 html,找到行模板,并根据需要替换字段:

<?php
// Read the template
$html = file_get_contents('template.html');

// Find the row template
$regRowTemplate = '/<!--ROW-->(.*)<!--ENDROW-->/i';
preg_match($regRowTemplate, $html, $m);
$rowTemplate = $m[1];

// Start building our replacement rows
$htmlRows = '';

$count=1;
$sel_query="Select * from admin ORDER BY id ASC;";
$result = mysqli_query($con,$sel_query);
while ($row = mysqli_fetch_assoc($result)) {
    // Start with a fresh copy of the template
    $htmlRow = $rowTemplate;
    // Replace comment placeholders with values
    foreach ($row as $key => $value) {
        $htmlRow .= str_replace('<!--' . $key . '-->', $value, $htmlRow);
    }
    // Append to our rows
    $htmlRows .= $htmlRow;
    $count++;
}
// Replace the row template with our expanded rows
$html = preg_replace(regRowTemplate, $htmlRows, $html);
// Do something with the html

Source untested, but should give you a good starting point.源未经测试,但应该给你一个很好的起点。 I kept it pretty raw.我把它保持得很原始。 If I was doing this for real, I'd allow for the possibility of spaces in the comment placeholders by using a regular expression instead, but for now it's good enough.如果我真的这样做,我会通过使用正则表达式来允许评论占位符中的空格,但现在它已经足够好了。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM