Reputation: 73
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
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
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
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
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