fishspy
fishspy

Reputation: 123

PHP $_POST doesn't display data - Example code shown

I am new to PHP, I tried to work w3 schools example of posting data on forms..

It never works for me... the webpage doesn't display any data, I tried several forums and also SO that never helped.. I still keep getting it empty!

Example #1: A simple contact from - HTML code

<form action="action.php" method="post">
 <p>Your name: <input type="text" name="name" /></p>
 <p>Your age: <input type="text" name="age" /></p>
 <p><input type="submit" /></p>
</form>

Example #2: Printing data from our form

Hi <?php echo htmlspecialchars($_POST['name']); ?>.
You are <?php echo (int)$_POST['age']; ?> years old.

Expected output of this script may be:

Hi Joe. You are 22 years old.

Actual Output:

Hi . You are years old

The Post parameter is not displaying data.. Any help is really appreciated.

Upvotes: 2

Views: 5446

Answers (5)

mobilis
mobilis

Reputation: 1

Simply ensue that your form is running from your server (http://localhost..) and not the form location itself(file:///C:xampp..). Happy coding

Upvotes: 0

In your form check if it is not sending empty values.

STEP 1 copy and paste the following code in your text editor and run it. It will allow you to test the values from the form without redirecting the page.

The following code should be in index.php

<form action="action.php" method="POST" onsubmit="return validate()">
    <p>Your name: <input type="text" name="name" id="name"/></p>
    <p>Your age: <input type="text" name="age" id="age"/></p>
    <p><input type="submit" /></p>
</form>

<script type="text/javascript">
    function validate(){
        var name=document.getElementById("name").value;
        var age=document.getElementById("age").value;
        alert ("Name="+name+" age="+age);
        return false;
    }
</script>

This code will check if the values are getting entered correctly without redirecting the page to action.php.

Step 2 If you are getting the desired output from the previous code then you can replace the validate function with the code below. (replace everything between the script tags)

    function validate(){
        var name=document.getElementById("name").value;
        var age=document.getElementById("age").value;
        if (name==null || name==""){
            return false;
        }
        if (age==null || age==""){
            return false;
        }
        return true;
    }

If both name and age are filled in the form, the submit will now redirect to action.php

Step 3 In action.php use the following code.

<?
//These code goes in action.php
extract ($_POST);
echo "Hi $name. You are $age years old";
?>

edited with instructions on OP's request

Upvotes: 0

Funk Forty Niner
Funk Forty Niner

Reputation: 74216

What W3Schools (PHP Form Handling) fail to mention is, that the entire (2) bodies of code need to either be inside a single file, or in 2 seperate files in order for it to work as expected.

However, the code from W3Schools and the OP are not indentical and have been modified, using htmlspecialchars and (int)

If you wish to make use of htmlspecialchars, do the following in your welcome.php file:

<?php
$fname = htmlspecialchars($fname);
?>

Welcome <?php echo $_POST["fname"]; ?>!<br>
You are <?php echo (int)$_POST['age']; ?> years old.

Form used:

<html>
<body>

<form action="welcome.php" method="post">
Name: <input type="text" name="fname">
Age: <input type="text" name="age">
<input type="submit">
</form>

</body>
</html> 

I did not see any mention on the W3Schools website about the use of htmlspecialchars or (int)

Hi <?php echo htmlspecialchars($_POST['name']); ?>.
You are <?php echo (int)$_POST['age']; ?> years old.

If you wish to make use of htmlspecialchars then you should the following syntax:
$fname = htmlspecialchars( $fname ); And placed within <?php and ?> tags such as:

<?php
$fname = htmlspecialchars( $fname );
?>

NOTE: I know next to nothing about running a Webserver from my own computer, yet from information I found here on SO mention that in order to access your PHP files, you need to type in http://localhost in your Web browser's address bar and the folder where your file is in.


Please visit this answer

StackOverflow did not let me insert the codes on that page, for one reason or another.

Upvotes: 1

MonkeyZeus
MonkeyZeus

Reputation: 20737

In your <form> tag the "action" is where your POST data is being sent. So does your file structure look like this?

//index.php
<form action="action.php" method="POST"> // <-- make sure to capitalize method="POST" as well
 <p>Your name: <input type="text" name="name" /></p>
 <p>Your age: <input type="text" name="age" /></p>
 <p><input type="submit" /></p>
</form>

.

//action.php
Hi <?php echo htmlspecialchars($_POST['name']); ?>.
You are <?php echo (int)$_POST['age']; ?> years old.

EDIT

Sounds like you might be getting errors in PHP that are turned off. Try this in action.php and re-submit the page.

//action.php
<?php
error_reporting(E_ALL);
?>
Hi <?php echo htmlspecialchars($_POST['name']); ?>.
You are <?php echo (int)$_POST['age']; ?> years old.

EDIT 2

Sounds like you might be getting errors in PHP that are turned off. Try this in action.php and re-submit the page.

//action.php
<?php
error_reporting(E_ALL);
?>
Hi <?php echo $_POST['name']; ?>.
You are <?php echo $_POST['age']; ?> years old.

Upvotes: 1

Rahul
Rahul

Reputation: 1181

  1. 'post' or 'POST' both works fine in form tag.
  2. The following should be in action.php

     Hi <?php echo htmlspecialchars($_POST['name']); ?>.
    
     You are <?php echo (int)$_POST['age']; ?> years old.
    
  3. If still you get this then go to php.ini and set your errors to E_ALL and E_STRICT

and check whats the error.

Most probably it should work now...

Upvotes: 0

Related Questions