CodeIgniter新增字段后插入操作触发Internal Server Error
嘿,我来帮你捋一捋这个问题!之前3个字段正常运行,新增字段后触发Internal Server Error(500错误),大概率是后端处理环节出了问题,前端视图本身很少直接导致500,但我们可以从这几个方向逐一排查:
先看CodeIgniter的错误日志:这是最快定位问题的方法!日志文件一般在
application/logs/目录下,打开最新的日志条目,里面会明确写出报错原因——比如数据库字段不匹配、SQL语法错误、必填参数缺失等等,这比瞎猜高效多了。核对表单字段与后端接收的一致性:你新增了不少字段,比如
product_des、product_exp、supplier、department这些,要确保后端控制器里的处理逻辑已经同步接收这些字段。比如用$this->input->post('字段名')的时候,有没有拼写错误?特别注意你的select标签:sub_departments是name属性,但id是sub_department,后端接收时要以name为准,别搞混了。检查数据库表结构:新增的字段必须在数据库表中有对应的列!比如你加了过期日期、供应商、部门这些字段,数据库表得同步添加这些列,还要注意字段类型匹配:
product_exp是日期类型,数据库要设成DATE;vat是数字,得用INT或DECIMAL类型。如果数据库里没有这些列,插入数据时肯定会报错。校验必填字段与数据库约束:表单里有些字段加了
required属性,比如product_des、product_exp,但后端有没有做校验?另外,supplier、department这些select默认是空值,如果数据库对应的字段设为NOT NULL,插入空值就会触发错误,要么给这些字段加默认值,要么前端强制用户选择。检查JS提交函数
addProduct():这个函数负责收集表单数据提交到后端,你得确认它有没有把所有新增字段的值都包含进去。比如AJAX请求的data参数里,是不是漏传了product_des、supplier这些字段?如果漏传了必填项,后端处理时就会抛出错误。
附上你提供的视图代码:
<?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" type="submit">添加项目</button> </div> </div> </form> <?php } } ?>
内容的提问来源于stack exchange,提问作者Otoro Wonimidei Antonedei

