我创建了一个申请表,它没有申请表。但它应该被隐藏。此应用程序不应该是自动增加唯一编号。我使用date()和mysql_insert_id()方法来生成它。但总是在我的表中显示0值。我已经发布了我的代码。请任何人都可以解释我......错误是什么......关于这种情况。这段代码成功地受到了限制。但没有显示正确的输出。总是显示0
if(isset($_POST['submitted'])){
// catch data
$loantype = $_POST['loantype'];
$calcno = $_POST['calcno'];
$memberid = $_POST['memberid'];
$appno = date('Y-m-d')."-LN/SS-".mysql_insert_id();
$amount = $_POST['amount'];
$rental_type = $_POST['rental_type'];
$apr = $_POST['apr'];
$npy = $_POST['npy'];
$flatrate = $_POST['flatRate'];
$othercharges = $_POST['othercharges'];
$repayment = $_POST['Repayment'];
$payment = $_POST['payment'];
$totpaid = $_POST['totpaid'];
$intpaid = $_POST['intpaid'];
date_default_timezone_set("Asia/Calcutta");
$created = date('Y-m-d h:i:s');
$status = "PENDING";
$discription = "NOT DEFINED";
$accepted_amount = "NOT DEFINED";
//create new loan application
$sql ='INSERT INTO tbl_loan_application VALUES (NULL,"'.$loantype.'","'.$calcno.'","'.$memberid.'","'.$appno.'","'.$amount.'","'.$rental_type.'","'.$apr.'","'.$npy.'","'.$flatrate.'","'.$othercharges.'","'.$repayment.'",
"'.$created.'","'.$status.'","'.$discription.'","'.$accepted_amount.'","'.$payment.'","'.$totpaid.'","'.$intpaid.'")';
/*else{
}*/
mysql_query($sql, $conn) or die(mysql_error());
echo'<div class="alert alert-dsgn alert-success fade in" style="width:400px; align:center; margin-left:35%; margin-top:5px;>
<button class="close" aria-hidden="true" data-dismiss="alert" type="button"></button>
<i class="fa fa-thumbs-up fa-3x"></i>
<article>
<h4>Nice! </h4>
<p>New Loan application successfully saved..<br /> </p>
</article>
</div>';
echo '<a href="newloan.php"><p align="center">Back</p></a>';
echo '<p align="center">If you want to view loan application! click <a href="approved_loan_list.php">here</a></p>';
echo mysql_insert_id();
die();
//
}
答案 0 :(得分:1)
你需要在制作mysql数据库的同时做到这一点。例如:
CREATE TABLE IF NOT EXISTS `tablename` (
`Id` int(11) NOT NULL auto_increment,
`Username` varchar(255) NOT NULL,
`Password` varchar(255) NOT NULL,
PRIMARY KEY (`Id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
这样,每次添加数据库记录时,ID列都将自动增加1。您不需要手动执行此操作,因为使用$ _POST方法时,它将具有唯一ID(例如1,2,3,4,..等..)。
答案 1 :(得分:0)
首先,考虑删除mysql,支持mysqli或PDO,因为不推荐使用mysql函数。更多信息here。
其次,您使用的函数返回您运行的LAST查询的ID,如here所述,因此如果最后一个查询没有生成新ID,它将返回0。
要开始学习mysqli或PDO,您可以考虑官方MySQL documentation或PDO和mysqli的PHP文档。
另外在相关通知中,最好使用insert来说明您希望影响的字段,如下所示:
INSERT INTO table1(field_name1, field_name2, ... , field_nameN) VALUES(value1, value2, ... , valueN)
建议解决: 使用一些默认appno插入它们,并添加此触发器:
CREATE TRIGGER `UPDATES` AFTER INSERT ON `tbl_loan_application`
FOR EACH ROW BEGIN
SET NEW.appno = CONCAT(CURDATE(), "-LN/SS-" , NEW.ID);
END
这将在数据库内的每次插入后自动分配代码。我假设您的数据库中的字段名称是代码的“appno”和自动增量字段的“ID”。
编辑:
触发器如何工作:
如上所述here,触发器是“存储函数”,它在事件之后或之前执行(更新,插入或删除)。正确的语法是:
CREATE TRIGGER `Trigger_Name` [BEFORE/AFTER] [INSERT/UPDATE/DELETE] ON `table_name`
/* Some function usually with FOR EACH ROW */
使用NEW.field_name或OLD.field_name选择受影响的值。这两个选择器返回操作前后受影响字段的值。所以,通过说这句话,答案中给出的例子如下:
CURDATE()
,即当前日期,字符串“-LN / SS-”和ID该行,只要你有一个。触发器就像表一样,通常在mysql控制台中编写一次,但有些人使用其他工具(如phpmyadin)来简化过程。
触发器在许多情况下派上用场,不仅可以编辑受监控的表,还可以编辑任何其他表。
简而言之,这是每次编辑/插入指定表格中的新行/删除行时执行的代码。
答案 2 :(得分:-1)
使用此函数生成格式正确的ID。
mt_rand(10,100);