0

私は OOP PHP の初心者であり、できるだけ多くのコーディング規則をできるだけ早く正しく取得したいと考えています。私はこの小さなゲストブック スクリプトを作成しました。

Index.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();
?>

それ以外の場合は、オブジェクト指向プログラミングについて学びたい場合は、オブジェクト インターフェイスを使用して練習、練習、練習します。

form fieldのような単純なものから始めます。スクリプト全体ではありません。

于 2012-11-09T08:28:28.870 に答える
4

はい、最初に注目すべき最も明白なことは、SQL インジェクションに対する脆弱性です。

mysql_*新しいコードで関数を使用しないでください。それらはもはや維持されておらず、非推奨プロセスが開始されています。赤いボックスがか? 代わりにプリペアド ステートメントについて学び、 PDOまたはMySQLiを使用してください。この記事は、どちらを決定するのに役立ちます。PDO を選択する場合は、ここに良いチュートリアルがあります。

また、ロジックをプレゼンテーションから分離する (つまり、PHP と HTML など) ことも良い方法と考えられています。

于 2012-11-09T08:28:35.923 に答える