Keith Code
Keith Code

Reputation: 57

Why input from the form is not being passed

I am new to php and have created two forms. One form takes in the user's first name and the second takes in the user's last name. I am not sure why that when the user inputs text into the forms nothing is being passed.

The php with the forms

<?php include '../view/header.php'; ?>
<div id="main">
     <h1>Add Athlete</h1>
     <form action="index.php" method="post" id="add_product_form">
         <input type="hidden" name="action" value="add_product" />

         <label>Country:</label>
         <select name="category_id">
         <?php foreach ( $categories as $category ) : ?>
             <option value="<?php echo $category['categoryID']; ?>">
                 <?php echo $category['categoryName']; ?>
             </option>
        <?php endforeach; ?>
    </select>
    <br />

    <label>Code:</label>
    <input type="input" name="code" />
    <br />

    <label>First Name:</label>
    <input type="input" name="first_name" />
    <br />

    <label>Last Name:</label>
    <input type="input" name="last_name" />
    <br />

    <label>&nbsp;</label>
    <input type="submit" value="Add Athlete" />
    <br />  <br />
  </form>
  <p><a href="index.php?action=list_products">View List of Olympic Athletes</a></p>

</div>
<?php include '../view/footer.php'; ?>

The php that takes in input from the forms

<?php
require('../model/database.php');
require('../model/product_db.php');
require('../model/category_db.php');

if (isset($_POST['action'])) {
    $action = $_POST['action'];
} else if (isset($_GET['action'])) {
   $action = $_GET['action'];
} else {
    $action = 'list_products';
}

if ($action == 'list_products') {
    // Get the current category ID
    $category_id = $_GET['category_id'];
    if (!isset($category_id)) {
        $category_id = 1;
}

// Get product and category data
$category_name = get_category_name($category_id);
$categories = get_categories();
$products = get_products_by_category($category_id);

  // Display the product list
  include('product_list.php');
} else if ($action == 'delete_product') {
    // Get the IDs
    $product_id = $_POST['product_id'];
    $category_id = $_POST['category_id'];

    // Delete the product
    delete_product($product_id);

    // Display the Product List page for the current category
    header("Location: .?category_id=$category_id");
} else if ($action == 'show_add_form') {
    $categories = get_categories();
    include('product_add.php');
} else if ($action == 'add_product') {
    $category_id = $_POST['category_id'];
    $first_name = "";
    if(isset($_POST['first_name'])){$first_name = $_POST['FirstName'];}
    $last_name = "";
    if(isset($_POST['last_name'])){$last_name = $_POST['LastName'];}



    // Validate the inputs
    if (empty($first_name) || empty($last_name)) {
        $error = "Invalid product data. Check all fields and try again.";
        include('../errors/error.php');
    } else {
        add_product($category_id, $first_name, $last_name);

        // Display the Product List page for the current category
        header("Location: .?category_id=$category_id");
    }
} else if ($action == 'list_categories') {
    $categories = get_categories();
    include('category_list.php');
} else if ($action == 'add_category') {
    $first_name = $_POST['FirstName'];

    // Validate inputs
    if (empty($name)) {
        $error = "Invalid category name. Check name and try again.";
        include('view/error.php');
    } else {
        add_category($name);
        header('Location: .?action=list_categories');  // display the Category List page
    }
} else if ($action == 'delete_category') {
    $category_id = $_POST['category_id'];
    delete_category($category_id);
    header('Location: .?action=list_categories');      // display the Category List page
}
?>

The add_product function

function add_product($category_id, $first_name, $last_name) {
    global $db;
    $query = "INSERT INTO products
                 (categoryID, FirstName, LastName)
              VALUES
                 ('$category_id', '$first_name', '$last_name')";
    $db->exec($query);
}
?>

Upvotes: 0

Views: 335

Answers (2)

Mahfuzul Alam
Mahfuzul Alam

Reputation: 3157

Try using type = text not input. <input type="text" name="last_name" /> and so on.

And there are problems in this code.

if(isset($_POST['first_name'])){$first_name = $_POST['FirstName'];}
if(isset($_POST['last_name'])){$first_name = $_POST['LastName'];}

Whatever you pass as first_name and last_name your $first_name and $last_name variables will be empty. Because you are using $_POST['FirstName'], $_POST['LastName'] to set their values respectively, this don't really exists and both returning NULL. Rewrite these line as below:

if(isset($_POST['first_name'])){$first_name = $_POST['first_name'];}
if(isset($_POST['last_name'])){$first_name = $_POST['last_name'];}

Upvotes: 0

Rax Weber
Rax Weber

Reputation: 3780

Besides @MahfuzulAlam's answer, another problem is:

if(isset($_POST['first_name'])){$first_name = $_POST['FirstName'];}
                                                      ^^^^^^^^^

if(isset($_POST['last_name'])){$last_name = $_POST['LastName'];}
                                                    ^^^^^^^^

It should be:

if(isset($_POST['first_name'])){$first_name = $_POST['first_name'];}

if(isset($_POST['last_name'])){$last_name = $_POST['last_name'];}

Also, in PHP 7, there's a shorthand for what you are currently doing:

$first_name = $_POST['first_name'] ?? "";

$last_name = $_POST['last_name'] ?? "";

It's called Null Coalesce Operator.

Upvotes: 1

Related Questions