-1

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;" />

            <a href="page2.php"> <input type="button" value="Next" class="btn btn-primary" style="width:150px;"></a>

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

                                <a href="LinkCard.html"><input type="Submit" name="insert" value="Continue" class="btn btn-primary btn-lg"></a>


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

2 Answers2

0

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.

0

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:

<a href="page2.php"> <input type="button" value="Next" class="btn btn-primary" style="width:150px;"></a>

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.

mopsyd
  • 1,877
  • 3
  • 20
  • 30