7

PHP で OOP を使用してフォーム送信アクションを実行する方法を理解するのに少し助けが必要です。当面のタスク... OOP を使用して PHP コードを記述する方法を学ぼうとしています。これまでのところ、クラス、関数、呼び出し関数、継承などの一般的な考え方を理解しています。

ユーザーが特定の場所で食事を検索できるようにする練習用の簡単なプロジェクトを作成しました。これまでのところ、2 つのフィールドを持つフォームがあり<input>ます。通常はフォーム アクションの場合はそうします<form action="actionFileName.php">が、フォームを処理する関数を持つクラスができたので、アクション値には何を使用すればよいでしょうか?

クラスのインスタンスを作成し、フォームを処理する関数を呼び出すことを考えましたが、オブジェクトが見つかりません! アドレスバーに表示されているステートメントのecho値を含むフォームを送信した後のページ。elsehungryClass.php

どうすればこれを修正できますか? ありがとう。

私のコードがどのように見えるか: HTML フォーム

<?php  require_once 'hungryClass.php';
  $newSearch = new hungryClass();
?>
<form action="<?php $newSearch->searchMeal();?>" method="post" id="searchMealForm">
  <input type="search" size="35" placeholder="What Food Are you looking for?" id="mealName" class="meal"/>
  <input type="search" placeholder="City Area" id="mealLocation" class="meal">
  <input type="submit" value="Satisfy Me" id="findMeal" />
</form>

フォームを処理するページ (hungryClass.php)

<?php 
  require_once('dbConnect.php');
  class hungryClass{

       public function searchMeal(){
         //call connection function.
          $connect = new dbConnect();

         //validate input
         if(isset($_POST['mealName'])){
             $meal = $_POST['mealName'];

           //ensure value is a string.
           $cleanse_meal = filter_var($meal, FILTER_SANITIZE_STRING);
           echo $cleanse_meal;
        }
        else{
       echo "Please supply the meal you crave";
        }

      //validate location
       if(isset($_POST['mealLocation'])){
     $location = $_POST['mealLocation'];

         //validate and sanitize input. ensure value is a string.
    $cleanse_location = filter_var($location, FILTER_SANITIZE_STRING);
        echo $cleanse_location;

       }
       else{
     echo "Please supply a location";
       }

}

データベース クラス

<?php

class dbConnect{
private $host = "localhost";
private $user = "stacey";
private $pass = "";
private $db_name = "menu_finder";

private $connect;
//private static $dbInstance;

public function __construct(){
    try{
        $this->connect = new mysqli($host, $user, $pass, $db_name);
        if(mysqli_connect_error()){
           die('connection error('.mysqli_connect_errno().')' . mysqli_connect_error());
        }
    }

    catch(Exception $e){
        echo $e->getMessage();
    }
}

?>

4

4 に答える 4

5

フォームのアクション属性は、送信先のスクリプト名用です。フォームをハングリー クラスに送信して処理させたいと考えていますが、これは、ハングリー クラスをインスタンス化するまで実行できません。フォームのアクション値としてスクリプト名を使用する必要があります。temp.php に送信する場合、フォームは次のようになります。

<form action="temp.php" method="post" id="searchMealForm">
  <input type="search" size="35" placeholder="What Food Are you looking for?" id="mealName" class="meal"/>
  <input type="search" placeholder="City Area" id="mealLocation" class="meal">
  <input type="submit" value="Satisfy Me" id="findMeal" />
</form>

このフォームが送信されると、temp.php に送信されます。空腹のクラスにこのフォームを処理させるには、temp.php でフォームのインスタンスを作成し、このインスタンスで searchMeal を呼び出す必要があります。temp.php は次のようになります。

<?php
  require_once 'hungryClass.php';
  $newSearch = new hungryClass();
  $newSearch->searchMeal();
?>

またはすべてを1つのファイルに入れる

<?php
require_once 'hungryClass.php';

if($_SERVER['REQUEST_METHOD'] == 'POST') {
  $newSearch = new hungryClass();
  $newSearch->searchMeal();
  exit();
}
?>
<form action="<? echo $_SERVER['PHP_SELF']?>" method="post" id="searchMealForm">
  <input type="search" size="35" placeholder="What Food Are you looking for?" id="mealName" class="meal"/>
  <input type="search" placeholder="City Area" id="mealLocation" class="meal">
  <input type="submit" value="Satisfy Me" id="findMeal" />
</form>
于 2012-07-20T05:59:54.967 に答える
2

フォームを処理して処理する php ファイルにフォームを送信する必要があります。

<form action="<?php $newSearch->searchMeal();?>" method="post" id="searchMealForm">

次のようにする必要があります。

<form action="formaction.php" method="post" id="searchMealForm">

formaction.php 内でメソッドを呼び出すことができます。もちろん、必要なファイルを含める必要があります。

<?php
$newSearch->searchMeal();

お役に立てれば。

于 2012-07-20T06:02:27.680 に答える
1

これは、次の方法で試すことができるphpの最も単純なOOPコードです

フォーム.php

<?php
  require_once 'DbClass.php';
?>
<form action="formaction.php" method="post" id="searchMealForm">
  <input type="search" size="35" name='search1' placeholder="What Food Are you looking for?" id="mealName" class="meal"/>
  <input type="search" placeholder="City Area" name='search2' id="mealLocation" class="meal">
  <input type="submit" value="Satisfy Me" id="findMeal" name='butsearch' />
</form>

formaction.php

<?php
 require_once 'DbClass.php';
 $obj = new DbClass();
 if(isset($_REQUEST['butsearch']))
 {
    $ser = $_REQUEST['search1'];
    $ser2 = $_REQUEST['search2'];
    $inf0 = array('ser1'=>$ser,'ser2'=>$ser2)
    $obj->search($info);
 }
?>

DbClass.php

<?php
//if any file needs to be included, include here
 class Dboper
 {
   public function __construct() {
     //DB Connection Code here
   }
   function serach($params)
   {
     $ser1 = $params['ser1'];
     $ser2 = $params['ser2'];
     //write query to search here
    // call the corresponding page to display the result
   }

 }

?>

さらに質問がある場合はお知らせください

于 2012-07-20T05:50:15.567 に答える
0

OOP!..

1.コントローラーである他のメインのエントリが必要です。次の方法:

action.php

<?php
   include 'common.inc.php'; //they are hungryClass,dbConnect etc that you need required;
    $do=$_POST['do'];
   $hungry=new hungryClass();
   if(!empty($do)){
   if(method_exists($hugry,$do)){
        $hugry->$do();
   }else
        echo 'method not exists;'
   }
   }
  ?>

2.form.html

<form action="action.php" method="post" id="searchMealForm">
  <input type="search" size="35" placeholder="What Food Are you looking for?" id="mealName" class="meal"/>
  <input type="search" placeholder="City Area" id="mealLocation" class="meal">
  <input type="submit" value="Satisfy Me" id="findMeal" />
</form>

OOP だけを勉強することはできません。MCV も勉強する必要があります。

于 2012-07-20T06:03:28.303 に答える