2

私はPHPアプリケーションを作成しており、手続き型プログラミングではなくオブジェクト指向を学習しようとしているので、それを使用してオブジェクト指向をテストしています。

基本的に、ユーザーがシステムを使用して予約できるコースのリストがあり、それらはユーザープロファイルに表示されます。プロファイルから、予約した各コースの横にある「削除」リンクが必要です。クリックすると、コースが削除されます。

これにはhtmlフォームを使用する必要がありますか?私はそれを始めましたが、それは正しくないようです。「delete_course」という関数があり、やりたいことを実行します。渡す必要があるのは、DB内の投稿のIDだけです。だから...私の質問は...関数呼び出しのあるページにフォームのIDを投稿するのがベストプラクティスでしょうか?

そして、これが最善の方法である場合、ユーザーが表示している同じ(現在の)ページに投稿するか、「cancel_course.php」などの別のページに投稿するのが最善ですか?メリットは何ですか?

ありがとう

ああ、ところで、私はPHPに比較的慣れていませんが、JSをたくさんやったので、PHPを学ぼうとするだけで、ajaxがより良いオプションであることがわかります:)

4

4 に答える 4

4

JavaScriptを使用せずにHTTP経由で変数をPOSTする場合は、メソッド属性が「post」のHTML形式のフォームが必要になります。

各削除ボタンには、データベース内のコースのIDの値を含めることができます。これにより、PHPで削除されているコースを簡単に識別できます。

HTML:

<form method="post">
    <ul>
        <li>
            <h1>Learn how to sew course</h1>
            <button type="submit" name="deleteCourse" value="1">Delete</button>
        </li>
        <li>
            <h1>Learn how to knit course</h1>
            <button type="submit" name="deleteCourse" value="2">Delete</button>
        </li>
</form>

PHP:

if(!empty($_POST["deleteCourse"])) {
    $courseList->deleteById($_POST["deleteCourse"]);
}
于 2012-06-27T09:24:20.713 に答える
3

いくつか例を挙げると、いくつかの選択肢があります。

1)URL経由:次のようなハイパーリンクを作成します。

http://www.example.com/myprofile.php?deleteCourseid=23
http://www.example.com/myprofile.php?deleteCourseid=54

などそしてmyprofile.phpから:

if (isset($_GET["deleteCourseid"]){
  $deleteme = (int)$_GET["deleteCourseid"];
  // Some query here.
}

2)フォームのPOSTを介して。同じ論理が適用されます。

$_GET["deleteCourseid"]と$_SESSION["userid"]のようなものに基づいてコースを削除できるように、セッションロジックを使用してユーザーを識別することもお勧めします。

次のようなテーブルがあると仮定します:[Postgresql]

CREATE tblusercourse(
  usercourseid SERIAL PRIMARY KEY,
  userid INTEGER REFERENCES tblusers(userid),
  courseid INTEGER REFERENCES tblcourse(courseid),
)
于 2012-06-27T09:26:15.073 に答える
2

私が正しく理解していれば、あなたは何かのリストを持っており、それぞれに独自の削除ボタンがあります。

たとえば、ラトビア語コース[コースの削除]

[コースの削除]には、delete_course =$idのようなGETパラメータを持つ同じページへのリンクがあるというのは非常に簡単です。その後

if (isset($_GET['delete_course'])) {
    $class->delete_course($_GET['delete_course']);
}
于 2012-06-27T09:23:08.043 に答える
2

最良のオプションは、ajax呼び出し(よく知っていると述べた)を使用してプロファイルからアイテムを削除することです。これには、2つの利点があります。

  1. ユーザーはページの読み込みを待つ必要はありません。楽観的なモデルを想定して、すぐにDOMからアイテムを削除し、失敗したコールバックを登録してHTML要素を復元し、問題が発生した場合にユーザーに通知するだけです。
  2. サーバー帯域幅の(少しの)節約-はい、これは小さな最適化です、私は認めます:P

しかし、あなたはPHPに不慣れであると述べているので、特にデータベースが必要な場合は、この種のことを行うためにプレーンなPHPファイルを使用しないことをお勧めします。このようにして、悪いabhits(PDOの代わりにmysql拡張関数を使用するなど)を学ぶことができます。実際、このknowloedgeは、真のオブジェクト指向ではなく、実際のアプリケーションでも使用されていません。

PHP開発者(PythonおよびRuby開発者など)は現在、フレームワークを使用してアプリケーションを構築しています。これらのフレームワークは、多くの場合、データベースからPHPコードへのORマッピングを提供し、実際のOOコードを記述できるようにします。また、MVCパラダイムのおかげで保守も簡単です。

これらのフレームワークのほとんどはオープンソースであるため、コードを確認することでPHPの内容を学ぶことができます。私は個人的にCakePHPをお勧めします。

于 2012-06-27T09:38:10.207 に答える