zoey
zoey

Reputation: 73

PHP form submission using oop

I need a little help understanding how to use OOP in PHP to perform form submission action. Task at hand... I am trying to learn how to write PHP code using OOP. So far I understand the general idea of classes, functions, calling functions, inheritance etc.

I have created a simple project for practice that allows a user to search for a meal in a certain location. So far, I have a form with 2 <input> fields. Normally for form action, I would do <form action="actionFileName.php"> but now that I have a class with a function to process the form, what do I use for the action value?

I thought of creating an instance of the class and calling the function that processes the form but I get a Object not found! page after I submit the form with the echo values from the else statements in hungryClass.php displaying in the address bar.

how do I fix this? Thanks.

What my code looks like: HTML Form

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

Page to process 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";
       }

}

Database class

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

?>

Upvotes: 7

Views: 26403

Answers (4)

Siren
Siren

Reputation: 446

The OOP!..

1.there must have an entry,the other main's that is a controller.the following way :

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>

you can not study OOP only,the MCV you must study too....

Upvotes: 0

Suresh kumar
Suresh kumar

Reputation: 2092

Here is the simplest OOP code in php you can try by following way

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
   }

 }

?>

Let me know if you have any further queries

Upvotes: 1

code90
code90

Reputation: 718

You should submit the form to a php file which will handle and process the form.

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

should be something like:

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

within the formaction.php you can call your method, of course you need to include the required files:

<?php
$newSearch->searchMeal();

Hope this helps.

Upvotes: 2

hackattack
hackattack

Reputation: 1087

The action attribute of the form is for the script name you want to submit to. You want to submit your form to your hungry class to be processed, but this can not be done until you have instantiated your hungry class. You will need to use a script name as the action value in your form. Lets say you want to submit to temp.php, your form should look like this

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

then when this forms submits it will be sent to temp.php. To get your hungry class to process this form you need to make an instance of it in temp.php and with this instance, call searchMeal. temp.php should look something like this

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

or to put everything in one file

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

Upvotes: 6

Related Questions