How to save a form on button submit in php - php

I am new to php. I am trying to save a form on button submit. But it saves the form when page render. I tried this .
Php Code
<?php
if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
$this->model_catalog_contactus->saveContact($this->request->post);
}
?>
Html Code
<form action="/common/contactus" method="post" class="smart-green">
<h2>Contact Us</h2>
<p><label><span>Name :
</span><input id="name" type="text" name="contactname" placeholder="Your Name">
</label><label><span>Email :</span>
<input id="email" type="text" name="email" placeholder="Your Email">
</label>
<label><span>Mobile :</span>
<input id="email" type="text" name="mobile" placeholder="Your Mobile Number">
</label>
<label><span>Message :</span>
<textarea rows="" cols="" placeholder="Your message here" name="message"></textarea>
</label>
<label><span> </span>
<input type="submit" class="btn btn-primary" value="save" style="margin-top:15px;" name="submit-btn"/>
</label></p>
</form>

Just make sure that form is submitted, like this:
if (!empty($_POST)) {
if ($this->validate()) {
$this->model_catalog_contactus->saveContact($this->request->post);
}
}

Related

Run PHP file (PHPMailer to send email through Gmail) in the background and alert on the same page when the email is sent

I am using PHPMailer to send email from my Gmail account to an email from a submitted form on my index.html page. This works perfectly fine. But since I am using the send.php file in the action attribute, the send.php page appears after form submission. I want to stay on the index.html page and let send.php work in the background and alert on the index.html page, when the email is sent.
Note: There isn't any SQL or any database job here. I am using PHPMailer in send.php to send an email from my Gmail account to the user submitted Gmail id in the form.
<form action="send.php" class="form" id="frm-js" method="POST">
<div class="form__group">
<input type="text" class="form__input" id="name" name="name" placeholder="Full Name" required>
<label for="name" class="form__label">Full Name</label>
</div>
<div class="form__group">
<input type="text" class="form__input" id="email" name="email" placeholder="Email Address" required>
<label for="email" class="form__label">Email Address</label>
</div>
<div class="form__group">
<input type="text" class="form__input" id="phone" name="phone" placeholder="Phone Number">
<label for="phone" class="form__label">Phone Number</label>
</div>
<div class="form__group">
<textarea id="message" rows="4" cols="50" name="message" class="textarea-frm form__input" maxlength="1000" placeholder="Your message"></textarea>
</div>
<div class="form__group">
<button class="btn" type="submit" name="submit">Book</button>
</div>
</form>
You can use jQuery. Try this: remove action from the form tag. I add a p to show the message from send.php:
<form class="form" id="frm-js" method="POST">
<p id="resp_msg"></p>
<div class="form__group">
<input type="text" class="form__input" id="name" name="name" placeholder="Full Name" required>
<label for="name" class="form__label">Full Name</label>
</div>
<div class="form__group">
<input type="text" class="form__input" id="email" name="email" placeholder="Email Address" required>
<label for="email" class="form__label">Email Address</label>
</div>
<div class="form__group">
<input type="text" class="form__input" id="phone" name="phone" placeholder="Phone Number">
<label for="phone" class="form__label">Phone Number</label>
</div>
<div class="form__group">
<textarea id="message" rows="4" cols="50" name="message" class="textarea-frm form__input" maxlength="1000" placeholder="Your message"></textarea>
</div>
<div class="form__group">
<button class="btn" type="submit" name="submit">Book</button>
</div>
</form>
And add a jQuery function (integrate jQuery if you haven't already library):
$("#frm-js").on("submit", function(event){
event.preventDefault();
var data = $( this ).serialize();
$.post("send.php",{data:data }, function (data) {
// Do other stuff like
// reset form items
// Show message response
$("#resp_msg").text(data).show();
});
});
This is send.php and is how it should be:
if(isset($_POST['data'])) {
$params = array();
parse_str($_POST['data'], $params);
// Send mail
echo "Hi, " . $params['name'] . " your email has been sent";
}

Run php file when submit button in another html file

I would like to work on registration process for which with the help of Google and Youtube i have created "Sign-in & Sing-up" page togather with toggle option however unable to run registration.php file once user provide registration info at login.html file. Codes are as follows :
<form id="login" class="input-group">
<input type="text" class="input-field" placeholder="User Id" required>
<input type="password" class="input-field" placeholder="Enter Password" required>
<input type="checkbox" class="check-box"><span>Remember Password</span>
<button type="submit" class="submit-btn">Sign-In</button>
</form>
<form Id="register" class="input-group">
<input type="text" class="input-field" placeholder="User Id" required>
<input type="email" class="input-field" placeholder="Email Id" required>
<input type="password" class="input-field" placeholder="Enter Password" required>
<input type="password" class="input-field" placeholder="Confirm Password" required>
<input type="phone-number" class="input-field" placeholder="Mobile Number" required>
<input type="checkbox" class="check-box"><span>I agree to the terms & conditions</span>
<button type="submit" class="submit-btn">Sign-Up</button>
</form>
How to execute registration.php file when Sign-up button clicked at login.html file? Same goes for login option too.
Make sure to add method="POST" and action="path/function.php" and name="desiredName"in your forms like this:
<form id="login" class="input-group" method="POST" action="file_path/login.php">
<input type="text" class="input-field" placeholder="User Id" name ="user" required>
<input type="password" class="input-field" placeholder="Enter Password" name="password" required>
<input type="checkbox" class="check-box"><span>Remember Password</span>
<button type="submit" class="submit-btn">Sign-In</button>
</form>
And then in PHP to "catch" the data from the post, you'll use something like this:
$this->getpost['user'];
Or
$_POST['user'];
The method attribute specifies how to send form-data (the form-data is sent to the page specified in the action attribute).
The form-data can be sent as URL variables (with method="get") or as HTTP post transaction (with method="post").
check here for more details w3schools
<form id="login" class="input-group" method="POST" action="file_path/login.php">
<input type="text" class="input-field" placeholder="User Id" required>
<input type="password" class="input-field" placeholder="Enter Password" required>
<input type="checkbox" class="check-box"><span>Remember Password</span>
<input type="submit" class="submit-btn" value="Sign-In">
</form>
<form Id="register" class="input-group" method="POST" action="file_path/register.php">
<input type="text" class="input-field" placeholder="User Id" required>
<input type="email" class="input-field" placeholder="Email Id" required>
<input type="password" class="input-field" placeholder="Enter Password" required>
<input type="password" class="input-field" placeholder="Confirm Password" required>
<input type="phone-number" class="input-field" placeholder="Mobile Number" required>
<input type="checkbox" class="check-box"><span>I agree to the terms & conditions</span>
<input type="submit" class="submit-btn" value="Sign-Up">
</form>
EDIT according to your comment
replace button with input type="submit"
and place # before the php variable so you wont get undefined error notice(# is used to avoid error notice)
<div class="header">
<h2>Register here</h2>
</div>
<form method="post" action="register.php">
<?php include('errors.php'); ?>
<div class="input-group">
<label>Username</label>
<input type="text" name="username" value="<?php echo #$username; ?>">
</div>
<div class="input-group">
<label>Email</label>
<input type="email" name="email" value="<?php echo #$email; ?>">
</div>
<div class="input-group">
<label>Password</label>
<input type="password" name="password_1">
</div>
<div class="input-group">
<label>Confirm Password</label>
<input type="password" name="password_2">
</div>
<div class="input-group">
<label>Mobile number</label>
<input type="number" name="mobile" value="<?php echo #$mobile; ?>">
</div>
<div class="input-group">
<input type="submit" class="btn" name="reg_user" value="Sign-Up">
</div>
</form>
create register.php file
and in register.php
<?php
$con = mysqli_connect("localhost", "username", "password", "dbname") or trigger_error("Unable to connect to the database");
if(isset($_POST['reg_user'])){
$name = $_POST['username']; //here "username" is what you defined in the "name" field of input form
//define other variables
//write your own sql query , here is an example
$query = "INSERT INTO table(name) VALUES(?)";
$stmt = mysqli_stmt_init($con);
if(!mysqli_stmt_prepare($stmt,$query)){
echo "Error";
}else{
mysqli_stmt_bind_param($stmt,"s",$name);
mysqli_stmt_execute($stmt);
}
}
?>

Dynamically change html Login form to Registration form

I have a login form that takes input for user credentials. At the bottom I have a link to a Register user form. It takes me to a whole new page to register a user. However is there a way with JQuery AJAX to change the login form inputs to take registration inputs instead and send to the respective correct processing php files?
My form for login:
<div id="backgroundLogin">
<form name="login" method="post" action="./Login.php">
<fieldset>
<p id="title">
Connect-a-Cutie Login
</p>
<p id="email">
<label> Email:</label>
<input type="text" name="email" placeholder="Type your email...">
</p>
<p id="password">
<label>Password:</label>
<input type="text" name="password" placeholder="Type your password...">
</p>
<button href="./LoginPage.php" type="submit">Submit!</button>
<p>
<p>Not yet a member? Register now!</p>
</fieldset>
</form>
</div>
And my registration form:
<form action="RegistrationPage.php" method="POST">
Name: <input type="text" name="name" placeholder="Enter your name..."/><br/>
Email: <input type="text" name="email" placeholder="Enter your email..."/><br/>
Password: <input type="text" name="password" placeholder="Enter your password..."/> (make sure no one is looking...)<br/>
Addess: <input type="text" name="address" placeholder="Enter your address..."/><br/>
Do you want to be an admin? <input type="text" name="isAdmin" placeholder="TRUE or FALSE"/><br/><br/>
<button type="submit">Submit</button>
</form>
You can use the method of hiding one of the forms.
$("#switchForm").click(function(){
const isLoginVisible = $("#login_form").is(':not(:hidden)');
if(isLoginVisible) {
$("#login_form").hide();
$("#register_form").show();
$("#switchForm > p").html("Already member? Login now!");
} else {
$("#login_form").show();
$("#register_form").hide();
$("#switchForm > p").html("Not yet a member? Register now!");
}
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="backgroundLogin">
<fieldset>
<form id="login_form" name="login" method="post" action="./Login.php">
<p id="title">
Connect-a-Cutie Login
</p>
<p id="email">
<label> Email:</label>
<input type="text" name="email" placeholder="Type your email...">
</p>
<p id="password">
<label>Password:</label>
<input type="text" name="password" placeholder="Type your password...">
</p>
<button href="./LoginPage.php" type="submit">Submit!</button>
<p>
</form>
<form id="register_form" action="RegistrationPage.php" method="POST" style="display: none;">
Name: <input type="text" name="name" placeholder="Enter your name..."/><br/>
Email: <input type="text" name="email" placeholder="Enter your email..."/><br/>
Password: <input type="text" name="password" placeholder="Enter your password..."/> (make sure no one is looking...)<br/>
Addess: <input type="text" name="address" placeholder="Enter your address..."/><br/>
Do you want to be an admin? <input type="text" name="isAdmin" placeholder="TRUE or FALSE"/><br/><br/>
<button type="submit">Submit</button>
</form>
<a id="switchForm" href="#">
<p>Not yet a member? Register now!</p></a>
</fieldset>
</div>
I think that it will meet your expectations.
Try this! :)
$('.login-form a.show-register-form').click(function(){
$('.login-form').hide();
$('.register-form').show();
});
$('.register-form a.show-login-form').click(function(){
$('.register-form').hide();
$('.login-form').show();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="backgroundLogin">
<form name="login" method="post" action="./Login.php" class="login-form">
<fieldset>
<p id="title">
Connect-a-Cutie Login
</p>
<p id="email">
<label> Email:</label>
<input type="text" name="email" placeholder="Type your email...">
</p>
<p id="password">
<label>Password:</label>
<input type="text" name="password" placeholder="Type your password...">
</p>
<button href="./LoginPage.php" type="submit">Submit!</button>
<p>
<p>Not yet a member? Register now!</p>
</fieldset>
</form>
<form action="RegistrationPage.php" method="POST" class="register-form" style="display:none;">
Name: <input type="text" name="name" placeholder="Enter your name..."/><br/>
Email: <input type="text" name="email" placeholder="Enter your email..."/><br/>
Password: <input type="text" name="password" placeholder="Enter your password..."/> (make sure no one is looking...)<br/>
Addess: <input type="text" name="address" placeholder="Enter your address..."/><br/>
Do you want to be an admin? <input type="text" name="isAdmin" placeholder="TRUE or FALSE"/><br/>
<button type="submit">Submit</button>
<p>have user?, login here!</p>
</form>
</div>

unable to insert data into wordpress db using form

When i click on submit it doesn't create new posts in the posttype. It just refreshes the page.The below is a pagetemplate assigned to page.
<?php
if(isset($_POST['submit'])){
global $wpdb;
$wpdb->insert( 'contacts', array('post_title'=>$_POST['name'],'email'=>$_POST['email']));
}
?>
<form method="post" action="">
<input type="name" id="inputName" placeholder="Name">
<input type="email" id="inputEmail" placeholder="Email">
<button type="submit">SUBMIT</button>
</form>
You need to add name attribute in your form element
<input type="name" id="inputName" name="name" placeholder="Name">
<input type="email" id="inputEmail" name="email" placeholder="Email">
<button type="submit" name ="submit">SUBMIT</button>
You just need to change the HTML
<form method="post" action="">
<input type="text" id="inputName" placeholder="Name" name="name">
<input type="text" id="inputEmail" placeholder="Email" name="email">
<button type="submit" name="submit">SUBMIT</button>
</form>
<form method="post" action="">
<input type="text" id="inputName" placeholder="Name" name="username">
<input type="text" id="inputEmail" placeholder="Email" name="useremail">
<input type="submit" name="submit" value="submit">
</form>
<?php if(isset($_POST['submit'])){
global $wpdb;
$wpdb->insert( 'contacts', array('post_title'=>$_POST['username'],'email'=>$_POST['useremail']));} ?>
Now Check. I think it's working properly.

Add another code to webpage when the link is index.php?action=feed&type=member

Simply I want another code to be added to the webpage when the url is
index.php?action=feed&type=member
for example the code that is on the page when the url is index.php?action=feed is
<form method="post" name="contactform" class="form" id="form1" action="l.php">
<p class="name">
<input name="first_name" type="text" placeholder="Name" id="name" />
</p>
<p class="email">
<input name="email" type="text" id="email" placeholder="Email" />
</p>
<p class="text">
<textarea name="comments" placeholder="Message"></textarea>
</p>
<div class="submit">
<input type="submit" value="SEND" id="button-blue"/>
<div class="ease"></div>
</div>
</form>
and the code I want to be added when the url is index.php?action=feed&type=member is
<form method="post" name="contactform" class="form" id="form1" action="l.php">
<p class="name">
<input name="first_name" type="text" placeholder="Name" id="name" />
</p>
<p class="email">
<input name="email" type="text" id="email" placeholder="Email" />
</p>
<p class="text">
<textarea name="comments" placeholder="Message"></textarea>
</p>
<p class="username">
<input name="user" type="text" id="user" placeholder="Username" />
</p>
<div class="submit">
<input type="submit" value="SEND" id="button-blue"/>
<div class="ease"></div>
</div>
</form>
I know that it may be easy , but I am a beginner . so how can this be done in PHP ?
Sorry for my English .
Thanks in advance
If you want such output, you could put an if statement along the html form. Consider this example:
url: index.php?action=feed&type=member
<form method="post" name="contactform" class="form" id="form1" action="l.php">
<p class="name">
<input name="first_name" type="text" placeholder="Name" id="name"/>
</p>
<p class="email">
<input name="email" type="text" id="email" placeholder="Email"/>
</p>
<p class="text">
<textarea name="comments" placeholder="Message"></textarea>
</p>
<?php if(isset($_GET['type']) && $_GET['type'] == 'member'): ?>
<p class="username">
<input name="user" type="text" id="user" placeholder="Username"/>
</p>
<?php endif; ?>
<div class="submit">
<input type="submit" value="SEND" id="button-blue"/>
<div class="ease">
</div>
</div>
</form>
That particular markup should appear is those conditions are met.
if ($_GET["type"] == 'member') {
echo '<p class="username">
<input name="user" type="text" id="user" placeholder="Username" />
</p>';
}

Categories