0

I am working on a simple CRUD application using Codeigniter, and this section of code was working perfectly well until I added more functions.

Here is the problem: I was adding 3 items to the database from user inputs, and it had no error. But when I added more input fields to get more inputs from the user, I ended up getting an Internal Server Error when I click on the "Add Item" button.

Below is the View Code:

<?php
    if ($_SESSION[AppStrings::$NOMENCLATURE] != AppStrings::$SERVICE) {
    if ($_SESSION[AppStrings::$SIZE] != AppStrings::$MICRO) {
?>
        <form data-toggle="validator" class="form-horizontal form-material" method="post" action="#" onsubmit="addProduct(); return false;">
            <div class="form-group m-t-40">
                <div class="col-xs-12">
                    <div class="input-group">
                        <div class="input-group-addon"><i class="mdi mdi-barcode-scan"></i></div>
                            <input class="form-control" type="text" required="" placeholder=" <?= $nomenclature ?> Code" id="product_code" required/>
                        </div>
                    </div>
                </div>
                <div class="form-group m-t-40">
                    <div class="col-md-6">
                        <input class="form-control" type="text" required="" placeholder="<?= $nomenclature ?> Name" id="product_name" required/>
                    </div>
                    <div class="col-md-6">
                        <div class="input-group">
                            <div class="input-group-addon"><i class="mdi mdi-currency-ngn"></i></div>
                            <input class="form-control" type="number" required="" placeholder=" <?= $nomenclature ?> Cost Price" name="product_cp" id="product_cp" required/>
                        </div>
                    </div>
                </div>
                <div class="form-group m-t-40">
                    <div class="col-md-6">
                        <div class="input-group">
                            <div class="input-group-addon"><i class="mdi mdi-currency-ngn"></i></div>
                            <input class="form-control" type="number" required="" placeholder=" <?= $nomenclature ?> Selling Price" name="product_sp" id="product_sp" required/>
                        </div>
                    </div>
                </div>
                <div class="form-group m-t-40">
                    <div class="col-md-6">
                        <textarea class="form-control" type="text" required="" placeholder=" <?= $nomenclature ?> Description" id="product_des" required/></textarea>
                    </div>
                    <div class="col-md-6">
                        <input class="form-control" type="text" required="" placeholder=" <?= $nomenclature ?> Expiry Date" id="product_exp" onfocus="(this.type = 'date')" onblur="if (this.value == '') {
                            this.type = 'text'
                        }" required/>
                    </div>
                </div>
                <div class="form-group m-t-40">
                    <div class="col-md-6">
                        <div class="input-group">
                            <div class="input-group-addon"><i class="mdi mdi-clipboard-account"></i></div>
                            <select name="supplier" class="form-control form-control-line" type="text" id="supplier" placeholder="<?= $nomenclature ?> Supplier"> 
                                <option value="">Supplier</option>
                                <?php
                                    foreach ($suppliers as $supplier) {
                                ?>
                                        <option value='<?= $supplier[DbStrings::$SUPPLIER_NAME] ?>'><?= $supplier[DbStrings::$SUPPLIER_NAME] ?></option>
                                <?php 
                                    }
                                ?>
                            </select>
                        </div>
                    </div>
                    <div class="col-md-6">
                        <div class="input-group">
                            <div class="input-group-addon"><i class="mdi mdi-chevron-double-up"></i></div>
                                <select name="department" class="form-control form-control-line" type="text" id="department" placeholder="<?= $nomenclature ?> Department"> 
                                    <option value="">Department</option>
                                    <?php
                                        foreach ($departments as $department) {
                                    ?>
                                            <option value='<?= $department[DbStrings::$DEPARTMENT_NAME] ?>'><?= $department[DbStrings::$DEPARTMENT_NAME] ?></option>
                                    <?php 
                                        }
                                    ?>
                                </select>
                            </div>
                        </div>
                    </div>
                    <div class="form-group m-t-40">
                        <div class="col-md-6">
                            <div class="input-group">
                                <div class="input-group-addon"><i class="mdi mdi-chevron-up"></i></div>
                                <select name="sub_departments" class="form-control form-control-line" type="text" id="sub_department" placeholder="<?= $nomenclature ?> Department"> 
                                    <option value="">Sub-Department</option>
                                    <?php
                                        foreach ($sub_departments as $sub_department) {
                                    ?>
                                            <option value='<?= $sub_department[DbStrings::$SUB_DEPARTMENT_NAME] ?>'><?= $sub_department[DbStrings::$SUB_DEPARTMENT_NAME] ?></option>
                                    <?php 
                                        }
                                    ?>
                                </select>
                            </div>
                        </div>
                        <div class="col-md-6">
                            <div class="input-group">
                                <div class="input-group-addon"><i class="mdi mdi-cash"></i></div>
                                    <input class="form-control" type="number" placeholder=" <?= $nomenclature ?> Vat" id="vat"/>
                            </div>
                        </div>
                    </div>
                    <div class="form-group text-center m-t-20">
                        <div class="col-xs-12">
                            <button class="btn btn-primary btn-login btn-lg btn-block text-uppercase waves-effect waves-light" type="submit" name="product-btn">Add <?= $nomenclature ?></button>
                        </div>
                    </div>
                </div> <!-- added in the edit -->
            </div> <!-- added in the edit -->            
        </form>
<?php
    }
}
?>

Here is the AJAX code:

function addProduct() {
    var product_code = $("#product_code").val();
    var product_name = $("#product_name").val();
    var product_cp = $("#product_cp").val();
    var product_sp = $("#product_sp").val();
    var product_des = $("#product_des").val();
    var product_exp = $("#product_exp").val();
    var supplier = $("#supplier").val();
    var department = $("#department").val();
    var sub_department = $("#sub_department").val();
    var vat = $("#vat").val();

    var addUrl = "home/addproduct";
    addUrl += "/" + product_code;
    addUrl += "/" + product_name;
    addUrl += "/" + product_cp;
    addUrl += "/" + product_sp;
    addUrl += "/" + product_des;
    addUrl += "/" + product_exp;
    addUrl += "/" + supplier;
    addUrl += "/" + department;
    addUrl += "/" + sub_department;
    addUrl += "/" + vat;

    $.ajax({type: 'GET', url: addUrl, data: {},
        success: function (result) {
            $.alert({
                content: result
            });
            $("#product_code").val("");
            $("#product_name").val("");
            $("#product_cp").val("");
            $("#product_sp").val("");
            $("#product_des").val("");
            $("#product_exp").val("");
            $("#supplier").val("");
            $("#department").val("");
            $("#sub_department").val("");
            $("#vat").val("");
            location.reload();
        },
        error: function (xhr, status, error) {
            $.alert({
                content: 'Could not complete the process. ' + error
            });
        }
    });
}

Here is the Controller Function:

private function addproduct($product_code = null, $product_name = null, $product_cp = null, $product_sp = null, $product_des = null, $product_exp = null, $supplier = null, $department = null, $sub_department = null, $vat = null) {
    if (isset($product_code, $product_name, $product_cp, $product_sp, $product_des, $product_exp, $supplier, $department, $sub_department, $vat)) {
        $email = $_SESSION[DbStrings::$EMAIL];
        $product_code = $this->test_input($product_code);
        $product_name = $this->test_input($product_name);
        $product_cp = $this->test_input($product_cp);
        $product_sp = $this->test_input($product_sp);
        $product_des = $this->test_input($product_des);
        $supplier = $this->test_input($supplier);
        $department = $this->test_input($department);
        $sub_department = $this->test_input($sub_department);
        $vat = $this->test_input($vat);
        $product_exp = strtotime($product_exp);

        $insertedProduct = $this->member->insertProduct($email, $product_code, $product_name, $product_cp, $product_sp, $product_des, $supplier, $department, $sub_department, $vat, $product_exp);

        if ($insertedProduct) {
            echo "Your " . $_SESSION[AppStrings::$NOMENCLATURE] . " has been added succesfully";
        } else {
            echo "There was a problem inserting your " . $_SESSION[AppStrings::$NOMENCLATURE] . ". Please try again.";
        }
    } else {
        echo 'Please fill all fields';
    }
}

And this is the Model that does the insertion before sending back a result:

public function insertProduct($email, $product_code, $product_name, $product_cp, $product_sp, $product_des, $supplier, $department, $sub_department, $vat, $product_exp) {
    $data = array(
        DbStrings::$PRODUCTID => "",
        DbStrings::$EMAIL => $email,
        DbStrings::$PRODUCT_CODE => $product_code,
        DbStrings::$PRODUCT_NAME => $product_name,
        DbStrings::$PRODUCT_COST => $product_cp,
        DbStrings::$PRODUCT_SELLING => $product_sp,
        DbStrings::$PRODUCT_MARKUP => 9,
        DbStrings::$PRODUCT_DESCRIPTION => $product_des,
        DbStrings::$SUPPLIER => $supplier,
        DbStrings::$DEPARTMENT => $department,
        DbStrings::$SUB_DEPARTMENT => $sub_department,
        DbStrings::$VAT => $vat,
        DbStrings::$STOCK_BALANCE => 1,
        DbStrings::$MIN_LEVEL => 1,
        DbStrings::$MAX_QUANTITY => 1,
        DbStrings::$QUANTITY_SOLD => 1,
        DbStrings::$EXPIRY_DATE => $product_exp,
        DbStrings::$DATE_CREATED => time(),
        DbStrings::$DATE_STOCKED => time()
    );

    return $this->db->insert(DbStrings::$PRODUCTS_TABLE_NAME, $data);
}

I still get an error from the server, and don't know what else to do.

Correcting the above issue, the code works fine. I used: $this->output->enable_profiler(TRUE); and i was able to see the MySQL query sent by the model to the server, and when i copied the query and pasted it in my localhost:phpmyadmin, i got flagged for errors and there seem to be no syntax error.

Now this is creeping me out, as i can't fix it.

Nic3500
  • 8,144
  • 10
  • 29
  • 40
  • 4
    To see the _actual_ error message, check your servers error log. You can also change how PHP displays errors and tell it to show all errors directly on the screen (this is not something you want in production though, since it can show sensitive data, but during development, you should). Here's how to show all errors and warnings: https://stackoverflow.com/questions/5438060/showing-all-errors-and-warnings – M. Eriksson May 30 '18 at 14:32
  • I would recommend you to use `POST` instead of `GET` when sending data to the server. `POST` is for posting data and `GET` is for getting data. – M. Eriksson May 30 '18 at 14:37
  • i don't get log errors, even after changing my environment to "development", and $config['log_threshold'] = 4; – Otoro Wonimidei Antonedei May 30 '18 at 15:15
  • Make sure you have error reporting turned on. Also, which error log are you checking? Code igniters or the web servers (which is where you should look). If you get a parse error, CI won't be able to save that error in it's own error log, since it will break the execution. The web server will still save the error log though. – M. Eriksson May 30 '18 at 15:17
  • @Magnus I'm new to this kind of error, please how do i locate the web server error log, since I'm locally hosting the application with XAMP before uploading to the web. – Otoro Wonimidei Antonedei May 30 '18 at 15:30
  • Since I don't use XAMPP, I dont know where the error logs are located. Check the manual. – M. Eriksson May 30 '18 at 19:41

0 Answers0