使用oop提交PHP表单


PHP form submission using oop

我需要一些帮助来理解如何在PHP中使用OOP来执行表单提交操作。手头的任务。。。我正在尝试学习如何使用OOP编写PHP代码。到目前为止,我已经了解了类、函数、调用函数、继承等的基本概念。

我创建了一个简单的练习项目,允许用户在某个位置搜索一顿饭。到目前为止,我有一个包含2个<input>字段的表单。通常,对于表单操作,我会执行<form action="actionFileName.php">,但现在我有了一个带有处理表单的函数的类,那么操作值该用什么呢?

我想创建一个类的实例并调用处理表单的函数,但我得到了一个找不到的Object!在我提交带有hungryClass.phpelse语句的echo值的表单后的第页中,地址栏中显示。

我该怎么解决这个问题?谢谢

我的代码是什么样子的: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();
    }
}

?>

表单的action属性用于您要提交的脚本名称。您希望将表单提交给饥饿类进行处理,但只有实例化饥饿类后才能完成。你需要在表单中使用脚本名称作为操作值。假设你想提交到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();
?>

或者将所有内容放在一个文件中

<?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>

您应该将表单提交到一个php文件,该文件将处理表单。

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

应该是这样的:

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

在formaction.php中,你可以调用你的方法,当然你需要包括所需的文件:

<?php
$newSearch->searchMeal();

希望这能有所帮助。

以下是php中最简单的OOP代码你可以按照的方式试试

form.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
   }
 }
?>

如果您有任何进一步的查询,请告诉我

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。。。。