Я работаю над простым приложением CRUD с использованием Codeigniter, и этот раздел кода работал отлично, пока я не добавил больше функций.
Вот в чем проблема: Я добавлял 3 элемента в базу данных из пользовательских входов, и у меня не было ошибок. Но когда я добавил больше полей ввода, чтобы получить больше входных данных от пользователя, я получил внутреннюю ошибку сервера, когда я нажимаю кнопку «Добавить элемент».
Ниже представлен код просмотра:
<?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
}
}
?>
Вот код AJAX:
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
});
}
});
}
Вот функция контроллера:
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';
}
}
И это Модель, которая выполняет вставку перед отправкой результата:
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);
}
Я все еще получаю сообщение об ошибке с сервера и не знаю, что еще делать.
Исправляя вышеуказанную проблему, код работает нормально. Я использовал: $this->output->enable_profiler(TRUE);, и я смог увидеть запрос MySQL, отправленный моделью на сервер, и когда я скопировал запрос и вставил его в свой localhost: phpmyadmin, я был отмечен ошибками, и, похоже, нет синтаксической ошибки.
Теперь это меня пугает, потому что я не могу это исправить.
Я бы рекомендовал вам использовать POST вместо GET при отправке данных на сервер. POST предназначен для публикации данных, а GET - для получения данных.
я не получаю ошибок в журнале, даже после изменения моей среды на «разработка» и $ config ['log_threshold'] = 4;
Убедитесь, что у вас включен отчет об ошибках. Кроме того, какой журнал ошибок вы проверяете? Воспламенители кода или веб-серверы (вот где вы должны искать). Если вы получите ошибку синтаксического анализа, CI не сможет сохранить эту ошибку в собственном журнале ошибок, так как это нарушит выполнение. Однако веб-сервер все равно будет сохранять журнал ошибок.
@Magnus Я новичок в такого рода ошибках, пожалуйста, как мне найти журнал ошибок веб-сервера, поскольку я размещаю приложение на XAMP локально перед загрузкой в Интернет.
Поскольку я не использую XAMPP, я не знаю, где находятся журналы ошибок. Проверьте руководство.






Чтобы увидеть сообщение об ошибке действительный, проверьте журнал ошибок сервера. Вы также можете изменить способ отображения ошибок PHP и указать ему, чтобы он отображал все ошибки прямо на экране (это не то, что вам нужно в производственной среде, поскольку он может отображать конфиденциальные данные, но во время разработки вы должны). Вот как показать все ошибки и предупреждения: stackoverflow.com/questions/5438060/…