0

我是 OOP PHP 的新手,我想尽快获得尽可能多的编码约定。我制作了这个小小的留言簿脚本,我想知道是否有任何事情没有完成。

索引.php:

<?php
$username = "root";
$password = "";
$database = "oop";
$host = "localhost";

mysql_connect($host, $username, $password);
mysql_select_db($database);
?>
<html>
<head>
</head>
<body>
    <?php
    include("views/gaestebog.php");
    ?>
</body>
</html>

Guestbook.php,类:

<?php
class Gaestebog {

    public function __contruct() {

    }

    public function getPosts() {
        $query = mysql_query("SELECT * FROM gaestebog");
        while ($row = mysql_fetch_array($query)) {
            echo '
            <tr>
                <td>'.$row['navn'].'</td>
            </tr>
            <tr>
                <td>'.$row['besked'].'</td>
            </tr>
            ';
        }
    }

    public function addPost($navn, $besked) {
        mysql_query("INSERT INTO gaestebog VALUES('', '$navn', '$besked')");
    }
}
?>

和guestbook.php,视图:

<?php
include("classes/Gaestebog.php");
$gaestebog = new Gaestebog();
if (isset($_POST['opret'])) {
    $navn = $_POST['navn'];
    $besked = $_POST['besked'];
    $gaestebog->addPost($navn, $besked);
}
?>
<table>
    <?php
    $gaestebog->getPosts();
    ?>
</table>

<hr />

<form action="" method="post">
    <table>
        <tr>
            <td>Navn:</td>
            <td><input type="text" name="navn" value="Patrick" /></td>
        </tr>
        <tr>
            <td>Besked:</td>
            <td><input type="text" name="besked" value="Hej med dig !!" /></td>
        </tr>
        <tr>
            <td><input type="submit" name="opret" value="Opret" /></td>
        </tr>
    </table>
</form>
4

3 回答 3

4

几点:

  • 不要使用已弃用的 mysql 库,请尝试 PDO 或 MySQLi
  • __contruct()有错别字,应该是__construct()
  • 不要从 get 方法返回原始 HTML getPosts(),而是返回一个帖子数组,如果这是你想要的输出,让视图创建 HTML
  • 防止 SQL 注入,您的INSERT查询易受攻击
于 2012-11-09T08:31:31.800 回答
4

这通常被称为带有过时库的过程编程:

mysql_connect($host, $username, $password);
mysql_select_db($database);

这只是你剧本的开始。也许最好不要太关注花哨的编程术语,而只是完成工作。

示例guestbook.php

<?php
require('bootstrap.php');

$page = new Htmlpage('My Guestbook');
$page->start($_SERVER['REQUEST_URI']);

$gaestebog = new Gaestebog();

echo '<table border="1">';

foreach ($gaestebog->getPosts() as $post)
{
    $row = new Htmlencoded($post);

    echo <<<OUT
            <tr>
                <td>$row['navn']</td>
            </tr>
            <tr>
                <td>$row['besked']</td>
            </tr>
OUT;
}
echo '</table>';

$page->closeRequest();
?>

否则,如果您想学习面向对象的编程,请使用对象接口并练习、练习、练习。

从简单的东西开始,比如表单域。不是一个完整的脚本。

于 2012-11-09T08:28:28.870 回答
4

是的,首先要注意的是您的SQL 注入漏洞。

请不要mysql_*在新代码中使用函数。它们不再被维护,并且已经开始弃用过程。看到红框了吗?改为了解准备好的语句,并使用PDOMySQLi -本文将帮助您决定使用哪个。如果您选择 PDO,这里有一个很好的教程

此外,将逻辑与表示分离(即 PHP 与 HTML)被认为是一种很好的做法。

于 2012-11-09T08:28:35.923 回答