Home > Mobile >  HTML form not submitting to PHP
HTML form not submitting to PHP

Time:05-05

I have an html form set to submit to itself with $SERVER['PHP_SELF'] but the form does not seem to be able submit, instead it simply returns the same form when I click submit (with and input of type submit.

NOTE: the actual code is too long to post here, and I've included all that I think is necessary. The form in question is actually a duplicate of another (which works perfectly) but this one doesn't.

EDIT: I was advised to eventually post the code

SECOND EDIT: I actually removed the tag enctype='multipart/formdata' on the form tag, and the code script now works. But, I need that enctype to be able upload the images. Does anyone know how I can work around that?

<?php
include 'templates/inc/header.php';
include 'templates/inc/system_helpers.php';
include 'config/config.php';
?>

<?php

error_reporting(E_ALL);
ini_set('display_errors', 'On');

ob_start();
$listing_saved = FALSE;

if (isset($_POST['submit'])) {

    // property type
    $property_type = isset($_POST['property_type']) ? $_POST['property_type'] : '';

    // property details
    $area_sq = isset($_POST['area_sq']) ? $_POST['area_sq'] : '';
    $location = isset($_POST['ex_location']) ? $_POST['ex_location'] : '';
    $bedrooms = isset($_POST['bedrooms']) ? $_POST['bedrooms'] : '';
    $bathrooms = isset($_POST['bathrooms']) ? $_POST['bathrooms'] : '';
    $furnished = isset($_POST['furnished']) ? $_POST['furnished'] : '';

    // additional information
    $description = isset($_POST['description']) ? $_POST['description'] : '';
    $garden = isset($_POST['garden']) ? $_POST['garden'] : '';
    $pool = isset($_POST['pool']) ? $_POST['pool'] : '';
    $flatlet = isset($_POST['flatlet']) ? $_POST['flatlet'] : '';
    $garage = isset($_POST['garage']) ? $_POST['garage'] : '';
    $parking = isset($_POST['parking']) ? $_POST['parking'] : '';
    $parking_spaces = isset($_POST['parking_sapces']) ? $_POST['parking_spaces'] : '';

    // pricing
    $price = isset($_POST['price']) ? $_POST['price'] : '';

    // contact person
    $first_name = isset($_POST['f_name']) ? $_POST['f_name'] : '';
    $last_name = isset($_POST['l_name']) ? $_POST['l_name'] : '';
    $email_address = isset($_POST['email_address']) ? $_POST['email_address'] : '';
    $phone = isset($_POST['phone']) ? $_POST['phone'] : '';
    $physical_address = isset($_POST['physical_address']) ? $_POST['physical_address'] : '';
    $region = isset($_POST['region']) ? $_POST['region'] : '';

    // legal consent
    $consent = isset($_POST['consent']) ? $_POST['consent'] : '';
    $isFNBBanked = isset($_POST['isFNBBanked']) ? $_POST['isFNBBanked'] : '';
    $account_holder = isset($_POST['account_holder']) ? $_POST['account_holder'] : '';
    $account_number = isset($_POST['account_number']) ? $_POST['account_number'] : '';
    $commercialAcceptance = isset($_POST['commercialAcceptance']) ? $_POST['commercialAcceptance'] : '';
    $isInfoCorrect = isset($_POST['isInfoCorrect']) ? $_POST['isInfoCorrect'] : '';
    $optionToOptOut = isset($_POST['optionToOptOut']) ? $_POST['optionToOptOut'] : '';
    $isAuthorized = isset($_POST['isAuthorized']) ? $_POST['isAuthorized'] : '';

    // create an uploads directory
    if (!is_dir(UPLOAD_DIR)) {
        mkdir(UPLOAD_DIR, 0777, true);
    }

    /*
     * List of file names to be filled in by the upload script 
     * below and to be saved in the db table "images" afterwards.
     */
    $file_names_to_save = [];

    $allowed_mime_types = explode(',', UPLOAD_ALLOWED_MIME_TYPES);

    // capture the image uploads
    if (!empty($_FILES)) {
        if (isset($_FILES['images']['error'])) {
            foreach ($_FILES['images']['error'] as $uploadedFileKey => $uploadedFileError) {
                if ($uploadedFileError === UPLOAD_ERR_NO_FILE) {
                    $errors[] = 'You did not provide any files.';
                } elseif ($uploadedFileError === UPLOAD_ERR_OK) {
                    $uploadedFileName = basename($_FILES['images']['name'][$uploadedFileKey]);

                    if ($_FILES['images']['size'][$uploadedFileKey] <= UPLOAD_MAX_FILE_SIZE) {
                        $uploadedFileType = $_FILES['images']['type'][$uploadedFileKey];
                        $uploadedFileTempName = $_FILES['images']['tmp_name'][$uploadedFileKey];

                        $uploadedFilePath = rtrim(UPLOAD_DIR, '/') . '/' . $uploadedFileName;

                        if (in_array($uploadedFileType, $allowed_mime_types)) {
                            if (!move_uploaded_file($uploadedFileTempName, $uploadedFilePath)) {
                                $errors[] = 'The file "' . $uploadedFileName . '" could not be uploaded.';
                            } else {
                                $file_names_to_save[] = $uploadedFilePath;
                            }
                        } else {
                            $errors[] = 'The extension of the file "' . $uploadedFileName . '" is not valid. Allowed extensions: JPG, JPEG, PNG, or GIF.';
                        }
                    } else {
                        $errors[] = 'The size of the file "' . $uploadedFileName . '" must be of max. ' . (UPLOAD_MAX_FILE_SIZE / 1024) . ' KB';
                    }
                }
            }
        }
    }

    if (!isset($errors)) {

        // add captured data into database
        $query = 'INSERT INTO property (
                            propertytype_id,
                            land_area,
                            ex_location, 
                            bedrooms, 
                            bathrooms,
                            is_furnished, 
                            short_desc, 
                            has_garden, 
                            has_pool, 
                            has_flatlet, 
                            has_parking,
                            parking_spaces,
                            price) 
                            VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)';

        //prepare the statement
        $stmt = $connection->prepare($query);

        //bind the parameters
        $stmt->bind_param('iisiissssssii', $property_type, $area_sq, $location, $bedrooms, $bathrooms, $furnished, $description, $garden, $pool, $flatlet, $parking, $parking_spaces);

        //execute the statement
        $stmt->execute();

        //grab the last car insert ID
        $last_insert_id = $connection->insert_id;

        // insert into persons table
        $persons_sql = 'INSERT INTO person (
                                    property_id, 
                                    firstname, 
                                    lastname, 
                                    email_address, 
                                    phone, 
                                    city,
                                    region) 
                                    VALUES (?, ?, ?, ?, ?, ?, ?)';

        $stmt = $connection->prepare($persons_sql);
        $stmt->bind_param('isssiss', $last_insert_id, $first_name, $last_name, $email_address, $phone, $physical_address, $region);
        $stmt->execute();

        // grab the last person's id
        $last_person_insert = $connection->insert_id;

        // insert into legal table
        $legal_sql = 'INSERT INTO legal (
                                    person_id, 
                                    consent, 
                                    isFNBBanked,
                                    account_holder, 
                                    account_number,
                                    commercialAcceptance,
                                    isInfoCorrect,
                                    optionToOptOut,
                                    isAuthorized 
                                    ) 
                                    VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)';

        $stmt = $connection->prepare($legal_sql);
        $stmt->bind_param('isssissss', $last_person_insert, $consent, $isFNBBanked, $account_holder, $account_number, $commercialAcceptance, $isInfoCorrect, $optionToOptOut, $isAuthorized);
        $stmt->execute();

        // close the statement
        $stmt->close();

        // save a record for each uploaded file
        foreach ($file_names_to_save as $file_name) {

            $query = 'INSERT INTO images (
                        property_id, 
                        image_name) 
                        VALUES (?, ?)';

            $stmt = $connection->prepare($query);
            $stmt->bind_param('is', $last_insert_id, $file_name);
            $stmt->execute();
            $stmt->close();
        }

        $listing_saved = TRUE;
    }
}
?>

<!-- Page Contents -->
<div >

    <div ></div>
    <div >
        <img src="./assets/MarketSquare banner for PROPERTY.jpg" alt="Market Square Form Banner">
    </div>

    <?php display_message(); ?>

    <form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="POST" enctype="multipart/form-data">

        <!-- PROPERTY DETAILS -->
        <div >

            <h3>Property Details</h3>

            <div >
                <div >
                    <select name="property_type" id="property-type" >

                        <option value="0">Property Type</option>
                        <?php
                        $query = mysqli_query($connection, "SELECT * FROM property_type");

                        if (mysqli_num_rows($query)) {
                            $i = 0;
                            while ($propertytype = mysqli_fetch_array($query)) {
                        ?>
                                <option value="<?php echo $propertytype['propertytype_id']; ?>"><?php echo $propertytype['type_name']; ?></option>
                        <?php
                                $i  ;
                            }
                        }
                        ?>

                    </select>
                </div>
            </div>

            <div >
                <div >
                    <input type="text" name="area_sq" placeholder="Area (in square metres)" required>
                    <input type="text" name="location" placeholder="Location (e.g. Veki's Village, Mountain Drive, Mbabane)">
                </div>
            </div>

            <div >
                <div >
                    <input type="text" name="bedrooms" placeholder="No. of Bedrooms" required>
                    <input type="text" name="bathrooms" placeholder="No. of Bathrooms">
                </div>
            </div>

            <label >Furnished
                <input type="checkbox" name="furnished" value="Yes">
                <span ></span>
            </label>

        </div>

        <!-- ADDITIONAL INFORMATION -->
        <div >

            <h3>
                Additional Information
                <span> (Provide details about additional features)</span>
            </h3>
            <div >
                <textarea name="description" id="description" cols="30" rows="4" placeholder="Separate your items with a comma ( , )"></textarea>
            </div>

            External Features <span>(tick where appropriate)</span>
            <div >
                <label >Garden
                    <input type="checkbox" name="garden" value="Available">
                    <span ></span>
                </label>

                <label >Swimming Pool
                    <input type="checkbox" name="pool" value="Available">
                    <span ></span>
                </label>

                <label >Bedsitter/flatlet
                    <input type="checkbox" name="flatlet" value="Available">
                    <span ></span>
                </label>
                <label >Garage
                    <input type="checkbox" name="garage" value="Available">
                    <span ></span>
                </label>

                <label >Open Parking
                    <input type="checkbox" name="parking" value="Available" id="parking-space" onclick="show_input()">
                    <span ></span>
                </label>
                <input type="text" name="parking_spaces" id="parking" placeholder="Number of parking spaces">

            </div>

            <div >
                Photos: <span>(max. 12, in all angles incl. interior)</span>
                <input type="file" name="images[]" accept=".jpg, .jpeg, .png, .gif, .webp" id="imgUpload" multiple required>
            </div>

        </div>

        <!-- PRICING -->
        <div >

            <h3>
                Give it a Price
                <span>(The sale price you wish to attach, based on the Valuation Report)</span>
            </h3>
            <div >
                <input type="text" name="price" placeholder="E " required>
            </div>

        </div>

        <!-- CONTACT PERSON -->
        <div >

            <h3>Contact Person</h3>
            <div >
                <div >
                    <input type="text" name="f_name" placeholder="First name" required>
                    <input type="text" name="l_name" placeholder="Last name">
                </div>
            </div>
            <div >
                <div >
                    <input type="email" name="email_address" placeholder="Email address">
                    <input type="text" name="phone" placeholder="Phone number" required>
                </div>
            </div>

            <div >
                <div >
                    <input type="text" name="physical_address" placeholder="Town/city (e.g. Lobamba)">
                    <input type="text" name="region" placeholder="Region (e.g. Hhohho)" required>
                </div>
            </div>

        </div>

        <!-- LEGAL -->
        <div >

            <h3>Legal</h3>
            <div >
                <input type="checkbox" name="consent" value="Given" required>
                I/We give 
            </div>

            <div >
                <input type="checkbox" name="consent_1" value="Yes" required>
                I/We confirm .
                <div >
                    <input type="text" name="acount_name" placeholder="Account Name">
                    <input type="text" name="account_number" placeholder="Account Number" required>
                </div>
            </div>

            <div >
                <input type="checkbox" name="consent_3" value="Accepted" required>
                I/We agree .
            </div>

            <div >
                <input type="checkbox" name="consent_4" value="Confirmed" required>
                I/We confirm 
            </div>

            <div >
                <input type="checkbox" name="consent_5" value="Acknowledged" required>
                I/We acknowledge 
            </div>

            <div >
                <input type="checkbox" name="consent_6" value="Confirmed" required>
                 authorised.
            </div>

        </div>

        <input type="submit" value="Submit" name="submit">
    </form>

    <?php
    if ($listing_saved) {

        redirect('listings_Properties.php', 'Your submition has been received. Please give us time to verify validity of the provided information.', 'sucess');
    }
    ?>

</div>
<?php include 'templates/inc/footer.php' ?>

code for the redirect script is

<?php

function redirect($page = FALSE, $message = NULL, $message_type = NULL){
    if(is_string($page)){
        $location = $page;
    }
    else{
        $location = $_SERVER['SCRIPT_NAME'];
    }

    // check for message
    if($message != null){
        $_SESSION['message'] = $message;
    }
    
    // check for message type
    if($message_type != null){
        $_SESSION['message_type'] = $message_type;
    }

    //...then redirect
    header('Location: '. $location);
    exit;
}

// display the message
function display_message(){

    if(!empty($_SESSION['message'])){
        $message = $_SESSION['message'];

        if(!empty($_SESSION['message_type'])){
            $message_type = $_SESSION['message_type'];

            if($message_type == 'error'){
                echo '<div  id="msg">'.$message.'</div>';
            }
            else{
                echo '<div  id="msg">'.$message.'</div>';
            }
        }

        unset($_SESSION['message']);
        unset($_SESSION['message_type']);
    }
    else{
        echo '';
    }
}

CodePudding user response:

Thank you to everyone who contributed towards me figuring out what really the problem.

What I didn't realize was that the max file upload in the script is set to 2MB while I was uploading images larger than 2MB, and my error handler wasn't working to actually prompt that. Again thank you to everyone who had suggestions. They really helped me figure out each step

CodePudding user response:

replace

if (isset($_POST['submit']))

with

if ($_SERVER['REQUEST_METHOD'] == 'POST')

here you can get more info about server and execution environment information

  • Related