最佳做法-Web / PHP / MySQL应用程序技术

问题描述 投票:0回答:1

我在公用托管服务(MySQL,PHP)上托管了一个小应用程序,我正在做的是从数据库中输入数据并从中获取数据,并生成一些以html形式生成的表,其中显示了获取的数据。 代码示例如下。

我100%确信这确实不是执行此类应用程序的好方法。 真正让我烦恼的是,除了使用PHP获取数据(我认为还可以)之外,我还必须使用PHP生成HTML(我认为这确实不好)。

是否有一些好的推荐技术如何将这两件事分开? 要具有一些HTML页面并具有仅将请求传递到服务器并将所获取的数据从服务器传递到客户端的数据结构? 还是其他技巧?

谢谢您的回答

$mysqli = new mysqli('localhost', 'money_l', 'password', 'money_l');

$query1 = "SELECT date, name, value FROM list WHERE date between '$s_date' and '$e_date' ORDER BY date";
$query2 = "SELECT date, name, value FROM income WHERE date between '$s_date' and '$e_date'";
$query3 = "SELECT date, name, SUM(value) value FROM list WHERE date between '$s_date' and '$e_date'GROUP BY date UNION ALL
        SELECT date, name, SUM(value) value FROM income WHERE date between '$s_date' and '$e_date' GROUP BY date";


$result = $mysqli->query($query1);
while ($row = $result->fetch_array(MYSQL_ASSOC))
{
    $sum_list = $sum_list + $row['value'];

}

    echo "<table align='center'><tr><td>";

$result = $mysqli->query($query1);
echo "List of costs from " . $s_date . " to " . $e_date;
echo "<div id='loggerTable'>
  <table><th>Date of operation</th><th>Description</th><th>Amount</th>";
while ($row = $result->fetch_array(MYSQL_ASSOC))
{
    echo "<tr><td>";
    echo $row['date'];
    echo "</td><td>";
    echo $row['name'];
    echo "</td><td align='right'>";
    echo $row['value'];
    echo "</td></tr>";

}
$result = $mysqli->query($query3);
while ($row = $result->fetch_array(MYSQL_ASSOC))
{
    $plot_row1[] = $row['value'];
    $plot_row2[] = $row['date'];
}

echo "<td></td>";
echo "<th>Summary</th><th>$sum_list</th>";
echo "</table>";
php design-patterns web-frameworks
1个回答
1
投票

我建议您使用MVC设计模式(或更好地使用遵循这些模式的PHP框架,如CakephpLaravel等)。

如果您遵循MVC,则所有逻辑都将包含在模型中(例如:从数据库中获取数据,对其进行一些工作/操作)。 之后,将此(格式正确的)数据传递到您的控制器,该控制器将进一步将该数据发布/发送到视图(具有干净的html代码)。 您只需要一个循环(以数据数组为例)就可以用html填充它。 在view / html中没有丑陋的php逻辑,因为大多数这些事情已经在模型中完成。

如果您不了解它,请搜索有关MVC设计模式的信息。 我的答案涵盖了非常基本的想法。

以下是一些资源:

MVC PHP框架

PHP开发人员的MVC原理

© www.soinside.com 2019 - 2024. All rights reserved.