Reading Data from two PHP pages into the third Page - php

I'm not able to combine the data from two pages. I'm only able to show data from one page. I tried searching for an explanation of my problem on google but I could not find it.
I get an "Undefined index" error as you can see [![in this screenshot][1]][1].
Could not put just code over here because it keeps telling me that I need to use spacing with ctrl + K and im newbie in all this things so please forgive me..
<!DOCTYPE html>
<html>
<head>
<title>TEST</title>
</head>
<body>
<form action = "page2.php" method = "POST">
<select list="Country" placeholder="Country" name="country" required class="form-control" style="max-width:250px; margin-top:50px;" id="Country">
<option >Bosnia & Herzegovina</option>
<option >Croatia</option>
<option >Serbia</option>
<option >England</option>
<option >Germany</option>
<option >Austria</option>
<option >Belgium</option>
<option >Switzerland</option>
<option >Italy</option>
<option >Romania</option>
<option >France</option>
<option >Montenegro</option>
<option >Slovenia</option>
</select>
<input type="email" name="email" id="email" placeholder="Your email address" required class="form-control" style="max-width:250px;" />
<input type="password" name="password" id="creapass" placeholder="Create your password" required class="form-control" style="max-width:250px;" />
<input type="password" name="password2" id="password" placeholder="Confirm your password" required class="form-control" style="max-width:250px;" />
<input type="button" value="Next" class="btn btn-primary" style="width:150px;">
</form>
</body>
</html>
Second Page
<!DOCTYPE html>
<html>
<head>
<title>test2</title>
</head>
<body>
<form action = "finalpage.php" method = "POST">
<!-- Values from First Step -->
<input type="hidden" name="country" value="<?php $_POST['country'] ?>">
<input type="hidden" name="email" value="<?php $_POST['email'] ?>">
<input type="hidden" name="password" value="<?php $_POST['password'] ?>">
<input type="hidden" name="password" value="<?php $_POST['password2'] ?>">
<!-- End of Values from First Step -->
<?php
echo "Country:" .$_POST["country"]."</br>";
echo "Email:".$_POST["email"]."</br>";
echo "Password:".$_POST["password"]."</br>";
echo "Password2:".$_POST["password2"]."</br>";
?>
<input type="text" name="first" class="form-control" placeholder="First name" required style="max-width:250px;" >
<input type="text" name="last" class="form-control" placeholder="Last name" required style="max-width:250px;" />
<input type="date" name="date" class="dateb" id="dateOfBirth" required />
<select list="Country" placeholder="Country" name="country2" required class="form-control" style="max-width:250px; " id="Country">
<option >Bosnian</option>
<option >Croat</option>
<option >Serb</option>
<option >English</option>
<option >German</option>
<option >Austrian</option>
<option >Belgian</option>
<option >Swiss</option>
<option >Italian</option>
<option >Romanian</option>
<option >French</option>
<option >Montenegrin</option>
<option >Slovenian</option>
</select>
<input type="text" class="form-control" name="street1" placeholder="Street address 1" required style="max-width:250px;" />
<input type="text" class="form-control" name="street2" placeholder="Street address 2 (Optional)" style="max-width:250px;" />
<input type="text" class="form-control" name="city" placeholder="City" required style="max-width:250px;" />
<input type="text" class="form-control" name="region" placeholder="Province/Region" required style="max-width:250px;" />
<input type="text" class="form-control" name="postal" placeholder="Postal code" required style="max-width:250px;" />
<input type="tel" class="form-control" name="phone" placeholder="Phone number" required style="max-width:250px;" />
<input type="checkbox" name="terms" > I have read and agree to the Terms and WBC's User Agreement.
<input type="Submit" name="insert" value="Continue" class="btn btn-primary btn-lg">
</form>
</body>
</html>
Final Step.
<html>
<head>
<title>get data from another page</title>
</head>
<body>
<?php
echo "Country:" .$_POST["country"]."</br>";
echo "Email:".$_POST["email"]."</br>";
echo "Password:".$_POST["password"]."</br>";
echo "Password2:".$_POST["password2"]."</br>";
echo "First name:" .$_POST["first"]."</br>";
echo "Last name:".$_POST["last"]."</br>";
echo "Date:".$_POST["date"]."</br>";
echo "Country2:".$_POST["country2"]."</br>";
echo "Street1:" .$_POST["street1"]."</br>";
echo "Street2:".$_POST["street2"]."</br>";
echo "City:".$_POST["city"]."</br>";
echo "Region:".$_POST["region"]."</br>";
echo "Postal code:" .$_POST["postal"]."</br>";
echo "Phone number:".$_POST["phone"]."</br>";
?>
</body>
</html>

I am not copying the entire code of yours as it is not required. Below is the logic you have to follow.
In the first step, i.e. your first form (I prefer using PHP format as it allows you to use PHP functions, if required), put your second PHP in the form's action.
<form action = "step_2.php" method = "POST">
Now in your step_2.php, you have to add the below in your form.
<!-- Values from First Step -->
<input type="country" name="country" value="<?php echo $_POST['country'] ?>">
<input type="hidden" name="email" value="<?php echo $_POST['email'] ?>">
<input type="hidden" name="password" value="<?php echo $_POST['password'] ?>">
<!-- End of Values from First Step -->
Above code will add the values posted from the first step into your second step form. Now you can simply fetch these values in the final step. To do this, add your final step PHP in your Action of this form.
<form action = "final_step.php" method = "POST">
In your final_step.php, you can normally get the values by $_POST.

You've got a number of problems. First, your option fields don't have values.
What you have: <option>Bosnia</option>
What you need: <option value="bosnia" >Bosnia</option>
You should also have a default as your first option, otherwise your program is going to assume that everyone who doesn't pick something has the first option, and you are going to get a million submissions that are not accurate. Eg:
<option value="false" selected="selected">Please select an option from below</option>
Then your backend should be checking like this:
<?php
if (!isset($_POST['country'] || $_POST['country'] === 'false')
{
//They did not pick a country, and you need to bounce them back to the form with an error message.
header('Location: /path/to/your/form');
exit;
}
//country is defined, you can continue,
//but you should pre-validate the other required field here also.
//do not assume things are right, assumptions = bugs.
...
The anchor tag you have surrounding your submit button may be redirecting instead of submitting the form, in which case your $_POST will be completely empty. The below tag you have:
<input type="button" value="Next" class="btn btn-primary" style="width:150px;">
Needs to look more like this:
<input type="submit" value="Next" class="btn btn-primary" style="width:150px;">
Or alternately:
<button type="submit" class="btn btn-primary" style="width:150px;">Next</button>
If you are stumped, put this at the beginning of what you have on your processing code:
echo '<pre>' . print_r($_POST, 1); exit;
This will show you what was submitted, and let you work through from there as needed.
In general, your conditionals should check if a key exists before validating it if there is any ambiguity as to whether or not it is set:
//BAD
if ($_POST['country'] == 'someval') { ... }
//GOOD
if (array_key_exists('country', $_POST) && $_POST['country'] == 'someval') { ... }
You can also check with isset($_POST['country']); HOWEVER, if null values are valid for whatever you are checking, then this will return false, even if the key is there. So in any case where null is valid, you need to use array_key_exists() instead.
Instead of passing variables directly from one page to another, it's a lot easier if you use $_SESSION, so if they derp up and hit back or walk away for a while, the values are not entirely lost. Users hate having to redundantly redo things, and will probably entirely lose interest in your site if they have to do that. Instead, you can set the values if they exist into session memory like this:
<?php
session_start(); //you have to do this before printing ANY other content.
$_SESSION['country'] = (isset($_POST['country']) ? $_POST['country'] : null);
And then you can retrieve this at any time from any page by doing:
<?php
session_start();
echo $_SESSION['country'];
and if you want to clear them, you just do:
<?php
session_start(); //can't destroy a non-existent session, you have to do this first
session_destroy(); //clears the session
session_start(); //starts a new one
Stashing ongoing form values in the session temporarily lets you access them for as long as the session cookie lasts, so they are not lost if the user quits your form, goes to another site, then comes back to finish. Your form will have to put these back in manually though, so an input might look something like this
<input type="password" name="password" value="<?= isset($_SESSION) && isset($_SESSION['password'] ? $_SESSION['password'] : null; ?>" />
I tried to explain the relevant logic you are not applying rather than just the specific use case, because without actually grasping what the underlying lack of logic is, you would otherwise probably just hit the same wall again. Hopefully this saves you from a number of other bugs that you would otherwise likely hit immediately after this specific thing gets fixed for you.

Related

Cannot echo variables after form submittiom

So I am submitting a form to the same page. I have used the following code to check whether the form was submitted, and to avoid 'undefined variables' errors during the first page reload.
if (isset($_POST['submit'])){
// Get search variables
$pName = $_POST['pname'];
$pLocation = $_POST['plocation'];
$pPrice = $_POST['pprice'];
if (isset($_POST['ptype'])){
$pType = $_POST['ptype'];
}
echo "pType";
}
However, I cannot echo the php variables onto the page. I am guessing this is because the form is refreshed when it is sent by post, so the variables are lost.
How can I fix this problem?
This is the html form
<form method="post" action="../html/searchpage.php">
<div id="searchborder">
<input type="text" id="pname" name="pname" placeholder=" Property name">
<input type="text" id="plocation" name="plocation" placeholder=" Property location">
<input type="number" id="pprice" name="pprice" placeholder=" Property price">
<div id="ptypeholder">
<div id="ptypebox">
<select name="ptype">
<option value="" disabled selected>Post type</option>
<option value="buy">Buy</option>
<option value="rent">Rent</option>
</select>
</div>
</div>
<button type="submit"><img src="../images/search.png"></button>
</div>
</form>
I am trying to display 'property posts' into html cards from a database using php in this page. The form is the search bar for the property posts.
Thanks!
I don't think $_POST['submit'] is being set because the button needs a name ie
<input type="submit" name="submit" value="submit">
also you have a few other syntax errors, structure, may be this will help :-
<form method="post" action="searchpage.php">
<input type="text" id="pname" name="pname" placeholder="Property name">
<input type="text" id="plocation" name="plocation" placeholder="Property location">
<input type="number" id="pprice" name="pprice" placeholder="Property price">
<select name="ptype">
<option value="" disabled selected>Post type</option>
<option value="buy">Buy</option>
<option value="rent">Rent</option>
</select>
<input type="submit" name="submit" value="submit">
and you don't HAVE to assign the post values to $vars you can use them directly -
<?php
if (isset($_POST['submit'])){
// Get variables
//$pName = $_POST['pname'];
//$pLocation = $_POST['plocation'];
//$pPrice = $_POST['pprice'];
echo $_POST['ptype'].'<br>';
echo $_POST['pname'].'<br>';
echo $_POST['plocation'].'<br>';
echo $_POST['pprice'].'<br>';
}
?>
Needs more work to make it check all posts are set or validation but works as a basic starting point
Also in original you posted echo "pType"; will only echo the text pType not the value

can i put two pages into action=" " in php [duplicate]

I'm setting up a form wherein I need two "actions" (two buttons):
1 - "Submit this form for approval"
2 - "Save this application for later"
How do I create an HTML form that supports multiple "actions"?
EG:
<form class="form-horizontal" action="submit_for_approval.php">
<form class="form-horizontal" action="save_for_later.php">
I need to combine these two options-for-submitting into one form.
I did some basic research but couldn't find a definitive answer as to whether or not this is possible, and/or any good resources to links for a workaround.
As #AliK mentioned, this can be done easily by looking at the value of the submit buttons.
When you submit a form, unset variables will evaluate false. If you set both submit buttons to be part of the same form, you can just check and see which button has been set.
HTML:
<form action="handle_user.php" method="POST" />
<input type="submit" value="Save" name="save" />
<input type="submit" value="Submit for Approval" name="approve" />
</form>
PHP
if($_POST["save"]) {
//User hit the save button, handle accordingly
}
//You can do an else, but I prefer a separate statement
if($_POST["approve"]) {
//User hit the Submit for Approval button, handle accordingly
}
EDIT
If you'd rather not change your PHP setup, try this: http://pastebin.com/j0GUF7MV
This is the JavaScript method #AliK was reffering to.
Related:
2x submit buttons to action different URL
Submit form to another page (which is different from the page used in ACTION)
the best way (for me) to make it it's the next infrastructure:
<form method="POST">
<input type="submit" formaction="default_url_when_press_enter" style="visibility: hidden; display: none;">
<!-- all your inputs -->
<input><input><input>
<!-- all your inputs -->
<button formaction="action1">Action1</button>
<button formaction="action2">Action2</button>
<input type="submit" value="Default Action">
</form>
with this structure you will send with enter a direction and the infinite possibilities for the rest of buttons.
This should work without changing the backend code:
<form class="form-horizontal" action="submit_for_approval.php">
<button>Submit for Approval</button>
<button formaction="save_for_later.php">Save for Later</button>
</form>
The accepted answer didn't work for me because I'm using Golang and apparently the default Go form parsing returns missing variables the same as empty ones (as empty strings). So you need to split it into separate endpoints.
this really worked form for I am making a table using thymeleaf and inside the table there is two buttons in one form...thanks man even this thread is old it still helps me alot!
<th:block th:each="infos : ${infos}">
<tr>
<form method="POST">
<td><input class="admin" type="text" name="firstName" id="firstName" th:value="${infos.firstName}"/></td>
<td><input class="admin" type="text" name="lastName" id="lastName" th:value="${infos.lastName}"/></td>
<td><input class="admin" type="email" name="email" id="email" th:value="${infos.email}"/></td>
<td><input class="admin" type="text" name="passWord" id="passWord" th:value="${infos.passWord}"/></td>
<td><input class="admin" type="date" name="birthDate" id="birthDate" th:value="${infos.birthDate}"/></td>
<td>
<select class="admin" name="gender" id="gender">
<option><label th:text="${infos.gender}"></label></option>
<option value="Male">Male</option>
<option value="Female">Female</option>
</select>
</td>
<td><select class="admin" name="status" id="status">
<option><label th:text="${infos.status}"></label></option>
<option value="Yes">Yes</option>
<option value="No">No</option>
</select>
</td>
<td><select class="admin" name="ustatus" id="ustatus">
<option><label th:text="${infos.ustatus}"></label></option>
<option value="Yes">Yes</option>
<option value="No">No</option>
</select>
</td>
<td><select class="admin" name="type" id="type">
<option><label th:text="${infos.type}"></label></option>
<option value="Yes">Yes</option>
<option value="No">No</option>
</select></td>
<td><input class="register" id="mobileNumber" type="text" th:value="${infos.mobileNumber}" name="mobileNumber" onkeypress="return isNumberKey(event)" maxlength="11"/></td>
<td><input class="table" type="submit" id="submit" name="submit" value="Upd" Style="color: white; background-color:navy; border-color: black;" th:formaction="#{/updates}"/></td>
<td><input class="table" type="submit" id="submit" name="submit" value="Del" Style="color: white; background-color:navy; border-color: black;" th:formaction="#{/delete}"/></td>
</form>
</tr>
</th:block>
In front-end:
<form action="act1.php" method="post">
<!-- Your HTML Code -->
<button type="submit" name="act" value="action1">Submit</button>
<button type="submit" name="act" value="action2">Save for Later</button>
</form>
In Backend: (act1.php)
<?php
if($_SERVER["REQUEST_METHOD"] == "POST") {
$check = $_POST['act'];
if($check == "action1") {
/* Write the code of "submit_for_approval.php" Here or add the following line */
header("Location: submit_for_approval.php");
}
if($check == "action2") {
/* Write the code of "save_for_later.php" Here or add the following line */
header("Location: save_for_later.php");
}
}
?>

PHP POST and REQUEST are empty?

I'm running a Raspberry Pi (Model B I think) with Raspbian. I followed the instructions to install a web server (with a few tweaks as parts appeared outdated and I also installed telnet in order to send emails from PHP).
I have a form on the webpage and when I set it to use the GET method var_dump($_GET) returns an array of the inputs as expected however when I set it to use POST method $_POST and $_REQUEST are empty (var_dump returns array(0) {}).
HTML
<form method="POST" enctype="text/plain" id="contactForm">
<fieldset>
<legend>Contact us:</legend>
Name:<br>
<input type="text" name="firstname" value="first name"><br>
<input type="text" name="lastname" value="last name"><br>
E-mail:<br>
<input type="text" name="mail" value="e-mail address"><br>
Phone number:<br>
<input type="text" name="phone" value="phone number"><br>
Reason for contacting:
<select form="contactForm" name="reason">
<option value="purchase">Purchase</option>
<option value="complaint">Complaint</option>
<option value="business">Business</option>
<option value="other">Other</option>
</select>
Comment:<br>
<textarea rows="12" cols="70" name="comment" form="contactF$
<input type="submit" value="Send">
</fieldset>
</form>
PHP (It's as a <?PHP ?> at the end of the HTML file, I have check it runs using debug):
var_dump($_POST);
var_dump($_REQUEST);
my /usr/share/doc/debian-reference-common/html/.htaccess and
my /etc/php5/fpm/php.ini files can be found here
You might need to include <form action='page'></form> for the submit to work. Unless you are AJAXing the input values.
You could try adding a name attribute to your submit button HTML:
<input type="submit" name="submit" value="Send">
and then do a check on that value in your PHP:
if (isset($_POST['submit'])) {
// do stuff here
echo $_POST['firstname'] . "<br>";
echo $_POST['lastname'] . "<br>";
echo $_POST['mail'] . "<br>";
echo $_POST['phone'] . "<br>";
echo $_POST['reason'] . "<br>";
echo $_POST['comment'];
}
?>
You should also add a form action pointing to the page in which the above php is located, in this case, it is the same page:
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST" id="contactForm">

fieldset and form HTML

I got weird problem over here. I was using in html to send it to my script .php. Everything was fine, script was running like it should. It was looking a little ugly without margins so I tried to edit it a bit. I found a way with some CSS changes and I used . Now it's broken. I don't really know why.
Here's the HTML code:
Before form:
[insert_php]
$current_user = wp_get_current_user();
[/insert_php]
After form
<form action="http://sute.com/rp.php" method="post">
<fieldset><label for="email">Email:</label><input name="email" size="20" type="text" />
<label for="user_name">Nick:</label><input name="user_name" size="20" type="text" />
<label for="server">Server:</label><select name="server">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option></select></fieldset>
<input type="hidden" name="reward" value="123">
<input type="hidden" name="user_id" value="[insert_php]echo "$current_user->ID";[/insert_php]">
<center><input type="submit" value="Submit" /></center></form>
It was working without label for so I don't know why it's not working now, any idea? I'll also give you PHP code here.
$user_id = mysql_real_escape_string($_POST['user_id']);
$user_name = mysql_real_escape_string($_POST['user_name']);
$server = mysql_real_escape_string($_POST['server']);
$email = mysql_real_escape_string($_POST['email']);
$nagroda = mysql_real_escape_string($_POST['reward']);
$price = mysql_real_escape_string($_POST['price']);
echo "<body style='background: url(http://bg.com/bg.jpg) no-repeat fixed center center;'>";
echo "<background-repeat: no-repeat;>";
$pkt = mysql_query("SELECT meta_value FROM wp_usermeta WHERE user_id = $user_id AND meta_key='mycred_default'");
if ( $pkt > 0 OR $user_id == 0) {
$message = 'Sorry, you need more LPoints.';
echo "<SCRIPT type='text/javascript'> //not showing me this
alert('$message');
window.location.replace((\"http://sute.com\"));
</SCRIPT>";
mysql_close();
}
rest of the code, doesn't really matter because it ends here with my problem.
so as I said - it was working before I used fieldsets.
Is this the page your php script is at?
http://sute.com/rp.php
<form action="http://sute.com/rp.php" method="post">
<fieldset>
<label for="email">Email:</label><input name="email" size="20" type="text" />
<label for="user_name">Nick:</label><input name="user_name" size="20" type="text" />
<label for="server">Server:</label>
<select name="server">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
</fieldset>
<input type="hidden" name="reward" value="123">
<input type="hidden" name="user_id" value="[insert_php]echo "$current_user->ID";[/insert_php]">
<center><input type="submit" value="Submit" /></center>
</form>

Data clears if error message appears

In my register form, if a validation message needs to appear when the user clicks submit, the whole text out of all the boxes disappears, meaning they have to start again!
What PHP code do I need to add so the data remains?
Username<span class="required">*</span>
<input name="user_name" type="text" id="user_name" minlength="5" >
Full Name<span class="required">*</span>
<input name="full_name" type="text" id="full_name" size="30"
Nationality <span class="required">*</span>
<select name="nationality" id="select8">
<option value="" selected></option>
<option value="Afghanistan">Afghanistan</option>
<option value="Albania">Albania</option>
</select>
<p align="center">
<input name="doRegister" type="submit" id="doRegister" value="Register">
</p>
EDIT:
I have tried this:
<?php
$email_field = ($_POST['usr_email']);
?>
Email<span class="required">*</span>
<input type="text" id="usr_email3" name="usr_email" value="<?php echo
$email_field; ?>" />
but it says usr_email is not defined
As described in the HTTP specs, HTTP is stateless. That means that eventhough the user got to the page through a previous page the server has no idea of this. Each request is completely new, so it cant just send the previous output back.
You'll have to read the values send to your form out of $_POST, and resend that. For example:
<?php
//If the POST parameter has been send, set it to the $username variable. Otherwise make it empty.
$username = array_key_exists('username', $_POST) ? $_POST['username'] : '';
?>
<form name='f1' method='POST'>
<!-- Show username as its value, thus preserving state. -->
Name: <input type='text' value='<?php echo $username ?>' name='username' />
<input type='submit' value='Go' />
</form>
For select inputs (usually dropdown) you need to set the selected attribute on the correct option. As such:
<?php
$gender = array_key_exists('gender', $_POST) ? $_POST['gender'] : 'unknown'; //Default to unknown
?>
<form name='f1' method='POST'>
<select name='gender'>
<!-- The $gender will be the value of each option. -->
<option <? if($gender == 'unknown') { ?> selected <? } ?> value='unknown'>Unknown</option>
<option <? if($gender == 'male') { ?> selected <? } ?> value='male'>Male</option>
<option <? if($gender == 'female') { ?> selected <? } ?> value='female'>Female</option>
</select>
<input type='submit' value='Go' />
</form>
However i still recommend you buy a proper book, or read more tutorials. After you feel more comfortable as a developer you can explore and find these solutions youself, as we all here did once.
<input name="user_name" type="text" id="user_name" minlength="5" value="<?php if(isset($_POST['user_name'])) { echo $_POST['user_name']; } ?>" >

Categories